# geovanesv/carteira-financeira architecture

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

- Interactive diagram: https://gitdiagram.com/geovanesv/carteira-financeira
- Repository: https://github.com/geovanesv/carteira-financeira

## Overview

Carteira Financeira is a NestJS REST API for user accounts, JWT authentication, wallets, balances, and financial transactions. The main workflow starts with user registration, then login, and authenticated wallet operations or transaction creation, history, and reversal. Controllers delegate to use cases; repositories and TypeORM entities provide persistence. The README documents wallet updates and transaction capabilities, while transaction implementation details are only partly evidenced by the excerpts and index, so uncertain internal calls are omitted.

Main entry points: [`src/app.module.ts`](https://github.com/geovanesv/carteira-financeira/blob/develop/src/app.module.ts) (NestJS app), [`src/modules/wallets/adapters/controllers/wallets.controller.ts`](https://github.com/geovanesv/carteira-financeira/blob/develop/src/modules/wallets/adapters/controllers/wallets.controller.ts) (Wallet endpoints), [`src/modules/transactions/adapters/controllers/transactions.controller.ts`](https://github.com/geovanesv/carteira-financeira/blob/develop/src/modules/transactions/adapters/controllers/transactions.controller.ts) (Transaction endpoints), [`src/modules/wallets/application/use-cases`](https://github.com/geovanesv/carteira-financeira/tree/develop/src/modules/wallets/application/use-cases) (Wallet operations)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["API entry"]
  node_app["NestJS app<br/>[app.module.ts]"]
end

subgraph group_identity["Identity"]
  node_users_api["User registration"]
  node_create_user["Create user"]
  node_auth_api["Login endpoint<br/>[auth.controller.ts]"]
  node_login["Login<br/>[login.use-case.ts]"]
  node_validate_user["Validate user"]
  node_jwt["JWT strategy<br/>[jwt.strategy.ts]"]
end

subgraph group_wallets["Wallets"]
  node_wallet_api["Wallet endpoints"]
  node_wallet_cases["Wallet operations"]
  node_wallet_domain["Wallet rules"]
end

subgraph group_transactions["Transactions"]
  node_transactions_api["Transaction endpoints"]
  node_transaction_cases["Transaction use cases"]
  node_transaction_domain["Transaction rules"]
end

subgraph group_persistence["Persistence"]
  node_user_store[("User repository<br/>[user.repository.ts]")]
  node_user_entity["User record<br/>[user.entity.ts]"]
  node_wallet_store[("Wallet repository")]
  node_wallet_entity["Wallet record<br/>[wallet.entity.ts]"]
  node_transaction_store[("Transaction repository")]
  node_transaction_entity["Transaction record"]
  node_database[("TypeORM database<br/>[data-source.ts]")]
end

node_client(("API client"))

node_client -->|"registers"| node_users_api
node_users_api -->|"executes"| node_create_user
node_create_user -->|"uses"| node_user_store
node_client -->|"logs in"| node_auth_api
node_auth_api -->|"executes"| node_login
node_login -->|"validates"| node_validate_user
node_validate_user -->|"finds user"| node_user_entity
node_client -->|"requests"| node_wallet_api
node_wallet_api -->|"executes"| node_wallet_cases
node_wallet_api -->|"guards access"| node_jwt
node_wallet_cases -.->|"applies rules"| node_wallet_domain
node_wallet_cases -.->|"uses"| node_wallet_store
node_wallet_store -->|"persists"| node_wallet_entity
node_client -->|"requests"| node_transactions_api
node_transactions_api -->|"executes"| node_transaction_cases
node_transactions_api -->|"guards access"| node_jwt
node_transaction_cases -.->|"uses"| node_transaction_store
node_transaction_cases -->|"uses"| node_wallet_store
node_transaction_store -->|"persists"| node_transaction_entity
node_app -->|"configures"| node_database
node_app -->|"registers module"| node_users_api
node_app -->|"registers module"| node_wallet_api
node_app -->|"registers module"| node_transactions_api

click node_app "https://github.com/geovanesv/carteira-financeira/blob/develop/src/app.module.ts"
click node_users_api "https://github.com/geovanesv/carteira-financeira/blob/develop/src/modules/users/adapters/controllers/users.controller.ts"
click node_create_user "https://github.com/geovanesv/carteira-financeira/blob/develop/src/modules/users/application/use-cases/create-user.use-case.ts"
click node_user_store "https://github.com/geovanesv/carteira-financeira/blob/develop/src/modules/users/infrastructure/data/repositories/user.repository.ts"
click node_user_entity "https://github.com/geovanesv/carteira-financeira/blob/develop/src/modules/users/entities/user.entity.ts"
click node_auth_api "https://github.com/geovanesv/carteira-financeira/blob/develop/src/modules/auth/adapters/controllers/auth.controller.ts"
click node_login "https://github.com/geovanesv/carteira-financeira/blob/develop/src/modules/auth/application/use-cases/login.use-case.ts"
click node_validate_user "https://github.com/geovanesv/carteira-financeira/blob/develop/src/modules/auth/application/use-cases/validate-user.use-case.ts"
click node_jwt "https://github.com/geovanesv/carteira-financeira/blob/develop/src/modules/auth/infrastructure/strategies/jwt.strategy.ts"
click node_wallet_api "https://github.com/geovanesv/carteira-financeira/blob/develop/src/modules/wallets/adapters/controllers/wallets.controller.ts"
click node_wallet_cases "https://github.com/geovanesv/carteira-financeira/tree/develop/src/modules/wallets/application/use-cases"
click node_wallet_domain "https://github.com/geovanesv/carteira-financeira/blob/develop/src/modules/wallets/domain/services/wallet.domain.service.ts"
click node_wallet_store "https://github.com/geovanesv/carteira-financeira/blob/develop/src/modules/wallets/infrastructure/data/repositories/wallet.repository.ts"
click node_wallet_entity "https://github.com/geovanesv/carteira-financeira/blob/develop/src/modules/wallets/entities/wallet.entity.ts"
click node_transactions_api "https://github.com/geovanesv/carteira-financeira/blob/develop/src/modules/transactions/adapters/controllers/transactions.controller.ts"
click node_transaction_cases "https://github.com/geovanesv/carteira-financeira/tree/develop/src/modules/transactions/application/use-cases"
click node_transaction_domain "https://github.com/geovanesv/carteira-financeira/blob/develop/src/modules/transactions/domain/services/transaction.domain.service.ts"
click node_transaction_store "https://github.com/geovanesv/carteira-financeira/blob/develop/src/modules/transactions/infrastructure/data/repositories/transaction.repository.ts"
click node_transaction_entity "https://github.com/geovanesv/carteira-financeira/blob/develop/src/modules/transactions/entities/transaction.entity.ts"
click node_database "https://github.com/geovanesv/carteira-financeira/blob/develop/src/db/data-source.ts"

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_app,node_client toneBlue
class node_users_api,node_create_user,node_auth_api,node_login,node_validate_user,node_jwt toneAmber
class node_wallet_api,node_wallet_cases,node_wallet_domain toneMint
class node_transactions_api,node_transaction_cases,node_transaction_domain toneRose
class node_user_store,node_user_entity,node_wallet_store,node_wallet_entity,node_transaction_store,node_transaction_entity,node_database toneIndigo
```

## Components

### API entry

- [NestJS app](https://github.com/geovanesv/carteira-financeira/blob/develop/src/app.module.ts): `src/app.module.ts`

### Identity

- [User registration](https://github.com/geovanesv/carteira-financeira/blob/develop/src/modules/users/adapters/controllers/users.controller.ts): `src/modules/users/adapters/controllers/users.controller.ts`
- [Create user](https://github.com/geovanesv/carteira-financeira/blob/develop/src/modules/users/application/use-cases/create-user.use-case.ts): `src/modules/users/application/use-cases/create-user.use-case.ts`
- [Login endpoint](https://github.com/geovanesv/carteira-financeira/blob/develop/src/modules/auth/adapters/controllers/auth.controller.ts): `src/modules/auth/adapters/controllers/auth.controller.ts`
- [Login](https://github.com/geovanesv/carteira-financeira/blob/develop/src/modules/auth/application/use-cases/login.use-case.ts): `src/modules/auth/application/use-cases/login.use-case.ts`
- [Validate user](https://github.com/geovanesv/carteira-financeira/blob/develop/src/modules/auth/application/use-cases/validate-user.use-case.ts): `src/modules/auth/application/use-cases/validate-user.use-case.ts`
- [JWT strategy](https://github.com/geovanesv/carteira-financeira/blob/develop/src/modules/auth/infrastructure/strategies/jwt.strategy.ts): `src/modules/auth/infrastructure/strategies/jwt.strategy.ts`

### Wallets

- [Wallet endpoints](https://github.com/geovanesv/carteira-financeira/blob/develop/src/modules/wallets/adapters/controllers/wallets.controller.ts): `src/modules/wallets/adapters/controllers/wallets.controller.ts`
- [Wallet operations](https://github.com/geovanesv/carteira-financeira/tree/develop/src/modules/wallets/application/use-cases): `src/modules/wallets/application/use-cases`
- [Wallet rules](https://github.com/geovanesv/carteira-financeira/blob/develop/src/modules/wallets/domain/services/wallet.domain.service.ts): `src/modules/wallets/domain/services/wallet.domain.service.ts`

### Transactions

- [Transaction endpoints](https://github.com/geovanesv/carteira-financeira/blob/develop/src/modules/transactions/adapters/controllers/transactions.controller.ts): `src/modules/transactions/adapters/controllers/transactions.controller.ts`
- [Transaction use cases](https://github.com/geovanesv/carteira-financeira/tree/develop/src/modules/transactions/application/use-cases): `src/modules/transactions/application/use-cases`
- [Transaction rules](https://github.com/geovanesv/carteira-financeira/blob/develop/src/modules/transactions/domain/services/transaction.domain.service.ts): `src/modules/transactions/domain/services/transaction.domain.service.ts`

### Persistence

- [User repository](https://github.com/geovanesv/carteira-financeira/blob/develop/src/modules/users/infrastructure/data/repositories/user.repository.ts): `src/modules/users/infrastructure/data/repositories/user.repository.ts`
- [User record](https://github.com/geovanesv/carteira-financeira/blob/develop/src/modules/users/entities/user.entity.ts): `src/modules/users/entities/user.entity.ts`
- [Wallet repository](https://github.com/geovanesv/carteira-financeira/blob/develop/src/modules/wallets/infrastructure/data/repositories/wallet.repository.ts): `src/modules/wallets/infrastructure/data/repositories/wallet.repository.ts`
- [Wallet record](https://github.com/geovanesv/carteira-financeira/blob/develop/src/modules/wallets/entities/wallet.entity.ts): `src/modules/wallets/entities/wallet.entity.ts`
- [Transaction repository](https://github.com/geovanesv/carteira-financeira/blob/develop/src/modules/transactions/infrastructure/data/repositories/transaction.repository.ts): `src/modules/transactions/infrastructure/data/repositories/transaction.repository.ts`
- [Transaction record](https://github.com/geovanesv/carteira-financeira/blob/develop/src/modules/transactions/entities/transaction.entity.ts): `src/modules/transactions/entities/transaction.entity.ts`
- [TypeORM database](https://github.com/geovanesv/carteira-financeira/blob/develop/src/db/data-source.ts): `src/db/data-source.ts`

### Other components

- **API client**

## Connections

- API client → User registration: registers (evidence: `src/modules/users/adapters/controllers/users.controller.ts`)
- User registration → Create user: executes (evidence: `src/modules/users/adapters/controllers/users.controller.ts`)
- Create user → User repository: uses (evidence: `src/modules/users/application/use-cases/create-user.use-case.ts`)
- API client → Login endpoint: logs in (evidence: `src/modules/auth/adapters/controllers/auth.controller.ts`)
- Login endpoint → Login: executes (evidence: `src/modules/auth/adapters/controllers/auth.controller.ts`)
- Login → Validate user: validates (evidence: `src/modules/auth/application/use-cases/login.use-case.ts`)
- Validate user → User record: finds user (evidence: `src/modules/auth/application/use-cases/validate-user.use-case.ts`)
- API client → Wallet endpoints: requests (evidence: `src/modules/wallets/adapters/controllers/wallets.controller.ts`)
- Wallet endpoints → Wallet operations: executes (evidence: `src/modules/wallets/adapters/controllers/wallets.controller.ts`)
- Wallet endpoints → JWT strategy: guards access (evidence: `src/modules/wallets/adapters/controllers/wallets.controller.ts`)
- Wallet operations → Wallet rules: applies rules
- Wallet operations → Wallet repository: uses (evidence: `src/modules/wallets/application/use-cases/update-wallet.use-case.ts`)
- Wallet repository → Wallet record: persists (evidence: `src/modules/wallets/infrastructure/data/repositories/wallet.repository.ts`)
- API client → Transaction endpoints: requests (evidence: `src/modules/transactions/adapters/controllers/transactions.controller.ts`)
- Transaction endpoints → Transaction use cases: executes (evidence: `src/modules/transactions/adapters/controllers/transactions.controller.ts`)
- Transaction endpoints → JWT strategy: guards access (evidence: `src/modules/transactions/adapters/controllers/transactions.controller.ts`)
- Transaction use cases → Transaction repository: uses (evidence: `src/modules/transactions/application/use-cases/create-transaction.use-case.ts`)
- Transaction use cases → Wallet repository: uses (evidence: `src/modules/transactions/application/use-cases/create-transaction.use-case.ts`)
- Transaction repository → Transaction record: persists (evidence: `src/modules/transactions/infrastructure/data/repositories/transaction.repository.ts`)
- NestJS app → TypeORM database: configures (evidence: `src/app.module.ts`)
- NestJS app → User registration: registers module (evidence: `src/app.module.ts`)
- NestJS app → Wallet endpoints: registers module (evidence: `src/app.module.ts`)
- NestJS app → Transaction endpoints: registers module (evidence: `src/app.module.ts`)
