# arunava16/currency-exchange-demo architecture

> Architecture diagram of the GitHub repository arunava16/currency-exchange-demo, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-26). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/arunava16/currency-exchange-demo
- Repository: https://github.com/arunava16/currency-exchange-demo

## Overview

The tree identifies an Android currency-exchange demo with presentation, domain, and data layers. Its likely user workflow is viewing latest exchange rates, with network and local-persistence components represented in the project. The README is empty and the only supplied source excerpt is the build file, so these roles come from filenames rather than inspected runtime code. Accordingly, the graph shows the components but omits call and data-flow edges that cannot be verified.

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Application"]
  node_app_entry["App setup"]
end

subgraph group_presentation["Presentation"]
  node_activity["Main activity<br/>[MainActivity.kt]"]
  node_viewmodel["Main view model<br/>[MainViewModel.kt]"]
  node_viewstate["View state<br/>[ViewState.kt]"]
  node_currency_model["Currency model<br/>[CurrencyModel.kt]"]
  node_grid_adapter["Currency grid"]
end

subgraph group_domain["Domain"]
  node_usecase["Latest rates"]
  node_repository_contract["Rates contract"]
  node_exchange_rate["Exchange rate<br/>[ExchangeRate.kt]"]
end

subgraph group_data["Data"]
  node_repository_impl["Rates repository"]
  node_api_handler["API handler"]
  node_api["Rates API"]
  node_response["Rates response"]
  node_database[("Rates database<br/>[ExchangeRatesDb.kt]")]
  node_dao["Rates DAO"]
end

node_user(("App user"))
node_open_exchange["Open Exchange Rates"]

