O FitLog é uma aplicação web moderna para gerenciamento de treinos e acompanhamento de progresso físico. Este repositório contém o backend da aplicação, uma API RESTful completa desenvolvida com Java 21 e Spring Boot 3.
O FitLog Backend fornece todos os endpoints necessários para que usuários registrem seus exercícios, criem rotinas de treino personalizadas, acompanhem o histórico de sessões e monitorem seu progresso através de estatísticas detalhadas. A API inclui sistema robusto de autenticação JWT, integração com Google OAuth, versionamento de banco de dados com Flyway e containerização com Docker.
Este é apenas o backend da aplicação. Para o funcionamento completo, é necessário ter o frontend rodando.
Repositório do Frontend: https://github.com/matheus-plaza/FitLogTds-Front
O frontend consome todos os endpoints desta API para fornecer uma interface moderna e intuitiva para os usuários.
- Java 21 - Linguagem de programação
- Spring Boot 3.5.5 - Framework principal
- Maven - Gerenciamento de dependências e build
- Spring Data JPA - Persistência de dados e mapeamento objeto-relacional
- Spring Web - Desenvolvimento de APIs RESTful
- Spring Security - Autenticação e autorização de usuários
- Spring DevTools - Ferramentas de desenvolvimento e hot reload
- JWT (java-jwt 4.4.0) - Tokens de autenticação stateless
- BCryptPasswordEncoder - Criptografia de senhas
- Google OAuth 2.0 - Autenticação social com Google
- MySQL 8.0 - Sistema de gerenciamento de banco de dados
- Hibernate/JPA - ORM (Object-Relational Mapping)
- Flyway - Versionamento e migração de banco de dados
- HikariCP - Pool de conexões de alta performance
- Lombok - Redução de código boilerplate
- MapStruct 1.5.5 - Mapeamento automático entre DTOs e Entidades
- Bean Validation - Validação declarativa de dados
- Docker - Containerização da aplicação
- Docker Compose - Orquestração de containers
- Registro de novos usuários com validação
- Login com email e senha
- Autenticação via Google OAuth 2.0
- Geração e validação de tokens JWT
- Sistema de roles (USER, ADMIN)
- Criptografia de senhas com BCrypt
- CRUD completo de exercícios
- Organização por grupos musculares
- Busca e filtros
- Validação de dados
- Criação de rotinas personalizadas
- Associação de exercícios às rotinas
- Configuração de séries e repetições por exercício
- Visualização e edição de rotinas
- Exclusão de rotinas
- Registro de treinos realizados
- Vinculação com rotinas
- Controle detalhado de séries executadas
- Registro de peso, repetições e RIR (Reps in Reserve)
- Histórico completo de sessões
- Cálculo automático de volume total
- Estatísticas dos últimos 30 dias
- Total de treinos realizados
- Volume total levantado
- Distribuição de rotinas
- Progresso individual por exercício
- Recordes pessoais
O projeto segue uma arquitetura em camadas com separação clara de responsabilidades:
src/main/java/io/github/matheusplaza/fitlogtds/
├── config/ # Configurações (Security, CORS, etc)
├── controller/ # Controllers REST
├── service/ # Lógica de negócio
├── repository/ # Acesso a dados (JPA)
├── model/ # Entidades JPA
├── mapper/ # Mapeamento DTO ↔ Entity (MapStruct)
└── exceptions/ # Tratamento de exceções
src/main/resources/
├── application.yml # Configurações da aplicação
└── db/migration/ # Scripts Flyway
- Arquitetura em Camadas (Layered Architecture)
- Repository Pattern - Abstração do acesso a dados
- DTO Pattern - Transferência de dados com Java Records
- Dependency Injection (IoC) - Inversão de controle
- RESTful API Design - Padrões REST
- Stateless Architecture - API sem estado
POST /api/auth/register- Registro de usuáriosPOST /api/auth/login- Login com email/senhaPOST /api/auth/google- Login com Google OAuth
GET /api/exercises- Listar todos os exercíciosGET /api/exercises/{id}- Buscar exercício por IDPOST /api/exercises- Criar novo exercícioPUT /api/exercises/{id}- Atualizar exercícioDELETE /api/exercises/{id}- Deletar exercício
GET /api/routines- Listar rotinas do usuárioGET /api/routines/{id}- Buscar rotina por IDPOST /api/routines- Criar nova rotinaPUT /api/routines/{id}- Atualizar rotinaDELETE /api/routines/{id}- Deletar rotina
GET /api/sessions- Listar sessões do usuárioGET /api/sessions/{id}- Buscar sessão por IDPOST /api/sessions- Criar nova sessãoPUT /api/sessions/{id}- Atualizar sessãoDELETE /api/sessions/{id}- Deletar sessão
GET /api/dashboard- Estatísticas e métricas do usuário
- User - Usuários da aplicação
- Exercise - Catálogo de exercícios
- WorkoutRoutine - Rotinas de treino
- RoutineExercise - Exercícios de uma rotina
- WorkoutSession - Sessões de treino realizadas
- LoggedExercise - Exercícios executados em uma sessão
- LoggedSet - Séries registradas de um exercício
O projeto utiliza Flyway para versionamento do banco de dados. As migrations estão em src/main/resources/db/migration/ e são executadas automaticamente na inicialização.
- Autenticação JWT - Tokens stateless com expiração
- BCrypt - Hash seguro de senhas
- CORS - Configurado adequadamente
- Role-Based Access Control - Controle por papéis (USER, ADMIN)
- Validação de dados - Bean Validation em todos os endpoints
- Tratamento de exceções - Respostas padronizadas de erro
O projeto utiliza variáveis de ambiente para armazenar informações sensíveis. Para configurar:
-
Copie o arquivo de exemplo:
cp .env.example .env
-
Edite o arquivo
.envcom suas configurações:# Database Configuration DB_URL=jdbc:mysql://localhost:3306/fitlogdb?useTimezone=true&serverTimezone=UTC DB_USERNAME=seu_usuario_mysql DB_PASSWORD=sua_senha_mysql # Security Configuration JWT_SECRET=sua_chave_secreta_jwt_aqui GOOGLE_CLIENT_ID=seu_google_client_id_aqui
-
Importante: O arquivo
.envestá no.gitignoree não deve ser commitado no repositório.
- DB_URL: URL de conexão com o banco de dados MySQL
- DB_USERNAME: Usuário do banco de dados
- DB_PASSWORD: Senha do banco de dados
- JWT_SECRET: Chave secreta para assinar os tokens JWT
- GOOGLE_CLIENT_ID: Client ID da aplicação Google OAuth 2.0
- Java 21
- Docker e Docker Compose
- Maven
# Iniciar aplicação e banco de dados
docker-compose up -d
# A API estará disponível em http://localhost:8080# 1. Configure o banco de dados MySQL
# 2. Ajuste as credenciais em application.yml
# 3. Execute a aplicação
./mvnw spring-boot:run
# Ou compile e execute o JAR
./mvnw clean package
java -jar target/FitLog-TDS-0.0.1-SNAPSHOT.jarAs configurações principais estão em src/main/resources/application.yml:
- Porta da aplicação: 8080
- Banco de dados: MySQL 8.0
- JWT Secret: Configurar via variável de ambiente
- Google OAuth: Configurar Client ID via variável de ambiente
- CORS: Configurado para permitir requisições do frontend
Matheus Plaza - github.com/matheus-plaza
FitLog - Seu companheiro de treino digital