# katragadda-bharath/exacker-app architecture

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

- Interactive diagram: https://gitdiagram.com/katragadda-bharath/exacker-app
- Repository: https://github.com/katragadda-bharath/exacker-app

## Overview

Exacker is an Android app for managing groups, workers, land, expenses, and payments, with local persistence and server synchronization. The user enters through the app screens, works with domain records, and can synchronize queued changes to a Node/Express service backed by SQL Server. The tree shows separate UI, repository, database, and sync layers; server excerpts confirm sync processing and database operations. Android implementation details and the architecture document were not sampled, so links between Android layers are limited to the evident sync contract.

Main entry points: [`app/src/main/java/com/example/exacker/MainActivity.java`](https://github.com/katragadda-bharath/exacker-app/blob/main/app/src/main/java/com/example/exacker/MainActivity.java) (App entry), [`app/src/main/java/com/example/exacker/repository`](https://github.com/katragadda-bharath/exacker-app/tree/main/app/src/main/java/com/example/exacker/repository) (Domain repositories), [`app/src/main/java/com/example/exacker/repository/SyncRepository.java`](https://github.com/katragadda-bharath/exacker-app/blob/main/app/src/main/java/com/example/exacker/repository/SyncRepository.java) (Sync repository), [`app/src/main/java/com/example/exacker/network/SyncApi.java`](https://github.com/katragadda-bharath/exacker-app/blob/main/app/src/main/java/com/example/exacker/network/SyncApi.java) (Sync API client)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_android["Android app"]
  node_main["App entry<br/>[MainActivity.java]"]
  node_domain_screens["Domain screens"]
  node_guide["User guide<br/>[GuideActivity.java]"]
  node_viewmodels["View models"]
  node_sync_screen["Sync screen<br/>[SyncActivity.java]"]
end

subgraph group_local["Local data"]
  node_repositories["Domain repositories"]
  node_local_transactions["Local transactions"]
  node_daos["Domain DAOs"]
  node_entities["Domain records"]
  node_database[("App database")]
  node_db_provider["Database provider"]
end

subgraph group_sync["Synchronization"]
  node_sync_repository["Sync repository"]
  node_sync_queue["Pending queue<br/>[SyncQueue.java]"]
  node_sync_queue_dao["Queue DAO<br/>[SyncQueueDao.java]"]
  node_sync_api["Sync API client<br/>[SyncApi.java]"]
  node_sync_protocol["Sync messages<br/>[SyncRequest.java]"]
end

subgraph group_backend["Sync service"]
  node_server["Sync API server<br/>[server.js]"]
  node_sqlserver[("SQL Server")]
  node_ngrok["ngrok tunnel"]
end

node_user(("User"))

node_user -->|"opens"| node_main
node_main -->|"navigates"| node_domain_screens
node_main -->|"opens"| node_sync_screen
node_main -->|"opens"| node_guide
node_domain_screens -->|"uses"| node_viewmodels
node_viewmodels -->|"delegates"| node_repositories
node_repositories -->|"accesses"| node_daos
node_repositories -->|"coordinates"| node_local_transactions
node_daos -->|"queries"| node_database
node_database -->|"stores"| node_entities
node_db_provider -->|"provides"| node_database
node_user -->|"requests sync"| node_sync_screen
node_sync_screen -->|"delegates"| node_sync_repository
node_sync_repository -->|"reads queue"| node_sync_queue_dao
node_sync_queue_dao -->|"accesses"| node_sync_queue
node_sync_repository -->|"sends operations"| node_sync_api
node_sync_api -->|"encodes requests"| node_sync_protocol
node_sync_api -->|"HTTP sync"| node_server
node_server -->|"executes SQL"| node_sqlserver
node_server -.->|"opens tunnel"| node_ngrok

click node_main "https://github.com/katragadda-bharath/exacker-app/blob/main/app/src/main/java/com/example/exacker/MainActivity.java"
click node_domain_screens "https://github.com/katragadda-bharath/exacker-app/tree/main/app/src/main/java/com/example/exacker/ui"
click node_guide "https://github.com/katragadda-bharath/exacker-app/blob/main/app/src/main/java/com/example/exacker/ui/GuideActivity.java"
click node_viewmodels "https://github.com/katragadda-bharath/exacker-app/tree/main/app/src/main/java/com/example/exacker/viewmodel"
click node_repositories "https://github.com/katragadda-bharath/exacker-app/tree/main/app/src/main/java/com/example/exacker/repository"
click node_local_transactions "https://github.com/katragadda-bharath/exacker-app/blob/main/app/src/main/java/com/example/exacker/repository/LocalTransactionManager.java"
click node_daos "https://github.com/katragadda-bharath/exacker-app/tree/main/app/src/main/java/com/example/exacker/dao"
click node_entities "https://github.com/katragadda-bharath/exacker-app/tree/main/app/src/main/java/com/example/exacker/entity"
click node_database "https://github.com/katragadda-bharath/exacker-app/blob/main/app/src/main/java/com/example/exacker/database/ExackerDatabase.java"
click node_db_provider "https://github.com/katragadda-bharath/exacker-app/blob/main/app/src/main/java/com/example/exacker/database/DatabaseProvider.java"
click node_sync_screen "https://github.com/katragadda-bharath/exacker-app/blob/main/app/src/main/java/com/example/exacker/ui/SyncActivity.java"
click node_sync_repository "https://github.com/katragadda-bharath/exacker-app/blob/main/app/src/main/java/com/example/exacker/repository/SyncRepository.java"
click node_sync_queue "https://github.com/katragadda-bharath/exacker-app/blob/main/app/src/main/java/com/example/exacker/entity/SyncQueue.java"
click node_sync_queue_dao "https://github.com/katragadda-bharath/exacker-app/blob/main/app/src/main/java/com/example/exacker/dao/SyncQueueDao.java"
click node_sync_api "https://github.com/katragadda-bharath/exacker-app/blob/main/app/src/main/java/com/example/exacker/network/SyncApi.java"
click node_sync_protocol "https://github.com/katragadda-bharath/exacker-app/blob/main/app/src/main/java/com/example/exacker/network/SyncRequest.java"
click node_server "https://github.com/katragadda-bharath/exacker-app/blob/main/Sync%20Data/server.js"

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_main,node_domain_screens,node_guide,node_viewmodels,node_sync_screen,node_user toneBlue
class node_repositories,node_local_transactions,node_daos,node_entities,node_database,node_db_provider toneAmber
class node_sync_repository,node_sync_queue,node_sync_queue_dao,node_sync_api,node_sync_protocol toneMint
class node_server,node_sqlserver,node_ngrok toneRose
```

## Components

### Android app

- [App entry](https://github.com/katragadda-bharath/exacker-app/blob/main/app/src/main/java/com/example/exacker/MainActivity.java): `app/src/main/java/com/example/exacker/MainActivity.java`
- [Domain screens](https://github.com/katragadda-bharath/exacker-app/tree/main/app/src/main/java/com/example/exacker/ui): `app/src/main/java/com/example/exacker/ui`
- [User guide](https://github.com/katragadda-bharath/exacker-app/blob/main/app/src/main/java/com/example/exacker/ui/GuideActivity.java): `app/src/main/java/com/example/exacker/ui/GuideActivity.java`
- [View models](https://github.com/katragadda-bharath/exacker-app/tree/main/app/src/main/java/com/example/exacker/viewmodel): `app/src/main/java/com/example/exacker/viewmodel`
- [Sync screen](https://github.com/katragadda-bharath/exacker-app/blob/main/app/src/main/java/com/example/exacker/ui/SyncActivity.java): `app/src/main/java/com/example/exacker/ui/SyncActivity.java`

### Local data

- [Domain repositories](https://github.com/katragadda-bharath/exacker-app/tree/main/app/src/main/java/com/example/exacker/repository): `app/src/main/java/com/example/exacker/repository`
- [Local transactions](https://github.com/katragadda-bharath/exacker-app/blob/main/app/src/main/java/com/example/exacker/repository/LocalTransactionManager.java): `app/src/main/java/com/example/exacker/repository/LocalTransactionManager.java`
- [Domain DAOs](https://github.com/katragadda-bharath/exacker-app/tree/main/app/src/main/java/com/example/exacker/dao): `app/src/main/java/com/example/exacker/dao`
- [Domain records](https://github.com/katragadda-bharath/exacker-app/tree/main/app/src/main/java/com/example/exacker/entity): `app/src/main/java/com/example/exacker/entity`
- [App database](https://github.com/katragadda-bharath/exacker-app/blob/main/app/src/main/java/com/example/exacker/database/ExackerDatabase.java): `app/src/main/java/com/example/exacker/database/ExackerDatabase.java`
- [Database provider](https://github.com/katragadda-bharath/exacker-app/blob/main/app/src/main/java/com/example/exacker/database/DatabaseProvider.java): `app/src/main/java/com/example/exacker/database/DatabaseProvider.java`

### Synchronization

- [Sync repository](https://github.com/katragadda-bharath/exacker-app/blob/main/app/src/main/java/com/example/exacker/repository/SyncRepository.java): `app/src/main/java/com/example/exacker/repository/SyncRepository.java`
- [Pending queue](https://github.com/katragadda-bharath/exacker-app/blob/main/app/src/main/java/com/example/exacker/entity/SyncQueue.java): `app/src/main/java/com/example/exacker/entity/SyncQueue.java`
- [Queue DAO](https://github.com/katragadda-bharath/exacker-app/blob/main/app/src/main/java/com/example/exacker/dao/SyncQueueDao.java): `app/src/main/java/com/example/exacker/dao/SyncQueueDao.java`
- [Sync API client](https://github.com/katragadda-bharath/exacker-app/blob/main/app/src/main/java/com/example/exacker/network/SyncApi.java): `app/src/main/java/com/example/exacker/network/SyncApi.java`
- [Sync messages](https://github.com/katragadda-bharath/exacker-app/blob/main/app/src/main/java/com/example/exacker/network/SyncRequest.java): `app/src/main/java/com/example/exacker/network/SyncRequest.java`

### Sync service

- [Sync API server](https://github.com/katragadda-bharath/exacker-app/blob/main/Sync%20Data/server.js): `Sync Data/server.js`
- **SQL Server**
- **ngrok tunnel**

### Other components

- **User**

## Connections

- User → App entry: opens
- App entry → Domain screens: navigates
- App entry → Sync screen: opens
- App entry → User guide: opens
- Domain screens → View models: uses
- View models → Domain repositories: delegates
- Domain repositories → Domain DAOs: accesses
- Domain repositories → Local transactions: coordinates
- Domain DAOs → App database: queries
- App database → Domain records: stores
- Database provider → App database: provides
- User → Sync screen: requests sync
- Sync screen → Sync repository: delegates
- Sync repository → Queue DAO: reads queue
- Queue DAO → Pending queue: accesses
- Sync repository → Sync API client: sends operations
- Sync API client → Sync messages: encodes requests
- Sync API client → Sync API server: HTTP sync
- Sync API server → SQL Server: executes SQL
- Sync API server → ngrok tunnel: opens tunnel
