API REST para gerenciamento de academias e estúdios de artes marciais, desenvolvida com Spring Boot e arquitetura em camadas.
O GymSys uma API REST que centraliza as operações administrativas de uma academia: cadastro de alunos, matrículas, planos, modalidades, graduações, controle financeiro e frequência.
- Java 17
- Spring Boot: framework principal da aplicação
- Spring Data JPA / Hibernate: persistência de dados
- Spring Data JPA Specifications: filtros dinâmicos de busca (ex.: alunos)
- Bean Validation: validação de DTOs
- PostgreSQL 16: banco de dados relacional
- Flyway: migrations para controle do schema
- Cadastro completo (dados pessoais, contato e endereço)
- Listagem paginada com filtros dinâmicos (nome, e-mail, celular, cidade, estado)
- Atualização e remoção
- CRUD de modalidades (ex.: Jiu-Jitsu, Muay Thai)
- CRUD de graduações vinculadas a uma modalidade (ex.: faixas)
- CRUD de planos, vinculados a uma modalidade, com valor mensal
- CRUD de matrículas de alunos, com dia de vencimento e status (
ATIVA,ENCERRADA,CANCELADA) - Associação de matrícula a múltiplas modalidades (
matriculas-modalidades), cada uma com sua própria graduação e plano - Histórico de evolução de graduação por matrícula/modalidade
- CRUD de faturas por matrícula, com status (
ABERTA,PAGA,CANCELADA,VENCIDA)
- Registro de entrada e saída de alunos (assiduidade)
- Faturamento mensal
- Distribuição de alunos por cidade
- Faturas em aberto
- Java 17+
- Docker e Docker Compose
- Git
Clone o repositório:
git clone https://github.com/Matheuslpr/GymSys.git
cd GymSysSuba o banco de dados com Docker:
docker compose up -dExecute a aplicação:
./mvnw spring-boot:runOu, no Windows:
mvnw.cmd spring-boot:runA API estará disponível em http://localhost:8080
Com a aplicação em execução, a documentação interativa (Swagger) fica disponível em:
http://localhost:8080/swagger-ui/index.html
POST /alunos— Cadastrar alunoGET /alunos— Listar alunos (paginado, com filtros)GET /alunos/{id}— Buscar aluno por IDPUT /alunos/{id}— Atualizar alunoDELETE /alunos/{id}— Remover aluno
POST /modalidades— Criar modalidadeGET /modalidades— Listar modalidadesGET /modalidades/{id}— Buscar modalidade por IDPUT /modalidades/{id}— Atualizar modalidadeDELETE /modalidades/{id}— Remover modalidade
POST /graduacoes— Criar graduaçãoGET /graduacoes— Listar graduaçõesGET /graduacoes/{id}— Buscar graduação por IDPUT /graduacoes/{id}— Atualizar graduaçãoDELETE /graduacoes/{id}— Remover graduação
POST /planos— Criar planoGET /planos— Listar planosGET /planos/{id}— Buscar plano por IDPUT /planos/{id}— Atualizar planoDELETE /planos/{id}— Remover plano
POST /matriculas— Criar matrículaGET /matriculas— Listar matrículasGET /matriculas/{id}— Buscar matrícula por IDPUT /matriculas/{id}— Atualizar matrículaDELETE /matriculas/{id}— Remover matrícula
POST /matriculas-modalidades— Associar modalidade/plano/graduação a uma matrículaGET /matriculas-modalidades— Listar associaçõesGET /matriculas-modalidades/{id}— Buscar associação por IDGET /matriculas-modalidades/{id}/historico-graduacoes— Histórico de evolução de graduaçãoPUT /matriculas-modalidades/{id}— Atualizar associaçãoDELETE /matriculas-modalidades/{id}— Remover associação
POST /faturas-matriculas— Criar faturaGET /faturas-matriculas— Listar faturasGET /faturas-matriculas/{id}— Buscar fatura por IDPUT /faturas-matriculas/{id}— Atualizar faturaDELETE /faturas-matriculas/{id}— Remover fatura
POST /assiduidades— Registrar entrada/saídaGET /assiduidades— Listar registrosGET /assiduidades/{id}— Buscar registro por IDPUT /assiduidades/{id}— Atualizar registroDELETE /assiduidades/{id}— Remover registro
GET /relatorios/faturamento-mensal— Faturamento agrupado por mêsGET /relatorios/alunos-por-cidade— Quantidade de alunos por cidadeGET /relatorios/faturamento-em-aberto— Faturas em aberto
O docker-compose.yml sobe apenas o banco de dados PostgreSQL:
services:
db:
image: postgres:16-alpine
container_name: gymsys
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: gym
ports:
- "5431:5434"docker compose up -d # subir o banco
docker compose down # parar
docker logs -f gymsys # ver logsEste projeto está sob a licença Apache 2.0 — veja https://www.apache.org/licenses/LICENSE-2.0 para detalhes.