Ir para o conteúdo

Arquitetura

Visão Geral

O sistema FitLife segue uma arquitetura em camadas baseada no padrão MVC (Model-View-Controller) do Django, adaptado para APIs REST. A arquitetura é projetada para ser escalável, manutenível e seguir as melhores práticas de desenvolvimento.

Padrões Arquiteturais

1. Arquitetura em Camadas

┌─────────────────────────────────────┐ │ Camada de Apresentação │ │ (API REST Endpoints) │ ├─────────────────────────────────────┤ │ Camada de Negócio │ │ (Views, Serializers) │ ├─────────────────────────────────────┤ │ Camada de Dados │ │ (Models, ORM) │ ├─────────────────────────────────────┤ │ Camada de Persistência │ │ (PostgreSQL Database) │ └─────────────────────────────────────┘

2. Padrão Repository

Cada app Django representa um domínio específico: - authentication: Gestão de autenticação e autorização - usuarios: Gerenciamento de perfis de usuário - exercicios: Catálogo de exercícios físicos - treinos: Criação e gestão de treinos - playlists: Organização de treinos em programas

Componentes Principais

Models (Camada de Dados)

  • Usuario: Modelo customizado estendendo AbstractUser
  • Exercicio: Catálogo de exercícios com metadados
  • Treino: Sequências de exercícios organizadas
  • Playlist: Coleções de treinos para programas
  • TreinoExercicio: Relacionamento N:M com parâmetros
  • PlaylistTreino: Relacionamento N:M com ordenação

Serializers (Transformação de Dados)

  • Validação de entrada de dados
  • Transformação entre modelos Django e JSON
  • Serializers específicos para diferentes contextos
  • Validações customizadas de negócio

Views/ViewSets (Lógica de Negócio)

  • ViewSets para operações CRUD completas
  • Actions customizadas para funcionalidades específicas
  • Filtros e paginação automática
  • Controle de permissões por endpoint

URLs (Roteamento)

  • Routers automáticos do DRF
  • Versionamento de API (v1)
  • Organização hierárquica por domínio

Segurança

Autenticação JWT

  • Tokens com expiração configurável
  • Refresh tokens para renovação
  • Logout com invalidação de tokens

Autorização

  • Permissões baseadas em ownership
  • Controle de acesso por recurso
  • Validação de dados de entrada

Validações

  • Validação automática via serializers
  • Validações customizadas de negócio
  • Sanitização de dados de entrada

Performance

Otimizações de Banco

  • Índices em campos de busca frequente
  • Select_related para relacionamentos
  • Prefetch_related para relacionamentos N:M

Cache

  • Cache de consultas frequentes
  • Cache de resultados de cálculos
  • Headers de cache HTTP adequados

Paginação

  • Paginação automática em listagens
  • Tamanho de página configurável
  • Metadados de paginação incluídos

Escalabilidade

Modularidade

  • Apps Django independentes
  • Baixo acoplamento entre módulos
  • Interfaces bem definidas

Extensibilidade

  • Hooks para funcionalidades futuras
  • Configurações externalizadas
  • Plugins via apps Django

Deploy

  • Configurações por ambiente
  • Variáveis de ambiente
  • Preparado para containerização