Backend
Visão Geral
O backend do projeto é desenvolvido em Python utilizando o framework FastAPI, seguindo os princípios de Clean Architecture e Domain-Driven Design (DDD). A aplicação é containerizada usando Docker e utiliza PostgreSQL como banco de dados.
Estrutura do Projeto
backend/
├── app/
│ ├── api/ # Rotas e endpoints da API
│ ├── core/ # Configurações core da aplicação
│ ├── db/ # Configurações do banco de dados
│ ├── domain/ # Entidades e regras de negócio
│ ├── interfaces/ # Interfaces para inversão de dependência
│ ├── models/ # Modelos do banco de dados
│ ├── schemas/ # Schemas Pydantic para validação
│ ├── services/ # Serviços da aplicação
│ └── utils/ # Utilitários
├── tests/ # Testes automatizados
├── Dockerfile # Configuração do container
├── docker-compose.yml # Configuração dos serviços
├── nginx.conf # Configuração do Nginx
└── pyproject.toml # Dependências e configurações do projeto
Tecnologias Utilizadas
- FastAPI: Framework web para construção da API
- PostgreSQL: Banco de dados relacional
- SQLAlchemy: ORM para interação com o banco de dados
- Pydantic: Validação de dados e serialização
- Docker: Containerização da aplicação
- Nginx: Proxy reverso e servidor web
- Poetry: Gerenciamento de dependências
- Pytest: Framework de testes
Configuração do Ambiente
Pré-requisitos
- Docker e Docker Compose
- Python 3.9+
- Poetry
Instalação
- Clone o repositório
- Navegue até a pasta do backend:
cd src/backend
- Instale as dependências:
poetry install
- Configure as variáveis de ambiente:
cp .env.example .env
- Inicie os containers:
docker-compose up -d
Arquitetura
Clean Architecture
O projeto segue os princípios da Clean Architecture, dividindo a aplicação em camadas:
- Domain Layer: Contém as entidades e regras de negócio
- Application Layer: Contém os casos de uso e serviços
- Infrastructure Layer: Implementações concretas (banco de dados, APIs externas)
- Interface Layer: Controllers e apresentação
Padrões de Projeto
- Repository Pattern: Para abstração do acesso a dados
- Dependency Injection: Para inversão de dependências
- Factory Pattern: Para criação de objetos complexos
- Strategy Pattern: Para algoritmos intercambiáveis
Testes
Estrutura de Testes
tests/
├── unit/ # Testes unitários
├── integration/ # Testes de integração
└── e2e/ # Testes end-to-end
Executando os Testes
# Executar todos os testes
pytest
# Executar testes com cobertura
pytest --cov=app
# Executar testes específicos
pytest tests/unit/
API Endpoints
Tabela de Rotas
Método | Rota | Descrição | Request Body | Response |
---|---|---|---|---|
POST | /api/v1/auth/login | Login de usuário | json { "email": "string", "password": "string" } | json { "access_token": "string", "refresh_token": "string", "token_type": "bearer" } |
POST | /api/v1/auth/refresh | Renovação de token | json { "refresh_token": "string" } | json { "access_token": "string", "token_type": "bearer" } |
POST | /api/v1/auth/logout | Logout de usuário | json { "refresh_token": "string" } | json { "message": "Successfully logged out" } |
GET | /api/v1/users/me | Obter dados do usuário atual | - | json { "id": "string", "email": "string", "name": "string", "created_at": "datetime" } |
PUT | /api/v1/users/me | Atualizar dados do usuário | json { "name": "string", "email": "string" } | json { "id": "string", "email": "string", "name": "string", "updated_at": "datetime" } |
GET | /api/v1/users/{id} | Obter dados de um usuário específico | - | json { "id": "string", "email": "string", "name": "string", "created_at": "datetime" } |
Detalhes das Rotas
Autenticação
POST /api/v1/auth/login
: Login de usuárioPOST /api/v1/auth/refresh
: Renovação de tokenPOST /api/v1/auth/logout
: Logout de usuário
Usuários
GET /api/v1/users/me
: Obter dados do usuário atualPUT /api/v1/users/me
: Atualizar dados do usuárioGET /api/v1/users/{id}
: Obter dados de um usuário específico
Segurança
- Autenticação via JWT
- Validação de dados com Pydantic
- Sanitização de inputs
- Rate limiting
- CORS configurado
- Headers de segurança
Monitoramento e Logs
- Logs estruturados
- Métricas de performance
- Rastreamento de erros
- Monitoramento de saúde da aplicação
CI/CD
O pipeline de CI/CD inclui:
- Linting e formatação de código
- Execução de testes
- Análise de cobertura
- Build e push de imagens Docker
- Deploy automático
Contribuição
- Crie uma branch para sua feature
- Faça commit das alterações
- Crie um Pull Request
- Aguarde a revisão e aprovação