# eduardoklosowski/exercicio-curso-fastapi-do-zero-madr architecture

> Architecture diagram of the GitHub repository eduardoklosowski/exercicio-curso-fastapi-do-zero-madr, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-25). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/eduardoklosowski/exercicio-curso-fastapi-do-zero-madr
- Repository: https://github.com/eduardoklosowski/exercicio-curso-fastapi-do-zero-madr

## Overview

MADR é uma API FastAPI para um acervo digital de romances: clientes criam contas e obtêm tokens, depois gerenciam romancistas e livros, com persistência em PostgreSQL. A API monta as rotas; esquemas validam e serializam dados, e a camada de segurança autentica usuários e protege operações. O README também documenta execução em Kubernetes, mas os recursos de implantação não fazem parte do fluxo de runtime. As ligações refletem os trechos disponíveis; não foi possível confirmar detalhes internos de módulos não amostrados.

Main entry points: [`src/madr/database.py`](https://github.com/eduardoklosowski/exercicio-curso-fastapi-do-zero-madr/blob/main/src/madr/database.py) (Sessões e engine), [`src/madr/api.py`](https://github.com/eduardoklosowski/exercicio-curso-fastapi-do-zero-madr/blob/main/src/madr/api.py) (Aplicação API), [`src/madr/schemas.py`](https://github.com/eduardoklosowski/exercicio-curso-fastapi-do-zero-madr/blob/main/src/madr/schemas.py) (Validação e respostas), [`src/madr/security.py`](https://github.com/eduardoklosowski/exercicio-curso-fastapi-do-zero-madr/blob/main/src/madr/security.py) (Segurança e tokens)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["API e entrada"]
  node_api["Aplicação API<br/>[api.py]"]
end

subgraph group_identity["Contas e segurança"]
  node_auth["Rotas de autenticação<br/>[auth.py]"]
  node_account["Rotas de conta<br/>[conta.py]"]
  node_security["Segurança e tokens<br/>[security.py]"]
end

subgraph group_catalog["Acervo"]
  node_author["Rotas de romancistas<br/>[romancista.py]"]
  node_book["Rotas de livros<br/>[livro.py]"]
end

subgraph group_runtime["Persistência e suporte"]
  node_schemas["Validação e respostas<br/>[schemas.py]"]
  node_models["Modelos ORM<br/>[models.py]"]
  node_database["Sessões e engine<br/>[database.py]"]
  node_settings["Configuração<br/>[settings.py]"]
  node_errors["Erros HTTP<br/>[errors.py]"]
  node_utils["Sanitização<br/>[utils.py]"]
end

node_client(("Cliente API"))
node_postgres[("PostgreSQL")]

node_client -->|"envia requisições"| node_api
node_api -->|"despacha rotas"| node_auth
node_api -->|"despacha rotas"| node_account
node_api -->|"despacha rotas"| node_author
node_api -->|"despacha rotas"| node_book
node_api -->|"injeta sessão"| node_database
node_api -->|"formata erros"| node_errors
node_auth -->|"usa sessão"| node_database
node_auth -->|"verifica e emite token"| node_security
node_account -->|"usa sessão"| node_database
node_account -->|"exige usuário atual"| node_security
node_author -->|"usa sessão"| node_database
node_author -->|"exige usuário atual"| node_security
node_book -->|"usa sessão"| node_database
node_book -->|"exige usuário atual"| node_security
node_auth -->|"valida e retorna"| node_schemas
node_account -->|"valida e retorna"| node_schemas
node_author -->|"valida e retorna"| node_schemas
node_book -->|"valida e retorna"| node_schemas
node_schemas -->|"gera hash"| node_security
node_schemas -->|"sanitiza texto"| node_utils
node_security -->|"consulta usuário"| node_database
node_database -->|"lê URL do banco"| node_settings
node_database -->|"executa consultas"| node_postgres
node_auth -->|"consulta usuário"| node_models
node_account -->|"persiste usuário"| node_models
node_author -->|"persiste romancista"| node_models
node_book -->|"persiste livro e romancista"| node_models

click node_api "https://github.com/eduardoklosowski/exercicio-curso-fastapi-do-zero-madr/blob/main/src/madr/api.py"
click node_auth "https://github.com/eduardoklosowski/exercicio-curso-fastapi-do-zero-madr/blob/main/src/madr/routers/auth.py"
click node_account "https://github.com/eduardoklosowski/exercicio-curso-fastapi-do-zero-madr/blob/main/src/madr/routers/conta.py"
click node_security "https://github.com/eduardoklosowski/exercicio-curso-fastapi-do-zero-madr/blob/main/src/madr/security.py"
click node_author "https://github.com/eduardoklosowski/exercicio-curso-fastapi-do-zero-madr/blob/main/src/madr/routers/romancista.py"
click node_book "https://github.com/eduardoklosowski/exercicio-curso-fastapi-do-zero-madr/blob/main/src/madr/routers/livro.py"
click node_schemas "https://github.com/eduardoklosowski/exercicio-curso-fastapi-do-zero-madr/blob/main/src/madr/schemas.py"
click node_models "https://github.com/eduardoklosowski/exercicio-curso-fastapi-do-zero-madr/blob/main/src/madr/models.py"
click node_database "https://github.com/eduardoklosowski/exercicio-curso-fastapi-do-zero-madr/blob/main/src/madr/database.py"
click node_settings "https://github.com/eduardoklosowski/exercicio-curso-fastapi-do-zero-madr/blob/main/src/madr/settings.py"
click node_errors "https://github.com/eduardoklosowski/exercicio-curso-fastapi-do-zero-madr/blob/main/src/madr/errors.py"
click node_utils "https://github.com/eduardoklosowski/exercicio-curso-fastapi-do-zero-madr/blob/main/src/madr/utils.py"

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_api,node_client toneBlue
class node_auth,node_account,node_security,node_postgres toneAmber
class node_author,node_book toneMint
class node_schemas,node_models,node_database,node_settings,node_errors,node_utils toneRose
```

## Components

### API e entrada

- [Aplicação API](https://github.com/eduardoklosowski/exercicio-curso-fastapi-do-zero-madr/blob/main/src/madr/api.py): `src/madr/api.py`

### Contas e segurança

- [Rotas de autenticação](https://github.com/eduardoklosowski/exercicio-curso-fastapi-do-zero-madr/blob/main/src/madr/routers/auth.py): `src/madr/routers/auth.py`
- [Rotas de conta](https://github.com/eduardoklosowski/exercicio-curso-fastapi-do-zero-madr/blob/main/src/madr/routers/conta.py): `src/madr/routers/conta.py`
- [Segurança e tokens](https://github.com/eduardoklosowski/exercicio-curso-fastapi-do-zero-madr/blob/main/src/madr/security.py): `src/madr/security.py`

### Acervo

- [Rotas de romancistas](https://github.com/eduardoklosowski/exercicio-curso-fastapi-do-zero-madr/blob/main/src/madr/routers/romancista.py): `src/madr/routers/romancista.py`
- [Rotas de livros](https://github.com/eduardoklosowski/exercicio-curso-fastapi-do-zero-madr/blob/main/src/madr/routers/livro.py): `src/madr/routers/livro.py`

### Persistência e suporte

- [Validação e respostas](https://github.com/eduardoklosowski/exercicio-curso-fastapi-do-zero-madr/blob/main/src/madr/schemas.py): `src/madr/schemas.py`
- [Modelos ORM](https://github.com/eduardoklosowski/exercicio-curso-fastapi-do-zero-madr/blob/main/src/madr/models.py): `src/madr/models.py`
- [Sessões e engine](https://github.com/eduardoklosowski/exercicio-curso-fastapi-do-zero-madr/blob/main/src/madr/database.py): `src/madr/database.py`
- [Configuração](https://github.com/eduardoklosowski/exercicio-curso-fastapi-do-zero-madr/blob/main/src/madr/settings.py): `src/madr/settings.py`
- [Erros HTTP](https://github.com/eduardoklosowski/exercicio-curso-fastapi-do-zero-madr/blob/main/src/madr/errors.py): `src/madr/errors.py`
- [Sanitização](https://github.com/eduardoklosowski/exercicio-curso-fastapi-do-zero-madr/blob/main/src/madr/utils.py): `src/madr/utils.py`

### Other components

- **Cliente API**
- **PostgreSQL**

## Connections

- Cliente API → Aplicação API: envia requisições
- Aplicação API → Rotas de autenticação: despacha rotas
- Aplicação API → Rotas de conta: despacha rotas
- Aplicação API → Rotas de romancistas: despacha rotas
- Aplicação API → Rotas de livros: despacha rotas
- Aplicação API → Sessões e engine: injeta sessão
- Aplicação API → Erros HTTP: formata erros
- Rotas de autenticação → Sessões e engine: usa sessão
- Rotas de autenticação → Segurança e tokens: verifica e emite token
- Rotas de conta → Sessões e engine: usa sessão
- Rotas de conta → Segurança e tokens: exige usuário atual
- Rotas de romancistas → Sessões e engine: usa sessão
- Rotas de romancistas → Segurança e tokens: exige usuário atual
- Rotas de livros → Sessões e engine: usa sessão
- Rotas de livros → Segurança e tokens: exige usuário atual
- Rotas de autenticação → Validação e respostas: valida e retorna
- Rotas de conta → Validação e respostas: valida e retorna
- Rotas de romancistas → Validação e respostas: valida e retorna
- Rotas de livros → Validação e respostas: valida e retorna
- Validação e respostas → Segurança e tokens: gera hash
- Validação e respostas → Sanitização: sanitiza texto
- Segurança e tokens → Sessões e engine: consulta usuário
- Sessões e engine → Configuração: lê URL do banco
- Sessões e engine → PostgreSQL: executa consultas
- Rotas de autenticação → Modelos ORM: consulta usuário
- Rotas de conta → Modelos ORM: persiste usuário
- Rotas de romancistas → Modelos ORM: persiste romancista
- Rotas de livros → Modelos ORM: persiste livro e romancista
