Skip to main content

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

  1. Clone o repositório
  2. Navegue até a pasta do backend:
    cd src/backend
  3. Instale as dependências:
    poetry install
  4. Configure as variáveis de ambiente:
    cp .env.example .env
  5. 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:

  1. Domain Layer: Contém as entidades e regras de negócio
  2. Application Layer: Contém os casos de uso e serviços
  3. Infrastructure Layer: Implementações concretas (banco de dados, APIs externas)
  4. 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étodoRotaDescriçãoRequest BodyResponse
POST/api/v1/auth/loginLogin de usuáriojson { "email": "string", "password": "string" } json { "access_token": "string", "refresh_token": "string", "token_type": "bearer" }
POST/api/v1/auth/refreshRenovação de tokenjson { "refresh_token": "string" } json { "access_token": "string", "token_type": "bearer" }
POST/api/v1/auth/logoutLogout de usuáriojson { "refresh_token": "string" } json { "message": "Successfully logged out" }
GET/api/v1/users/meObter dados do usuário atual-json { "id": "string", "email": "string", "name": "string", "created_at": "datetime" }
PUT/api/v1/users/meAtualizar dados do usuáriojson { "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ário
  • POST /api/v1/auth/refresh: Renovação de token
  • POST /api/v1/auth/logout: Logout de usuário

Usuários

  • GET /api/v1/users/me: Obter dados do usuário atual
  • PUT /api/v1/users/me: Atualizar dados do usuário
  • GET /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:

  1. Linting e formatação de código
  2. Execução de testes
  3. Análise de cobertura
  4. Build e push de imagens Docker
  5. Deploy automático

Contribuição

  1. Crie uma branch para sua feature
  2. Faça commit das alterações
  3. Crie um Pull Request
  4. Aguarde a revisão e aprovação