Skip to content

Overview

globaltrust-bank is a complete fictional bank generated entirely through apogee CLI commands. No application code was written by hand — every entity, repository, use case, controller and migration came from a generator.

Bounded contexts

graph LR
  customers((customers))
  accounts((accounts))
  transactions((transactions))
  fx((fx))
  compliance((compliance))

  customers --> accounts
  accounts --> transactions
  transactions --> fx
  transactions --> compliance
  customers --> compliance
Context Aggregate root Storage
customers CustomerEntity (full_name, email, KYC status, country, language) PostgreSQL
accounts AccountEntity (IBAN, balance, currency, status) PostgreSQL
transactions TransactionEntity (amount, currency, kind, status) PostgreSQL + audit in MongoDB
fx FxRateEntity (base/quote currency, rate, observed_at) PostgreSQL
compliance ComplianceFlagEntity (subject, reason, severity, state) PostgreSQL + RAG in Qdrant

Why these specific data stores

  • PostgreSQL — strong typing, FK constraints, money/decimal arithmetic.
  • MongoDB — schema-flexible audit log; KYC document attachments.
  • Qdrant — vector similarity for RAG over compliance regulations and customer T&Cs in 4 languages.
  • pgvector (also added) — alternative vector store, useful for staying within Postgres in some deployments.

How modules wire in

The project's requirements.txt includes:

  • apogee-core — base classes, ApiResponse, Alembic runner
  • apogee-auth — RBAC + MFA + audit
  • apogee-ai-providers — LLM unification
  • apogee-ai-rag — vector store + retrieval
  • apogee-ai — agents (compliance officer, FX advisor)

Dishka (DI) wires implementations to ports; the generated container.py already registers everything.