# shahin0964/internet-billing-manager architecture

> Architecture diagram of the GitHub repository shahin0964/internet-billing-manager, 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/shahin0964/internet-billing-manager
- Repository: https://github.com/shahin0964/internet-billing-manager

## Overview

This repository combines an ISP billing Android app with a PHP server API. The main mobile workflow is to manage customers, packages, and bills offline, view local data, and synchronize pending changes when connected. The server also provides broader account, payment, expense, settings, backup, audit, and bandwidth-billing endpoints, plus scheduled monthly bill generation. Source excerpts establish the Android repository/worker wiring and parts of server sync and billing; links between unsampled PHP endpoints and storage are therefore shown only where supported by the available evidence.

Main entry points: [`app/src/main/java/com/aistudio/ispbilling/control/data/repository/OfflineFirstRepository.kt`](https://github.com/shahin0964/internet-billing-manager/blob/main/app/src/main/java/com/aistudio/ispbilling/control/data/repository/OfflineFirstRepository.kt) (Offline repository), [`app/src/main/java/com/aistudio/ispbilling/control/data/network/ApiService.kt`](https://github.com/shahin0964/internet-billing-manager/blob/main/app/src/main/java/com/aistudio/ispbilling/control/data/network/ApiService.kt) (API service), [`app/src/main/java/com/aistudio/ispbilling/control/data/sync/SyncWorker.kt`](https://github.com/shahin0964/internet-billing-manager/blob/main/app/src/main/java/com/aistudio/ispbilling/control/data/sync/SyncWorker.kt) (Sync worker), [`api/cron_monthly_billing.php`](https://github.com/shahin0964/internet-billing-manager/blob/main/api/cron_monthly_billing.php) (Monthly billing)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_mobile["Android app"]
  node_customerui["Customer screen"]
  node_packageui["Package screen"]
  node_billsui["Bills screen<br/>[BillsViewModel.kt]"]
end

subgraph group_mobiledata["Local data and sync"]
  node_repository["Offline repository"]
  node_localdb[("Room database<br/>[AppDatabase.kt]")]
  node_customerdao["Customer DAO<br/>[CustomerDao.kt]"]
  node_packagedao["Package DAO<br/>[PackageDao.kt]"]
  node_billdao["Bill DAO<br/>[BillDao.kt]"]
  node_apiclient["API client<br/>[ApiClient.kt]"]
  node_apiservice["API service<br/>[ApiService.kt]"]
  node_syncworker["Sync worker<br/>[SyncWorker.kt]"]
end

subgraph group_serverapi["Server API"]
  node_customersapi["Customer API<br/>[customers.php]"]
  node_packagesapi["Package API<br/>[packages.php]"]
  node_billsapi["Bills API<br/>[bills.php]"]
  node_paymentsapi["Payments API<br/>[payments.php]"]
  node_businessapi["Business APIs"]
  node_syncapi["Full sync<br/>[sync.php]"]
end

subgraph group_serverops["Server operations"]
  node_cronbilling["Monthly billing"]
end

subgraph group_storage["Server storage"]
  node_dbrouter["Database router<br/>[db.php]"]
  node_tenantdb[("Tenant databases")]
  node_systemdb[("System database")]
end

node_operator(("ISP operator"))
node_server(("ISP billing server"))

node_operator -->|"manages"| node_customerui
node_operator -->|"manages"| node_packageui
node_operator -->|"manages"| node_billsui
node_customerui -->|"requests"| node_repository
node_packageui -->|"requests"| node_repository
node_billsui -->|"requests"| node_repository
node_repository -->|"reads/writes"| node_customerdao
node_repository -->|"reads/writes"| node_packagedao
node_repository -->|"reads/writes"| node_billdao
node_customerdao -->|"queries"| node_localdb
node_packagedao -->|"queries"| node_localdb
node_billdao -->|"queries"| node_localdb
node_repository -->|"refreshes from"| node_apiservice
node_apiservice -->|"uses"| node_apiclient
node_syncworker -->|"loads pending"| node_customerdao
node_syncworker -->|"loads pending"| node_packagedao
node_syncworker -->|"loads pending"| node_billdao
node_syncworker -->|"uploads changes"| node_apiservice
node_apiservice -->|"requests"| node_customersapi
node_apiservice -->|"requests"| node_packagesapi
node_apiservice -->|"requests"| node_billsapi
node_server -->|"serves"| node_customersapi
node_server -->|"serves"| node_packagesapi
node_server -->|"serves"| node_billsapi
node_server -->|"serves"| node_paymentsapi
node_server -->|"serves"| node_businessapi
node_server -->|"serves"| node_syncapi
node_server -->|"runs"| node_cronbilling
node_syncapi -->|"reads/writes"| node_tenantdb
node_cronbilling -->|"resolves tenant"| node_dbrouter
node_dbrouter -->|"creates/queries"| node_systemdb
node_dbrouter -->|"creates/connects"| node_tenantdb
node_cronbilling -->|"generates bills"| node_tenantdb

click node_customerui "https://github.com/shahin0964/internet-billing-manager/blob/main/app/src/main/java/com/aistudio/ispbilling/control/ui/customer/CustomerViewModel.kt"
click node_packageui "https://github.com/shahin0964/internet-billing-manager/blob/main/app/src/main/java/com/aistudio/ispbilling/control/ui/packages/PackagesViewModel.kt"
click node_billsui "https://github.com/shahin0964/internet-billing-manager/blob/main/app/src/main/java/com/aistudio/ispbilling/control/ui/bills/BillsViewModel.kt"
click node_repository "https://github.com/shahin0964/internet-billing-manager/blob/main/app/src/main/java/com/aistudio/ispbilling/control/data/repository/OfflineFirstRepository.kt"
click node_localdb "https://github.com/shahin0964/internet-billing-manager/blob/main/app/src/main/java/com/aistudio/ispbilling/control/data/local/AppDatabase.kt"
click node_customerdao "https://github.com/shahin0964/internet-billing-manager/blob/main/app/src/main/java/com/aistudio/ispbilling/control/data/local/dao/CustomerDao.kt"
click node_packagedao "https://github.com/shahin0964/internet-billing-manager/blob/main/app/src/main/java/com/aistudio/ispbilling/control/data/local/dao/PackageDao.kt"
click node_billdao "https://github.com/shahin0964/internet-billing-manager/blob/main/app/src/main/java/com/aistudio/ispbilling/control/data/local/dao/BillDao.kt"
click node_apiclient "https://github.com/shahin0964/internet-billing-manager/blob/main/app/src/main/java/com/aistudio/ispbilling/control/data/network/ApiClient.kt"
click node_apiservice "https://github.com/shahin0964/internet-billing-manager/blob/main/app/src/main/java/com/aistudio/ispbilling/control/data/network/ApiService.kt"
click node_syncworker "https://github.com/shahin0964/internet-billing-manager/blob/main/app/src/main/java/com/aistudio/ispbilling/control/data/sync/SyncWorker.kt"
click node_customersapi "https://github.com/shahin0964/internet-billing-manager/blob/main/api/customers.php"
click node_packagesapi "https://github.com/shahin0964/internet-billing-manager/blob/main/api/packages.php"
click node_billsapi "https://github.com/shahin0964/internet-billing-manager/blob/main/api/bills.php"
click node_paymentsapi "https://github.com/shahin0964/internet-billing-manager/blob/main/api/payments.php"
click node_businessapi "https://github.com/shahin0964/internet-billing-manager/tree/main/api"
click node_syncapi "https://github.com/shahin0964/internet-billing-manager/blob/main/api/sync.php"
click node_cronbilling "https://github.com/shahin0964/internet-billing-manager/blob/main/api/cron_monthly_billing.php"
click node_dbrouter "https://github.com/shahin0964/internet-billing-manager/blob/main/api/db.php"

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_customerui,node_packageui,node_billsui toneBlue
class node_repository,node_localdb,node_customerdao,node_packagedao,node_billdao,node_apiclient,node_apiservice,node_syncworker toneAmber
class node_customersapi,node_packagesapi,node_billsapi,node_paymentsapi,node_businessapi,node_syncapi,node_server toneMint
class node_cronbilling toneRose
class node_dbrouter,node_tenantdb,node_systemdb,node_operator toneIndigo
```

## Components

### Android app

- [Customer screen](https://github.com/shahin0964/internet-billing-manager/blob/main/app/src/main/java/com/aistudio/ispbilling/control/ui/customer/CustomerViewModel.kt): `app/src/main/java/com/aistudio/ispbilling/control/ui/customer/CustomerViewModel.kt`
- [Package screen](https://github.com/shahin0964/internet-billing-manager/blob/main/app/src/main/java/com/aistudio/ispbilling/control/ui/packages/PackagesViewModel.kt): `app/src/main/java/com/aistudio/ispbilling/control/ui/packages/PackagesViewModel.kt`
- [Bills screen](https://github.com/shahin0964/internet-billing-manager/blob/main/app/src/main/java/com/aistudio/ispbilling/control/ui/bills/BillsViewModel.kt): `app/src/main/java/com/aistudio/ispbilling/control/ui/bills/BillsViewModel.kt`

### Local data and sync

- [Offline repository](https://github.com/shahin0964/internet-billing-manager/blob/main/app/src/main/java/com/aistudio/ispbilling/control/data/repository/OfflineFirstRepository.kt): `app/src/main/java/com/aistudio/ispbilling/control/data/repository/OfflineFirstRepository.kt`
- [Room database](https://github.com/shahin0964/internet-billing-manager/blob/main/app/src/main/java/com/aistudio/ispbilling/control/data/local/AppDatabase.kt): `app/src/main/java/com/aistudio/ispbilling/control/data/local/AppDatabase.kt`
- [Customer DAO](https://github.com/shahin0964/internet-billing-manager/blob/main/app/src/main/java/com/aistudio/ispbilling/control/data/local/dao/CustomerDao.kt): `app/src/main/java/com/aistudio/ispbilling/control/data/local/dao/CustomerDao.kt`
- [Package DAO](https://github.com/shahin0964/internet-billing-manager/blob/main/app/src/main/java/com/aistudio/ispbilling/control/data/local/dao/PackageDao.kt): `app/src/main/java/com/aistudio/ispbilling/control/data/local/dao/PackageDao.kt`
- [Bill DAO](https://github.com/shahin0964/internet-billing-manager/blob/main/app/src/main/java/com/aistudio/ispbilling/control/data/local/dao/BillDao.kt): `app/src/main/java/com/aistudio/ispbilling/control/data/local/dao/BillDao.kt`
- [API client](https://github.com/shahin0964/internet-billing-manager/blob/main/app/src/main/java/com/aistudio/ispbilling/control/data/network/ApiClient.kt): `app/src/main/java/com/aistudio/ispbilling/control/data/network/ApiClient.kt`
- [API service](https://github.com/shahin0964/internet-billing-manager/blob/main/app/src/main/java/com/aistudio/ispbilling/control/data/network/ApiService.kt): `app/src/main/java/com/aistudio/ispbilling/control/data/network/ApiService.kt`
- [Sync worker](https://github.com/shahin0964/internet-billing-manager/blob/main/app/src/main/java/com/aistudio/ispbilling/control/data/sync/SyncWorker.kt): `app/src/main/java/com/aistudio/ispbilling/control/data/sync/SyncWorker.kt`

### Server API

- [Customer API](https://github.com/shahin0964/internet-billing-manager/blob/main/api/customers.php): `api/customers.php`
- [Package API](https://github.com/shahin0964/internet-billing-manager/blob/main/api/packages.php): `api/packages.php`
- [Bills API](https://github.com/shahin0964/internet-billing-manager/blob/main/api/bills.php): `api/bills.php`
- [Payments API](https://github.com/shahin0964/internet-billing-manager/blob/main/api/payments.php): `api/payments.php`
- [Business APIs](https://github.com/shahin0964/internet-billing-manager/tree/main/api): `api`
- [Full sync](https://github.com/shahin0964/internet-billing-manager/blob/main/api/sync.php): `api/sync.php`

### Server operations

- [Monthly billing](https://github.com/shahin0964/internet-billing-manager/blob/main/api/cron_monthly_billing.php): `api/cron_monthly_billing.php`

### Server storage

- [Database router](https://github.com/shahin0964/internet-billing-manager/blob/main/api/db.php): `api/db.php`
- **Tenant databases**
- **System database**

### Other components

- **ISP operator**
- **ISP billing server**

## Connections

- ISP operator → Customer screen: manages
- ISP operator → Package screen: manages
- ISP operator → Bills screen: manages
- Customer screen → Offline repository: requests
- Package screen → Offline repository: requests
- Bills screen → Offline repository: requests
- Offline repository → Customer DAO: reads/writes
- Offline repository → Package DAO: reads/writes
- Offline repository → Bill DAO: reads/writes
- Customer DAO → Room database: queries
- Package DAO → Room database: queries
- Bill DAO → Room database: queries
- Offline repository → API service: refreshes from
- API service → API client: uses
- Sync worker → Customer DAO: loads pending
- Sync worker → Package DAO: loads pending
- Sync worker → Bill DAO: loads pending
- Sync worker → API service: uploads changes
- API service → Customer API: requests
- API service → Package API: requests
- API service → Bills API: requests
- ISP billing server → Customer API: serves
- ISP billing server → Package API: serves
- ISP billing server → Bills API: serves
- ISP billing server → Payments API: serves
- ISP billing server → Business APIs: serves
- ISP billing server → Full sync: serves
- ISP billing server → Monthly billing: runs
- Full sync → Tenant databases: reads/writes
- Monthly billing → Database router: resolves tenant
- Database router → System database: creates/queries
- Database router → Tenant databases: creates/connects
- Monthly billing → Tenant databases: generates bills
