# achintxv/backend-ledger architecture

> Architecture diagram of the GitHub repository achintxv/backend-ledger, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-11). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/achintxv/backend-ledger
- Repository: https://github.com/achintxv/backend-ledger

## Overview

Backend Ledger is an Express API for user authentication, account management, and ledger-backed transfers. Clients enter through the server and app router; route handlers apply authentication where configured, then controllers perform domain operations through Mongoose models. Transfers check account status and ledger-derived balance, record transaction and debit/credit entries in a MongoDB session, and send a success email. The source index confirms the server references the app and database configuration; the README is empty, so broader capability descriptions are limited to the sampled code and index.

Main entry points: [`src/controllers/transaction.controller.js`](https://github.com/achintxv/backend-ledger/blob/main/src/controllers/transaction.controller.js) (Transaction controller), [`src/app.js`](https://github.com/achintxv/backend-ledger/blob/main/src/app.js) (Express app), [`src/controllers/auth.controller.js`](https://github.com/achintxv/backend-ledger/blob/main/src/controllers/auth.controller.js) (Auth controller), [`src/middleware/auth.middleware.js`](https://github.com/achintxv/backend-ledger/blob/main/src/middleware/auth.middleware.js) (Auth middleware)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["API routing"]
  node_server["HTTP server<br/>[server.js]"]
  node_app["Express app<br/>[app.js]"]
  node_auth_routes["Auth routes<br/>[auth.routes.js]"]
  node_account_routes["Account routes<br/>[account.routes.js]"]
  node_transaction_routes["Transaction routes"]
end

subgraph group_identity["Identity"]
  node_auth_controller["Auth controller<br/>[auth.controller.js]"]
  node_auth_middleware["Auth middleware<br/>[auth.middleware.js]"]
  node_user_model[("User model<br/>[user.model.js]")]
  node_blacklist_model[("Token blacklist<br/>[blacklist.model.js]")]
end

subgraph group_accounts["Accounts and ledger"]
  node_account_controller["Account controller"]
  node_account_model[("Account model<br/>[account.model.js]")]
  node_ledger_model[("Ledger model<br/>[ledger.model.js]")]
end

subgraph group_transactions["Transfers and notifications"]
  node_transaction_controller["Transaction controller"]
  node_transaction_model[("Transaction model")]
  node_email_service["Email service<br/>[email.service.js]"]
end

node_client(("API client"))
node_db_config["Database config<br/>[db.js]"]
node_mongo[("MongoDB")]
node_mail_provider["Gmail transport"]

node_client -.->|"sends requests"| node_server
node_server -->|"starts app"| node_app
node_server -->|"loads config"| node_db_config
node_app -->|"mounts routes"| node_auth_routes
node_app -->|"mounts routes"| node_account_routes
node_app -->|"mounts routes"| node_transaction_routes
node_auth_routes -->|"dispatches to"| node_auth_controller
node_account_routes -->|"checks identity"| node_auth_middleware
node_account_routes -->|"dispatches to"| node_account_controller
node_transaction_routes -->|"checks identity"| node_auth_middleware
node_transaction_routes -->|"dispatches to"| node_transaction_controller
node_auth_controller -->|"reads and writes"| node_user_model
node_auth_controller -->|"records logout"| node_blacklist_model
node_auth_controller -->|"sends welcome"| node_email_service
node_auth_middleware -->|"loads user"| node_user_model
node_auth_middleware -->|"checks token"| node_blacklist_model
node_account_controller -->|"manages accounts"| node_account_model
node_account_model -->|"aggregates balance"| node_ledger_model
node_transaction_controller -->|"checks accounts"| node_account_model
node_transaction_controller -->|"records transfer"| node_transaction_model
node_transaction_controller -->|"writes entries"| node_ledger_model
node_transaction_controller -->|"sends receipt"| node_email_service
node_email_service -->|"sends email"| node_mail_provider
node_user_model -.->|"persists users"| node_mongo
node_blacklist_model -.->|"persists tokens"| node_mongo
node_account_model -.->|"persists accounts"| node_mongo
node_ledger_model -.->|"persists entries"| node_mongo
node_transaction_model -.->|"persists transfers"| node_mongo

click node_server "https://github.com/achintxv/backend-ledger/blob/main/server.js"
click node_app "https://github.com/achintxv/backend-ledger/blob/main/src/app.js"
click node_auth_routes "https://github.com/achintxv/backend-ledger/blob/main/src/routes/auth.routes.js"
click node_account_routes "https://github.com/achintxv/backend-ledger/blob/main/src/routes/account.routes.js"
click node_transaction_routes "https://github.com/achintxv/backend-ledger/blob/main/src/routes/transaction.routes.js"
click node_auth_controller "https://github.com/achintxv/backend-ledger/blob/main/src/controllers/auth.controller.js"
click node_auth_middleware "https://github.com/achintxv/backend-ledger/blob/main/src/middleware/auth.middleware.js"
click node_user_model "https://github.com/achintxv/backend-ledger/blob/main/src/models/user.model.js"
click node_blacklist_model "https://github.com/achintxv/backend-ledger/blob/main/src/models/blacklist.model.js"
click node_account_controller "https://github.com/achintxv/backend-ledger/blob/main/src/controllers/account.controller.js"
click node_account_model "https://github.com/achintxv/backend-ledger/blob/main/src/models/account.model.js"
click node_ledger_model "https://github.com/achintxv/backend-ledger/blob/main/src/models/ledger.model.js"
click node_transaction_controller "https://github.com/achintxv/backend-ledger/blob/main/src/controllers/transaction.controller.js"
click node_transaction_model "https://github.com/achintxv/backend-ledger/blob/main/src/models/transaction.model.js"
click node_email_service "https://github.com/achintxv/backend-ledger/blob/main/src/services/email.service.js"
click node_db_config "https://github.com/achintxv/backend-ledger/blob/main/src/config/db.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_server,node_app,node_auth_routes,node_account_routes,node_transaction_routes,node_client toneBlue
class node_auth_controller,node_auth_middleware,node_user_model,node_blacklist_model,node_db_config,node_mongo toneAmber
class node_account_controller,node_account_model,node_ledger_model toneMint
class node_transaction_controller,node_transaction_model,node_email_service toneRose
class node_mail_provider toneIndigo
```

## Components

### API routing

- [HTTP server](https://github.com/achintxv/backend-ledger/blob/main/server.js): `server.js`
- [Express app](https://github.com/achintxv/backend-ledger/blob/main/src/app.js): `src/app.js`
- [Auth routes](https://github.com/achintxv/backend-ledger/blob/main/src/routes/auth.routes.js): `src/routes/auth.routes.js`
- [Account routes](https://github.com/achintxv/backend-ledger/blob/main/src/routes/account.routes.js): `src/routes/account.routes.js`
- [Transaction routes](https://github.com/achintxv/backend-ledger/blob/main/src/routes/transaction.routes.js): `src/routes/transaction.routes.js`

### Identity

- [Auth controller](https://github.com/achintxv/backend-ledger/blob/main/src/controllers/auth.controller.js): `src/controllers/auth.controller.js`
- [Auth middleware](https://github.com/achintxv/backend-ledger/blob/main/src/middleware/auth.middleware.js): `src/middleware/auth.middleware.js`
- [User model](https://github.com/achintxv/backend-ledger/blob/main/src/models/user.model.js): `src/models/user.model.js`
- [Token blacklist](https://github.com/achintxv/backend-ledger/blob/main/src/models/blacklist.model.js): `src/models/blacklist.model.js`

### Accounts and ledger

- [Account controller](https://github.com/achintxv/backend-ledger/blob/main/src/controllers/account.controller.js): `src/controllers/account.controller.js`
- [Account model](https://github.com/achintxv/backend-ledger/blob/main/src/models/account.model.js): `src/models/account.model.js`
- [Ledger model](https://github.com/achintxv/backend-ledger/blob/main/src/models/ledger.model.js): `src/models/ledger.model.js`

### Transfers and notifications

- [Transaction controller](https://github.com/achintxv/backend-ledger/blob/main/src/controllers/transaction.controller.js): `src/controllers/transaction.controller.js`
- [Transaction model](https://github.com/achintxv/backend-ledger/blob/main/src/models/transaction.model.js): `src/models/transaction.model.js`
- [Email service](https://github.com/achintxv/backend-ledger/blob/main/src/services/email.service.js): `src/services/email.service.js`

### Other components

- **API client**
- [Database config](https://github.com/achintxv/backend-ledger/blob/main/src/config/db.js): `src/config/db.js`
- **MongoDB**
- **Gmail transport**

## Connections

- API client → HTTP server: sends requests
- HTTP server → Express app: starts app (evidence: `server.js`)
- HTTP server → Database config: loads config (evidence: `server.js`)
- Express app → Auth routes: mounts routes (evidence: `src/app.js`)
- Express app → Account routes: mounts routes (evidence: `src/app.js`)
- Express app → Transaction routes: mounts routes (evidence: `src/app.js`)
- Auth routes → Auth controller: dispatches to (evidence: `src/routes/auth.routes.js`)
- Account routes → Auth middleware: checks identity (evidence: `src/routes/account.routes.js`)
- Account routes → Account controller: dispatches to (evidence: `src/routes/account.routes.js`)
- Transaction routes → Auth middleware: checks identity (evidence: `src/routes/transaction.routes.js`)
- Transaction routes → Transaction controller: dispatches to (evidence: `src/routes/transaction.routes.js`)
- Auth controller → User model: reads and writes (evidence: `src/controllers/auth.controller.js`)
- Auth controller → Token blacklist: records logout (evidence: `src/controllers/auth.controller.js`)
- Auth controller → Email service: sends welcome (evidence: `src/controllers/auth.controller.js`)
- Auth middleware → User model: loads user (evidence: `src/middleware/auth.middleware.js`)
- Auth middleware → Token blacklist: checks token (evidence: `src/middleware/auth.middleware.js`)
- Account controller → Account model: manages accounts (evidence: `src/controllers/account.controller.js`)
- Account model → Ledger model: aggregates balance (evidence: `src/models/account.model.js`)
- Transaction controller → Account model: checks accounts (evidence: `src/controllers/transaction.controller.js`)
- Transaction controller → Transaction model: records transfer (evidence: `src/controllers/transaction.controller.js`)
- Transaction controller → Ledger model: writes entries (evidence: `src/controllers/transaction.controller.js`)
- Transaction controller → Email service: sends receipt (evidence: `src/controllers/transaction.controller.js`)
- Email service → Gmail transport: sends email (evidence: `src/services/email.service.js`)
- User model → MongoDB: persists users
- Token blacklist → MongoDB: persists tokens
- Account model → MongoDB: persists accounts
- Ledger model → MongoDB: persists entries
- Transaction model → MongoDB: persists transfers
