Skip to main content

Backend do FitLocus

O backend do FitLocus é uma API RESTful desenvolvida em Java com Spring Boot, responsável por toda a lógica de negócio, autenticação e persistência de dados da plataforma.

Tecnologias Utilizadas

  • Linguagem: Java 21
  • Framework: Spring Boot 3.x
  • Banco de Dados: PostgreSQL
  • ORM: Spring Data JPA / Hibernate
  • Autenticação: JWT + Firebase Auth
  • Documentação: Swagger / OpenAPI
  • Build: Gradle
  • Containerização: Docker
  • CI/CD: GitHub Actions

Estrutura do Projeto

src/main/
├── java/com/fitlocus/backend/
│   ├── config/                 # Configurações (Security, CORS, Firebase)
│   ├── controllers/            # Endpoints da API REST
│   ├── dtos/                   # Data Transfer Objects
│   ├── enums/                  # Enumerações (UserType, SubscriptionType, etc.)
│   ├── exceptions/             # Exceções personalizadas
│   ├── mappers/                # Conversores entre entidades e DTOs
│   ├── models/                 # Entidades JPA
│   ├── repositories/           # Repositórios Spring Data JPA
│   ├── services/               # Lógica de negócio
│   ├── utils/                  # Classes utilitárias
│   └── validators/             # Lógica de validação
├── resources/
│   ├── application.properties  # Configurações da aplicação
│   ├── application-*.properties # Configurações específicas por ambiente
│   ├── db/
│   │   ├── changelog.xml      # Arquivo mestre de migração Liquibase
│   │   └── scripts/           # Scripts SQL para migrações
│   └── key/                    # Chaves de serviço Firebase

Principais Controladores

O backend expõe diversos endpoints através de controladores REST:
ControladorDescrição
AuthControllerAutenticação e registro de usuários
UserControllerGerenciamento de perfis de usuário
ExerciseControllerGerenciamento de exercícios
TrainingControllerGerenciamento de treinos
TrainingPlanControllerGerenciamento de planos de treino
PersonalStudentControllerRelacionamento entre personal e aluno
FileControllerUpload e gerenciamento de arquivos
PersonalRecordControllerGerenciamento de recordes pessoais
UserMetricsControllerMétricas de usuário (hidratação, passos, sono)

Modelos de Dados

Os principais modelos de dados incluem:
  • Users: Usuários do sistema (ALUNO ou PERSONAL)
  • Exercise: Exercícios físicos com descrição e imagem
  • Training: Treinos compostos por exercícios
  • TrainingPlan: Planos de treino semanais
  • PersonalStudent: Relacionamento entre personal e aluno
  • ExerciseExecution: Registro de execução de exercícios
  • TrainingExecution: Registro de execução de treinos
  • PersonalRecord: Recordes pessoais em exercícios

Autenticação e Segurança

O sistema utiliza uma combinação de JWT (JSON Web Tokens) e Firebase Authentication:
  1. Login tradicional: Email/senha validados contra o banco de dados
  2. Login social: Integração com Firebase Auth para login via Google
  3. Autorização: Tokens JWT com claims para controle de acesso
  4. Segurança: Filtros de segurança para validação de tokens em cada requisição

Armazenamento de Arquivos

O sistema suporta dois modos de armazenamento de arquivos:
  1. Desenvolvimento: Armazenamento local no sistema de arquivos
  2. Produção: Google Cloud Storage para armazenamento em nuvem

Validação de Assinaturas

O backend implementa validadores para controlar o acesso a recursos com base no tipo de assinatura:
  • SubscriptionValidator: Valida se o usuário pode acessar recursos premium
  • AccessValidator: Controla o acesso baseado no tipo de usuário e assinatura

Integração com Pagamentos

O sistema integra-se com o AbacatePay para processamento de pagamentos:
  1. Webhooks: Endpoints para receber notificações de pagamentos
  2. PIX: Suporte a pagamentos via PIX
  3. Assinaturas: Gerenciamento de ciclos de assinatura

Ambiente de Desenvolvimento

Para configurar o ambiente de desenvolvimento:
# Clone o repositório
git clone https://github.com/logoscti/fitlocus-backend.git

# Entre no diretório
cd fitlocus-backend

# Execute com Gradle
./gradlew bootRun

# Ou com Docker Compose
docker-compose up

Endpoints da API

Para uma documentação detalhada dos endpoints da API, consulte a Referência da API.