# caiquesantosss/wrench-api-nest architecture

> Architecture diagram of the GitHub repository caiquesantosss/wrench-api-nest, 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/caiquesantosss/wrench-api-nest
- Repository: https://github.com/caiquesantosss/wrench-api-nest

## Overview

This is a NestJS backend for workshop operations, despite the README being an unmodified Nest starter description. The main workflow authenticates users, manages clients and their assets, opens and advances service orders, and records charges and payments; catalog stock and audit logging are supporting capabilities. Controllers dispatch to application use cases, which use domain entities and Prisma repositories. Edges reflect sampled calls and SOURCE INDEX references; unsampled subsystem links are omitted where their ownership could not be verified.

Main entry points: [`src/prisma/prisma.service.ts`](https://github.com/caiquesantosss/wrench-api-nest/blob/main/src/prisma/prisma.service.ts) (Prisma service), [`src/ordem-servico/application/use-cases/open-service-order-use-case.ts`](https://github.com/caiquesantosss/wrench-api-nest/blob/main/src/ordem-servico/application/use-cases/open-service-order-use-case.ts) (Open service order), [`src/ordem-servico/presentation/ordem-servico.controller.ts`](https://github.com/caiquesantosss/wrench-api-nest/blob/main/src/ordem-servico/presentation/ordem-servico.controller.ts) (Service order API), [`src/cliente/infrastructure/database/PrismaClientRepository.ts`](https://github.com/caiquesantosss/wrench-api-nest/blob/main/src/cliente/infrastructure/database/PrismaClientRepository.ts) (Client repository)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["API and identity"]
  node_user_api["User endpoints"]
  node_auth_use["Authentication"]
  node_jwt["JWT guard<br/>[jwt-auth-guard.ts]"]
  node_user_repo["User repository"]
end

subgraph group_workshop["Workshop operations"]
  node_client_api["Client endpoints"]
  node_client_cases["Client management"]
  node_client_repo["Client repository"]
  node_asset_api["Asset endpoints"]
  node_asset_cases["Asset management"]
  node_asset_repo["Asset repository"]
  node_order_api["Service order API"]
  node_open_order["Open service order"]
  node_order_cases["Order lifecycle"]
  node_order_repo["Order repository"]
  node_catalog_api["Catalog endpoints"]
  node_catalog_cases["Stock operations"]
  node_catalog_repo["Catalog repository"]
end

subgraph group_money["Finance and audit"]
  node_finance_api["Finance endpoints"]
  node_finance_cases["Charges and payments"]
  node_finance_repo["Finance repository"]
  node_audit_api["Audit endpoints"]
  node_audit_repo["Audit repository"]
  node_audit_listener["Audit listener"]
end

subgraph group_storage["Persistence and shared"]
  node_prisma[("Prisma service<br/>[prisma.service.ts]")]
end

node_caller(("API client"))

node_caller -->|"requests"| node_user_api
node_user_api -->|"authenticates"| node_auth_use
node_auth_use -->|"loads user"| node_user_repo
node_caller -->|"manages clients"| node_client_api
node_client_api -->|"dispatches"| node_client_cases
node_client_cases -->|"persists client"| node_client_repo
node_caller -->|"manages assets"| node_asset_api
node_asset_api -->|"dispatches"| node_asset_cases
node_asset_cases -->|"uses repository"| node_asset_repo
node_caller -->|"requests service"| node_order_api
node_order_api -->|"opens order"| node_open_order
node_order_api -->|"dispatches"| node_order_cases
node_open_order -->|"checks client"| node_client_repo
node_open_order -->|"checks ownership"| node_asset_repo
node_open_order -->|"saves order"| node_order_repo
node_caller -->|"manages stock"| node_catalog_api
node_catalog_api -->|"dispatches"| node_catalog_cases
node_catalog_cases -->|"uses repository"| node_catalog_repo
node_caller -->|"records payments"| node_finance_api
node_finance_api -->|"dispatches"| node_finance_cases
node_finance_cases -->|"uses repository"| node_finance_repo
node_caller -->|"reviews audit"| node_audit_api
node_audit_api -->|"queries logs"| node_audit_repo
node_user_repo -->|"queries"| node_prisma
node_client_repo -->|"queries"| node_prisma
node_asset_repo -->|"queries"| node_prisma
node_order_repo -->|"queries"| node_prisma
node_catalog_repo -->|"queries"| node_prisma
node_finance_repo -->|"queries"| node_prisma
node_audit_repo -->|"queries"| node_prisma
node_prisma -.->|"emits audit event"| node_audit_listener
node_caller -->|"supplies token"| node_jwt

click node_user_api "https://github.com/caiquesantosss/wrench-api-nest/blob/main/src/usuario/presentation/usuario.controller.ts"
click node_auth_use "https://github.com/caiquesantosss/wrench-api-nest/blob/main/src/usuario/application/use-cases/authenticate-user-use-case.ts"
click node_jwt "https://github.com/caiquesantosss/wrench-api-nest/blob/main/src/shared/guards/jwt-auth-guard.ts"
click node_user_repo "https://github.com/caiquesantosss/wrench-api-nest/blob/main/src/usuario/infrastructure/database/PrismaUserRepository.ts"
click node_client_api "https://github.com/caiquesantosss/wrench-api-nest/blob/main/src/cliente/presentation/cliente.controller.ts"
click node_client_cases "https://github.com/caiquesantosss/wrench-api-nest/blob/main/src/cliente/application/use-cases/create-client-use-case.ts"
click node_client_repo "https://github.com/caiquesantosss/wrench-api-nest/blob/main/src/cliente/infrastructure/database/PrismaClientRepository.ts"
click node_asset_api "https://github.com/caiquesantosss/wrench-api-nest/blob/main/src/ativo/presentation/ativo.controller.ts"
click node_asset_cases "https://github.com/caiquesantosss/wrench-api-nest/blob/main/src/ativo/application/use-cases/create-ativo-use-case.ts"
click node_asset_repo "https://github.com/caiquesantosss/wrench-api-nest/blob/main/src/ativo/infrastructure/database/PrismaAtivoRepository.ts"
click node_order_api "https://github.com/caiquesantosss/wrench-api-nest/blob/main/src/ordem-servico/presentation/ordem-servico.controller.ts"
click node_open_order "https://github.com/caiquesantosss/wrench-api-nest/blob/main/src/ordem-servico/application/use-cases/open-service-order-use-case.ts"
click node_order_cases "https://github.com/caiquesantosss/wrench-api-nest/blob/main/src/ordem-servico/application/use-cases/start-execution-use-case.ts"
click node_order_repo "https://github.com/caiquesantosss/wrench-api-nest/blob/main/src/ordem-servico/infrastructure/database/PrismaOrdemServicoRepository.ts"
click node_catalog_api "https://github.com/caiquesantosss/wrench-api-nest/blob/main/src/catalogo-item/presentation/catalogo-item.controller.ts"
click node_catalog_cases "https://github.com/caiquesantosss/wrench-api-nest/blob/main/src/catalogo-item/application/use-cases/add-stock-use-case.ts"
click node_catalog_repo "https://github.com/caiquesantosss/wrench-api-nest/blob/main/src/catalogo-item/infrastructure/database/PrismaCatalogItemRepository.ts"
click node_finance_api "https://github.com/caiquesantosss/wrench-api-nest/blob/main/src/financeiro/presentation/financeiro.controller.ts"
click node_finance_cases "https://github.com/caiquesantosss/wrench-api-nest/blob/main/src/financeiro/application/use-cases/generate-os-charge-use-case.ts"
click node_finance_repo "https://github.com/caiquesantosss/wrench-api-nest/blob/main/src/financeiro/infrastructure/database/PrismaFinanceiroRepository.ts"
click node_audit_api "https://github.com/caiquesantosss/wrench-api-nest/blob/main/src/auditoria/presentation/auditoria.controller.ts"
click node_audit_repo "https://github.com/caiquesantosss/wrench-api-nest/blob/main/src/auditoria/infrastructure/database/PrismaAuditoriaRepository.ts"
click node_prisma "https://github.com/caiquesantosss/wrench-api-nest/blob/main/src/prisma/prisma.service.ts"
click node_audit_listener "https://github.com/caiquesantosss/wrench-api-nest/blob/main/src/auditoria/application/listeners/auditoria.listener.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_user_api,node_auth_use,node_jwt,node_user_repo,node_caller toneBlue
class node_client_api,node_client_cases,node_client_repo,node_asset_api,node_asset_cases,node_asset_repo,node_order_api,node_open_order,node_order_cases,node_order_repo,node_catalog_api,node_catalog_cases,node_catalog_repo toneAmber
class node_finance_api,node_finance_cases,node_finance_repo,node_audit_api,node_audit_repo,node_audit_listener toneMint
class node_prisma toneRose
```

## Components

### API and identity

- [User endpoints](https://github.com/caiquesantosss/wrench-api-nest/blob/main/src/usuario/presentation/usuario.controller.ts): `src/usuario/presentation/usuario.controller.ts`
- [Authentication](https://github.com/caiquesantosss/wrench-api-nest/blob/main/src/usuario/application/use-cases/authenticate-user-use-case.ts): `src/usuario/application/use-cases/authenticate-user-use-case.ts`
- [JWT guard](https://github.com/caiquesantosss/wrench-api-nest/blob/main/src/shared/guards/jwt-auth-guard.ts): `src/shared/guards/jwt-auth-guard.ts`
- [User repository](https://github.com/caiquesantosss/wrench-api-nest/blob/main/src/usuario/infrastructure/database/PrismaUserRepository.ts): `src/usuario/infrastructure/database/PrismaUserRepository.ts`

### Workshop operations

- [Client endpoints](https://github.com/caiquesantosss/wrench-api-nest/blob/main/src/cliente/presentation/cliente.controller.ts): `src/cliente/presentation/cliente.controller.ts`
- [Client management](https://github.com/caiquesantosss/wrench-api-nest/blob/main/src/cliente/application/use-cases/create-client-use-case.ts): `src/cliente/application/use-cases/create-client-use-case.ts`
- [Client repository](https://github.com/caiquesantosss/wrench-api-nest/blob/main/src/cliente/infrastructure/database/PrismaClientRepository.ts): `src/cliente/infrastructure/database/PrismaClientRepository.ts`
- [Asset endpoints](https://github.com/caiquesantosss/wrench-api-nest/blob/main/src/ativo/presentation/ativo.controller.ts): `src/ativo/presentation/ativo.controller.ts`
- [Asset management](https://github.com/caiquesantosss/wrench-api-nest/blob/main/src/ativo/application/use-cases/create-ativo-use-case.ts): `src/ativo/application/use-cases/create-ativo-use-case.ts`
- [Asset repository](https://github.com/caiquesantosss/wrench-api-nest/blob/main/src/ativo/infrastructure/database/PrismaAtivoRepository.ts): `src/ativo/infrastructure/database/PrismaAtivoRepository.ts`
- [Service order API](https://github.com/caiquesantosss/wrench-api-nest/blob/main/src/ordem-servico/presentation/ordem-servico.controller.ts): `src/ordem-servico/presentation/ordem-servico.controller.ts`
- [Open service order](https://github.com/caiquesantosss/wrench-api-nest/blob/main/src/ordem-servico/application/use-cases/open-service-order-use-case.ts): `src/ordem-servico/application/use-cases/open-service-order-use-case.ts`
- [Order lifecycle](https://github.com/caiquesantosss/wrench-api-nest/blob/main/src/ordem-servico/application/use-cases/start-execution-use-case.ts): `src/ordem-servico/application/use-cases/start-execution-use-case.ts`
- [Order repository](https://github.com/caiquesantosss/wrench-api-nest/blob/main/src/ordem-servico/infrastructure/database/PrismaOrdemServicoRepository.ts): `src/ordem-servico/infrastructure/database/PrismaOrdemServicoRepository.ts`
- [Catalog endpoints](https://github.com/caiquesantosss/wrench-api-nest/blob/main/src/catalogo-item/presentation/catalogo-item.controller.ts): `src/catalogo-item/presentation/catalogo-item.controller.ts`
- [Stock operations](https://github.com/caiquesantosss/wrench-api-nest/blob/main/src/catalogo-item/application/use-cases/add-stock-use-case.ts): `src/catalogo-item/application/use-cases/add-stock-use-case.ts`
- [Catalog repository](https://github.com/caiquesantosss/wrench-api-nest/blob/main/src/catalogo-item/infrastructure/database/PrismaCatalogItemRepository.ts): `src/catalogo-item/infrastructure/database/PrismaCatalogItemRepository.ts`

### Finance and audit

- [Finance endpoints](https://github.com/caiquesantosss/wrench-api-nest/blob/main/src/financeiro/presentation/financeiro.controller.ts): `src/financeiro/presentation/financeiro.controller.ts`
- [Charges and payments](https://github.com/caiquesantosss/wrench-api-nest/blob/main/src/financeiro/application/use-cases/generate-os-charge-use-case.ts): `src/financeiro/application/use-cases/generate-os-charge-use-case.ts`
- [Finance repository](https://github.com/caiquesantosss/wrench-api-nest/blob/main/src/financeiro/infrastructure/database/PrismaFinanceiroRepository.ts): `src/financeiro/infrastructure/database/PrismaFinanceiroRepository.ts`
- [Audit endpoints](https://github.com/caiquesantosss/wrench-api-nest/blob/main/src/auditoria/presentation/auditoria.controller.ts): `src/auditoria/presentation/auditoria.controller.ts`
- [Audit repository](https://github.com/caiquesantosss/wrench-api-nest/blob/main/src/auditoria/infrastructure/database/PrismaAuditoriaRepository.ts): `src/auditoria/infrastructure/database/PrismaAuditoriaRepository.ts`
- [Audit listener](https://github.com/caiquesantosss/wrench-api-nest/blob/main/src/auditoria/application/listeners/auditoria.listener.ts): `src/auditoria/application/listeners/auditoria.listener.ts`

### Persistence and shared

- [Prisma service](https://github.com/caiquesantosss/wrench-api-nest/blob/main/src/prisma/prisma.service.ts): `src/prisma/prisma.service.ts`

### Other components

- **API client**

## Connections

- API client → User endpoints: requests (evidence: `src/usuario/presentation/usuario.controller.ts`)
- User endpoints → Authentication: authenticates (evidence: `src/usuario/presentation/usuario.controller.ts`)
- Authentication → User repository: loads user (evidence: `src/usuario/infrastructure/database/PrismaUserRepository.ts`)
- API client → Client endpoints: manages clients (evidence: `src/cliente/presentation/cliente.controller.ts`)
- Client endpoints → Client management: dispatches (evidence: `src/cliente/presentation/cliente.controller.ts`)
- Client management → Client repository: persists client (evidence: `src/cliente/cliente.module.ts`)
- API client → Asset endpoints: manages assets (evidence: `src/ativo/presentation/ativo.controller.ts`)
- Asset endpoints → Asset management: dispatches (evidence: `src/ativo/presentation/ativo.controller.ts`)
- Asset management → Asset repository: uses repository (evidence: `src/ativo/infrastructure/database/PrismaAtivoRepository.ts`)
- API client → Service order API: requests service (evidence: `src/ordem-servico/presentation/ordem-servico.controller.ts`)
- Service order API → Open service order: opens order (evidence: `src/ordem-servico/presentation/ordem-servico.controller.ts`)
- Service order API → Order lifecycle: dispatches (evidence: `src/ordem-servico/presentation/ordem-servico.controller.ts`)
- Open service order → Client repository: checks client (evidence: `src/ordem-servico/application/use-cases/open-service-order-use-case.ts`)
- Open service order → Asset repository: checks ownership (evidence: `src/ordem-servico/application/use-cases/open-service-order-use-case.ts`)
- Open service order → Order repository: saves order (evidence: `src/ordem-servico/application/use-cases/open-service-order-use-case.ts`)
- API client → Catalog endpoints: manages stock (evidence: `src/catalogo-item/presentation/catalogo-item.controller.ts`)
- Catalog endpoints → Stock operations: dispatches (evidence: `src/catalogo-item/presentation/catalogo-item.controller.ts`)
- Stock operations → Catalog repository: uses repository (evidence: `src/catalogo-item/infrastructure/database/PrismaCatalogItemRepository.ts`)
- API client → Finance endpoints: records payments (evidence: `src/financeiro/presentation/financeiro.controller.ts`)
- Finance endpoints → Charges and payments: dispatches (evidence: `src/financeiro/presentation/financeiro.controller.ts`)
- Charges and payments → Finance repository: uses repository (evidence: `src/financeiro/infrastructure/database/PrismaFinanceiroRepository.ts`)
- API client → Audit endpoints: reviews audit (evidence: `src/auditoria/presentation/auditoria.controller.ts`)
- Audit endpoints → Audit repository: queries logs (evidence: `src/auditoria/infrastructure/database/PrismaAuditoriaRepository.ts`)
- User repository → Prisma service: queries (evidence: `src/usuario/infrastructure/database/PrismaUserRepository.ts`)
- Client repository → Prisma service: queries
- Asset repository → Prisma service: queries (evidence: `src/ativo/infrastructure/database/PrismaAtivoRepository.ts`)
- Order repository → Prisma service: queries (evidence: `src/ordem-servico/infrastructure/database/PrismaOrdemServicoRepository.ts`)
- Catalog repository → Prisma service: queries (evidence: `src/catalogo-item/infrastructure/database/PrismaCatalogItemRepository.ts`)
- Finance repository → Prisma service: queries (evidence: `src/financeiro/infrastructure/database/PrismaFinanceiroRepository.ts`)
- Audit repository → Prisma service: queries (evidence: `src/auditoria/infrastructure/database/PrismaAuditoriaRepository.ts`)
- Prisma service → Audit listener: emits audit event
- API client → JWT guard: supplies token (evidence: `src/shared/guards/jwt-auth-guard.ts`)
