# mario-cartoon/bank-service architecture

> Architecture diagram of the GitHub repository mario-cartoon/bank-service, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-10-01). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/mario-cartoon/bank-service
- Repository: https://github.com/mario-cartoon/bank-service

## Overview

Bank API — a Go REST banking service. The main workflow runs from HTTP routes through authentication middleware and handlers into domain services, which apply account, card, credit, and analytics rules and use PostgreSQL repositories for persistence. Credit creation can consult the Central Bank rate; a background scheduler asks the credit service to process overdue payments. README capabilities such as forecasting and SMTP are retained, though SMTP use is not visible in sampled service code. Edges reflect excerpts or README statements; uncertain links are omitted.

Main entry points: [`cmd/api/main.go`](https://github.com/mario-cartoon/bank-service/blob/main/cmd/api/main.go) (API Bootstrap), [`internal/repository/postgres.go`](https://github.com/mario-cartoon/bank-service/blob/main/internal/repository/postgres.go) (Postgres Repositories), [`internal/service/service.go`](https://github.com/mario-cartoon/bank-service/blob/main/internal/service/service.go) (Service Factory), [`internal/router/router.go`](https://github.com/mario-cartoon/bank-service/blob/main/internal/router/router.go) (Route Dispatch)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_http["HTTP API"]
  node_entry["API Bootstrap<br/>[main.go]"]
  node_router["Route Dispatch<br/>[router.go]"]
  node_auth["JWT Middleware<br/>[auth.go]"]
  node_handlers["Request Handlers<br/>[handler.go]"]
end

subgraph group_domain["Banking Services"]
  node_models["Domain Models<br/>[models.go]"]
  node_services["Service Factory<br/>[service.go]"]
  node_users["User Auth<br/>[service.go]"]
  node_accounts["Accounts &amp; Transfers<br/>[service.go]"]
  node_cards["Virtual Cards<br/>[service.go]"]
  node_credits["Credit &amp; Forecast<br/>[service.go]"]
  node_analytics["Financial Analytics<br/>[service.go]"]
end

subgraph group_persistence["Persistence"]
  node_repository["Postgres Repositories<br/>[postgres.go]"]
  node_schema["Database Schema<br/>[001_init.sql]"]
end

subgraph group_support["Runtime Support"]
  node_config["Environment Config<br/>[config.go]"]
  node_security["Credential &amp; Card Security<br/>[security.go]"]
  node_cbr["CBR SOAP Client<br/>[cbr.go]"]
  node_mailer["SMTP Mailer<br/>[cbr.go]"]
  node_scheduler["Credit Scheduler<br/>[scheduler.go]"]
end

node_client(("API Client"))
node_postgres[("PostgreSQL")]
node_cbrservice["Central Bank Service"]
node_smtp["SMTP Server"]

node_client -->|"sends requests"| node_router
node_entry -->|"loads settings"| node_config
node_entry -->|"creates repositories"| node_repository
node_entry -->|"creates client"| node_cbr
node_entry -->|"creates client"| node_mailer
node_entry -->|"builds services"| node_services
node_entry -->|"builds handlers"| node_handlers
node_entry -->|"builds routes"| node_router
node_entry -->|"starts scheduler"| node_scheduler
node_entry -->|"opens connection"| node_postgres
node_router -->|"routes requests"| node_handlers
node_router -->|"protects routes"| node_auth
node_handlers -->|"invokes services"| node_services
node_auth -->|"passes authenticated requests"| node_handlers
node_services -->|"constructs"| node_users
node_services -->|"constructs"| node_accounts
node_services -->|"constructs"| node_cards
node_services -->|"constructs"| node_credits
node_services -->|"constructs"| node_analytics
node_users -->|"reads and creates users"| node_repository
node_users -->|"hashes passwords"| node_security
node_accounts -->|"updates accounts and transactions"| node_repository
node_cards -->|"stores and lists cards"| node_repository
node_cards -->|"generates and encrypts"| node_security
node_credits -->|"stores and reads credit data"| node_repository
node_credits -->|"requests key rate"| node_cbr
node_analytics -->|"reads transactions"| node_repository
node_scheduler -->|"processes overdue payments"| node_credits
node_repository -->|"queries and updates"| node_postgres
node_repository -->|"maps database records"| node_models
node_schema -->|"defines tables"| node_postgres
node_cbr -->|"sends SOAP request"| node_cbrservice
node_mailer -->|"sends email"| node_smtp
node_config -->|"configures endpoint"| node_cbr
node_config -->|"configures credentials"| node_mailer

click node_entry "https://github.com/mario-cartoon/bank-service/blob/main/cmd/api/main.go"
click node_router "https://github.com/mario-cartoon/bank-service/blob/main/internal/router/router.go"
click node_auth "https://github.com/mario-cartoon/bank-service/blob/main/internal/middleware/auth.go"
click node_handlers "https://github.com/mario-cartoon/bank-service/blob/main/internal/handler/handler.go"
click node_models "https://github.com/mario-cartoon/bank-service/blob/main/internal/models/models.go"
click node_services "https://github.com/mario-cartoon/bank-service/blob/main/internal/service/service.go"
click node_users "https://github.com/mario-cartoon/bank-service/blob/main/internal/service/service.go"
click node_accounts "https://github.com/mario-cartoon/bank-service/blob/main/internal/service/service.go"
click node_cards "https://github.com/mario-cartoon/bank-service/blob/main/internal/service/service.go"
click node_credits "https://github.com/mario-cartoon/bank-service/blob/main/internal/service/service.go"
click node_analytics "https://github.com/mario-cartoon/bank-service/blob/main/internal/service/service.go"
click node_repository "https://github.com/mario-cartoon/bank-service/blob/main/internal/repository/postgres.go"
click node_schema "https://github.com/mario-cartoon/bank-service/blob/main/migrations/001_init.sql"
click node_config "https://github.com/mario-cartoon/bank-service/blob/main/internal/config/config.go"
click node_security "https://github.com/mario-cartoon/bank-service/blob/main/internal/security/security.go"
click node_cbr "https://github.com/mario-cartoon/bank-service/blob/main/internal/integration/cbr.go"
click node_mailer "https://github.com/mario-cartoon/bank-service/blob/main/internal/integration/cbr.go"
click node_scheduler "https://github.com/mario-cartoon/bank-service/blob/main/internal/scheduler/scheduler.go"

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_entry,node_router,node_auth,node_handlers,node_client toneBlue
class node_models,node_services,node_users,node_accounts,node_cards,node_credits,node_analytics,node_postgres toneAmber
class node_repository,node_schema,node_smtp toneMint
class node_config,node_security,node_cbr,node_mailer,node_scheduler toneRose
class node_cbrservice toneIndigo
```

## Components

### HTTP API

- [API Bootstrap](https://github.com/mario-cartoon/bank-service/blob/main/cmd/api/main.go): `cmd/api/main.go`
- [Route Dispatch](https://github.com/mario-cartoon/bank-service/blob/main/internal/router/router.go): `internal/router/router.go`
- [JWT Middleware](https://github.com/mario-cartoon/bank-service/blob/main/internal/middleware/auth.go): `internal/middleware/auth.go`
- [Request Handlers](https://github.com/mario-cartoon/bank-service/blob/main/internal/handler/handler.go): `internal/handler/handler.go`

### Banking Services

- [Domain Models](https://github.com/mario-cartoon/bank-service/blob/main/internal/models/models.go): `internal/models/models.go`
- [Service Factory](https://github.com/mario-cartoon/bank-service/blob/main/internal/service/service.go): `internal/service/service.go`
- [User Auth](https://github.com/mario-cartoon/bank-service/blob/main/internal/service/service.go): `internal/service/service.go`
- [Accounts & Transfers](https://github.com/mario-cartoon/bank-service/blob/main/internal/service/service.go): `internal/service/service.go`
- [Virtual Cards](https://github.com/mario-cartoon/bank-service/blob/main/internal/service/service.go): `internal/service/service.go`
- [Credit & Forecast](https://github.com/mario-cartoon/bank-service/blob/main/internal/service/service.go): `internal/service/service.go`
- [Financial Analytics](https://github.com/mario-cartoon/bank-service/blob/main/internal/service/service.go): `internal/service/service.go`

### Persistence

- [Postgres Repositories](https://github.com/mario-cartoon/bank-service/blob/main/internal/repository/postgres.go): `internal/repository/postgres.go`
- [Database Schema](https://github.com/mario-cartoon/bank-service/blob/main/migrations/001_init.sql): `migrations/001_init.sql`

### Runtime Support

- [Environment Config](https://github.com/mario-cartoon/bank-service/blob/main/internal/config/config.go): `internal/config/config.go`
- [Credential & Card Security](https://github.com/mario-cartoon/bank-service/blob/main/internal/security/security.go): `internal/security/security.go`
- [CBR SOAP Client](https://github.com/mario-cartoon/bank-service/blob/main/internal/integration/cbr.go): `internal/integration/cbr.go`
- [SMTP Mailer](https://github.com/mario-cartoon/bank-service/blob/main/internal/integration/cbr.go): `internal/integration/cbr.go`
- [Credit Scheduler](https://github.com/mario-cartoon/bank-service/blob/main/internal/scheduler/scheduler.go): `internal/scheduler/scheduler.go`

### Other components

- **API Client**
- **PostgreSQL**
- **Central Bank Service**
- **SMTP Server**

## Connections

- API Client → Route Dispatch: sends requests (evidence: `README.md`)
- API Bootstrap → Environment Config: loads settings (evidence: `cmd/api/main.go`)
- API Bootstrap → Postgres Repositories: creates repositories (evidence: `cmd/api/main.go`)
- API Bootstrap → CBR SOAP Client: creates client (evidence: `cmd/api/main.go`)
- API Bootstrap → SMTP Mailer: creates client (evidence: `cmd/api/main.go`)
- API Bootstrap → Service Factory: builds services (evidence: `cmd/api/main.go`)
- API Bootstrap → Request Handlers: builds handlers (evidence: `cmd/api/main.go`)
- API Bootstrap → Route Dispatch: builds routes (evidence: `cmd/api/main.go`)
- API Bootstrap → Credit Scheduler: starts scheduler (evidence: `cmd/api/main.go`)
- API Bootstrap → PostgreSQL: opens connection (evidence: `cmd/api/main.go`)
- Route Dispatch → Request Handlers: routes requests (evidence: `internal/router/router.go`)
- Route Dispatch → JWT Middleware: protects routes (evidence: `internal/router/router.go`)
- Request Handlers → Service Factory: invokes services (evidence: `internal/handler/handler.go`)
- JWT Middleware → Request Handlers: passes authenticated requests (evidence: `internal/middleware/auth.go`)
- Service Factory → User Auth: constructs (evidence: `internal/service/service.go`)
- Service Factory → Accounts & Transfers: constructs (evidence: `internal/service/service.go`)
- Service Factory → Virtual Cards: constructs (evidence: `internal/service/service.go`)
- Service Factory → Credit & Forecast: constructs (evidence: `internal/service/service.go`)
- Service Factory → Financial Analytics: constructs (evidence: `internal/service/service.go`)
- User Auth → Postgres Repositories: reads and creates users (evidence: `internal/service/service.go`)
- User Auth → Credential & Card Security: hashes passwords (evidence: `internal/service/service.go`)
- Accounts & Transfers → Postgres Repositories: updates accounts and transactions (evidence: `internal/service/service.go`)
- Virtual Cards → Postgres Repositories: stores and lists cards (evidence: `internal/service/service.go`)
- Virtual Cards → Credential & Card Security: generates and encrypts (evidence: `internal/service/service.go`)
- Credit & Forecast → Postgres Repositories: stores and reads credit data (evidence: `internal/service/service.go`)
- Credit & Forecast → CBR SOAP Client: requests key rate (evidence: `internal/service/service.go`)
- Financial Analytics → Postgres Repositories: reads transactions (evidence: `internal/service/service.go`)
- Credit Scheduler → Credit & Forecast: processes overdue payments (evidence: `internal/scheduler/scheduler.go`)
- Postgres Repositories → PostgreSQL: queries and updates (evidence: `internal/repository/postgres.go`)
- Postgres Repositories → Domain Models: maps database records (evidence: `internal/repository/postgres.go`)
- Database Schema → PostgreSQL: defines tables (evidence: `README.md`)
- CBR SOAP Client → Central Bank Service: sends SOAP request (evidence: `internal/integration/cbr.go`)
- SMTP Mailer → SMTP Server: sends email (evidence: `internal/integration/cbr.go`)
- Environment Config → CBR SOAP Client: configures endpoint
- Environment Config → SMTP Mailer: configures credentials