click node_app_entry "https://github.com/arunava16/currency-exchange-demo/blob/master/app/src/main/java/com/example/currencyexchangedemo/CurrencyExchangeDemoApp.kt"
click node_activity "https://github.com/arunava16/currency-exchange-demo/blob/master/app/src/main/java/com/example/currencyexchangedemo/presentation/view/MainActivity.kt"
click node_viewmodel "https://github.com/arunava16/currency-exchange-demo/blob/master/app/src/main/java/com/example/currencyexchangedemo/presentation/viewmodel/MainViewModel.kt"
click node_viewstate "https://github.com/arunava16/currency-exchange-demo/blob/master/app/src/main/java/com/example/currencyexchangedemo/presentation/state/ViewState.kt"
click node_currency_model "https://github.com/arunava16/currency-exchange-demo/blob/master/app/src/main/java/com/example/currencyexchangedemo/presentation/model/CurrencyModel.kt"
click node_grid_adapter "https://github.com/arunava16/currency-exchange-demo/blob/master/app/src/main/java/com/example/currencyexchangedemo/presentation/view/CurrencyGridAdapter.kt"
click node_usecase "https://github.com/arunava16/currency-exchange-demo/blob/master/app/src/main/java/com/example/currencyexchangedemo/domain/usecase/GetLatestRatesUseCase.kt"
click node_repository_contract "https://github.com/arunava16/currency-exchange-demo/blob/master/app/src/main/java/com/example/currencyexchangedemo/domain/repository/ExchangeRatesRepository.kt"
click node_exchange_rate "https://github.com/arunava16/currency-exchange-demo/blob/master/app/src/main/java/com/example/currencyexchangedemo/domain/model/ExchangeRate.kt"
click node_repository_impl "https://github.com/arunava16/currency-exchange-demo/blob/master/app/src/main/java/com/example/currencyexchangedemo/data/repository/ExchangeRatesRepositoryImpl.kt"
click node_api_handler "https://github.com/arunava16/currency-exchange-demo/blob/master/app/src/main/java/com/example/currencyexchangedemo/data/network/api/ExchangeRatesApiHandler.kt"
click node_api "https://github.com/arunava16/currency-exchange-demo/blob/master/app/src/main/java/com/example/currencyexchangedemo/data/network/api/OpenExchangeRatesApi.kt"
click node_response "https://github.com/arunava16/currency-exchange-demo/blob/master/app/src/main/java/com/example/currencyexchangedemo/data/network/dto/LatestRatesResponse.kt"
click node_database "https://github.com/arunava16/currency-exchange-demo/blob/master/app/src/main/java/com/example/currencyexchangedemo/data/local/ExchangeRatesDb.kt"
click node_dao "https://github.com/arunava16/currency-exchange-demo/blob/master/app/src/main/java/com/example/currencyexchangedemo/data/local/dao/ExchangeRatesDao.kt"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_app_entry,node_user toneBlue
class node_activity,node_viewmodel,node_viewstate,node_currency_model,node_grid_adapter toneAmber
class node_usecase,node_repository_contract,node_exchange_rate toneMint
class node_repository_impl,node_api_handler,node_api,node_response,node_database,node_dao toneRose
class node_open_exchange toneIndigo
```

## Components

### Application

- [App setup](https://github.com/arunava16/currency-exchange-demo/blob/master/app/src/main/java/com/example/currencyexchangedemo/CurrencyExchangeDemoApp.kt): `app/src/main/java/com/example/currencyexchangedemo/CurrencyExchangeDemoApp.kt`

### Presentation

- [Main activity](https://github.com/arunava16/currency-exchange-demo/blob/master/app/src/main/java/com/example/currencyexchangedemo/presentation/view/MainActivity.kt): `app/src/main/java/com/example/currencyexchangedemo/presentation/view/MainActivity.kt`
- [Main view model](https://github.com/arunava16/currency-exchange-demo/blob/master/app/src/main/java/com/example/currencyexchangedemo/presentation/viewmodel/MainViewModel.kt): `app/src/main/java/com/example/currencyexchangedemo/presentation/viewmodel/MainViewModel.kt`
- [View state](https://github.com/arunava16/currency-exchange-demo/blob/master/app/src/main/java/com/example/currencyexchangedemo/presentation/state/ViewState.kt): `app/src/main/java/com/example/currencyexchangedemo/presentation/state/ViewState.kt`
- [Currency model](https://github.com/arunava16/currency-exchange-demo/blob/master/app/src/main/java/com/example/currencyexchangedemo/presentation/model/CurrencyModel.kt): `app/src/main/java/com/example/currencyexchangedemo/presentation/model/CurrencyModel.kt`
- [Currency grid](https://github.com/arunava16/currency-exchange-demo/blob/master/app/src/main/java/com/example/currencyexchangedemo/presentation/view/CurrencyGridAdapter.kt): `app/src/main/java/com/example/currencyexchangedemo/presentation/view/CurrencyGridAdapter.kt`

### Domain

- [Latest rates](https://github.com/arunava16/currency-exchange-demo/blob/master/app/src/main/java/com/example/currencyexchangedemo/domain/usecase/GetLatestRatesUseCase.kt): `app/src/main/java/com/example/currencyexchangedemo/domain/usecase/GetLatestRatesUseCase.kt`
- [Rates contract](https://github.com/arunava16/currency-exchange-demo/blob/master/app/src/main/java/com/example/currencyexchangedemo/domain/repository/ExchangeRatesRepository.kt): `app/src/main/java/com/example/currencyexchangedemo/domain/repository/ExchangeRatesRepository.kt`
- [Exchange rate](https://github.com/arunava16/currency-exchange-demo/blob/master/app/src/main/java/com/example/currencyexchangedemo/domain/model/ExchangeRate.kt): `app/src/main/java/com/example/currencyexchangedemo/domain/model/ExchangeRate.kt`

### Data

- [Rates repository](https://github.com/arunava16/currency-exchange-demo/blob/master/app/src/main/java/com/example/currencyexchangedemo/data/repository/ExchangeRatesRepositoryImpl.kt): `app/src/main/java/com/example/currencyexchangedemo/data/repository/ExchangeRatesRepositoryImpl.kt`
- [API handler](https://github.com/arunava16/currency-exchange-demo/blob/master/app/src/main/java/com/example/currencyexchangedemo/data/network/api/ExchangeRatesApiHandler.kt): `app/src/main/java/com/example/currencyexchangedemo/data/network/api/ExchangeRatesApiHandler.kt`
- [Rates API](https://github.com/arunava16/currency-exchange-demo/blob/master/app/src/main/java/com/example/currencyexchangedemo/data/network/api/OpenExchangeRatesApi.kt): `app/src/main/java/com/example/currencyexchangedemo/data/network/api/OpenExchangeRatesApi.kt`
- [Rates response](https://github.com/arunava16/currency-exchange-demo/blob/master/app/src/main/java/com/example/currencyexchangedemo/data/network/dto/LatestRatesResponse.kt): `app/src/main/java/com/example/currencyexchangedemo/data/network/dto/LatestRatesResponse.kt`
- [Rates database](https://github.com/arunava16/currency-exchange-demo/blob/master/app/src/main/java/com/example/currencyexchangedemo/data/local/ExchangeRatesDb.kt): `app/src/main/java/com/example/currencyexchangedemo/data/local/ExchangeRatesDb.kt`
- [Rates DAO](https://github.com/arunava16/currency-exchange-demo/blob/master/app/src/main/java/com/example/currencyexchangedemo/data/local/dao/ExchangeRatesDao.kt): `app/src/main/java/com/example/currencyexchangedemo/data/local/dao/ExchangeRatesDao.kt`

### Other components

- **App user**
- **Open Exchange Rates**
