Skip to content

matheus-plaza/FitLogTds-API

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

23 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

FitLog - Backend

Sobre o Projeto

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.

Frontend

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.

Tecnologias Utilizadas

Core

  • Java 21 - Linguagem de programação
  • Spring Boot 3.5.5 - Framework principal
  • Maven - Gerenciamento de dependências e build

Spring Framework

  • 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

Segurança e Autenticação

  • JWT (java-jwt 4.4.0) - Tokens de autenticação stateless
  • BCryptPasswordEncoder - Criptografia de senhas
  • Google OAuth 2.0 - Autenticação social com Google

Banco de Dados

  • 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

Qualidade de Código

  • 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

DevOps

  • Docker - Containerização da aplicação
  • Docker Compose - Orquestração de containers

Funcionalidades

Autenticação

  • 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

Gerenciamento de Exercícios

  • CRUD completo de exercícios
  • Organização por grupos musculares
  • Busca e filtros
  • Validação de dados

Rotinas de Treino

  • 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

Sessões de Treino

  • 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

Dashboard e Estatísticas

  • Estatísticas dos últimos 30 dias
  • Total de treinos realizados
  • Volume total levantado
  • Distribuição de rotinas
  • Progresso individual por exercício
  • Recordes pessoais

Arquitetura

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

Design Patterns Aplicados

  • 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

API Endpoints

Autenticação

  • POST /api/auth/register - Registro de usuários
  • POST /api/auth/login - Login com email/senha
  • POST /api/auth/google - Login com Google OAuth

Exercícios

  • GET /api/exercises - Listar todos os exercícios
  • GET /api/exercises/{id} - Buscar exercício por ID
  • POST /api/exercises - Criar novo exercício
  • PUT /api/exercises/{id} - Atualizar exercício
  • DELETE /api/exercises/{id} - Deletar exercício

Rotinas

  • GET /api/routines - Listar rotinas do usuário
  • GET /api/routines/{id} - Buscar rotina por ID
  • POST /api/routines - Criar nova rotina
  • PUT /api/routines/{id} - Atualizar rotina
  • DELETE /api/routines/{id} - Deletar rotina

Sessões de Treino

  • GET /api/sessions - Listar sessões do usuário
  • GET /api/sessions/{id} - Buscar sessão por ID
  • POST /api/sessions - Criar nova sessão
  • PUT /api/sessions/{id} - Atualizar sessão
  • DELETE /api/sessions/{id} - Deletar sessão

Dashboard

  • GET /api/dashboard - Estatísticas e métricas do usuário

Banco de Dados

Modelo de Dados

  • 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

Migrations

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.

Segurança

  • 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

Configuração do Ambiente

Variáveis de Ambiente

O projeto utiliza variáveis de ambiente para armazenar informações sensíveis. Para configurar:

  1. Copie o arquivo de exemplo:

    cp .env.example .env
  2. Edite o arquivo .env com 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
  3. Importante: O arquivo .env está no .gitignore e não deve ser commitado no repositório.

Descrição das Variáveis

  • 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

Como Executar

Pré-requisitos

  • Java 21
  • Docker e Docker Compose
  • Maven

Com Docker Compose (Recomendado)

# Iniciar aplicação e banco de dados
docker-compose up -d

# A API estará disponível em http://localhost:8080

Manualmente

# 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.jar

Configuração

As 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

Autor

Matheus Plaza - github.com/matheus-plaza


FitLog - Seu companheiro de treino digital

About

Projeto pessoal de desenvolvimento de uma API RESTful para uma plataforma de acompanhamento de treinos, permitindo ao usuário gerenciar exercícios, criar rotinas personalizadas, registrar sessões de treino detalhadamente e visualizar seu progresso de desempenho.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages