Este documento descreve a arquitetura, organização e propósito de cada diretório do projeto.
Ele serve como referência para entendimento do design, manutenção e evolução do sistema.
hospital_system/
│
├── app/
│ ├── api/ # Rotas da aplicação (controllers)
│ ├── repositories/ # Camada de persistência (acesso ao BD)
│ ├── models/ # SQLAlchemy ORM (tabelas)
│ ├── schemas/ # Pydantic (validação e DTOs)
│ ├── db/ # Configuração de banco de dados
│ ├── core/ # Configurações gerais
│ ├── main.py # Ponto inicial da aplicação FastAPI
├── requirements.txt # Dependências da aplicação
├── README.md # Documentação principal
└── .gitignore
A aplicação segue o padrão Layered Architecture:
Rotas (API) → app/api/
Repositórios → app/repositories/
ORM / Models → app/models/
Banco de Dados → PostgreSQL
Contém apenas:
- definições de endpoints
- validação de entrada via Pydantic
- chamadas para a camada de serviços
Nenhuma regra de negócio é colocada aqui.
Implementa:
- validações complexas
- regras de negócio
- lógica entre diferentes entidades
- chamadas aos repositórios
Os services não conhecem SQLAlchemy diretamente — apenas o repository layer.
Responsável por:
- CRUD no banco
- queries SQL via SQLAlchemy ORM
- abstrair o acesso ao banco da camada de serviço
Isso isola totalmente o SQLAlchemy do restante do sistema.
Classes que representam tabelas do banco usando SQLAlchemy ORM.
Usados para:
- validação
- entrada/saída em rotas
- prevenção de exposição direta de modelos ORM
Contém:
- criação do engine
- SessionLocal
- inicialização do banco
O arquivo main.py cria a aplicação FastAPI e registra todos os roteadores:
from fastapi import FastAPI
from app.api.patients import router as patient_router
from app.api.doctors import router as doctor_router
from app.api.appointments import router as appointment_router
app = FastAPI(title="Hospital System API")
app.include_router(patient_router)
app.include_router(doctor_router)
app.include_router(appointment_router)A estrutura foi projetada para garantir:
- Alta separação de responsabilidades
- Código limpo e fácil de manter
- Baixo acoplamento entre camadas
- Escalabilidade
- Fácil entendimento para correção e expansão
- Aderência a boas práticas de mercado
| Diretório | Função |
|---|---|
api/ |
Endpoints REST |
repositories/ |
Operações no banco |
models/ |
ORM do SQLAlchemy |
schemas/ |
Pydantic DTOs |
db/ |
Configuração de banco |
core/ |
Configurações globais |