API REST para gestão escolar com Alunos, Professores e Cursos.
Java 17 + Spring Boot 3.4.5
Spring Security (Basic Auth)
Spring Data JPA + Hibernate
PostgreSQL 16 (Docker) / H2 (local)
Swagger/OpenAPI 3 via springdoc
docker compose up --build
./mvnw spring-boot:run -Dspring-boot.run.profiles=h2
Basic Auth: admin / 123456
No Swagger, clique em "Authorize" e informe as credenciais.
Método
Rota
Descrição
GET
/api/alunos
Listar todos
GET
/api/alunos/{id}
Buscar por ID
POST
/api/alunos
Cadastrar aluno
PUT
/api/alunos/{id}
Atualizar aluno
PATCH
/api/alunos/{id}/nota
Aplicar nota (situação calculada automaticamente)
DELETE
/api/alunos/{id}
Deletar aluno
Professores /api/professores
Método
Rota
Descrição
GET
/api/professores
Listar todos
GET
/api/professores/{id}
Buscar por ID
POST
/api/professores
Cadastrar professor
PUT
/api/professores/{id}
Atualizar professor
DELETE
/api/professores/{id}
Deletar professor
Método
Rota
Descrição
GET
/api/cursos
Listar todos
GET
/api/cursos/{id}
Buscar por ID (com lista de alunos)
POST
/api/cursos
Criar curso (requer professorId)
PUT
/api/cursos/{id}
Atualizar curso
POST
/api/cursos/{cursoId}/alunos/{alunoId}
Matricular aluno
DELETE
/api/cursos/{cursoId}/alunos/{alunoId}
Desmatricular aluno
DELETE
/api/cursos/{id}
Deletar curso
Nota >= 7.0 → situação APROVADO; < 7.0 → REPROVADO; sem nota → EM_ANDAMENTO
E-mail e RA do aluno são únicos
E-mail do professor é único
Um curso tem exatamente 1 professor (OneToOne)
Um curso pode ter N alunos (ManyToMany via tabela curso_alunos)
config/ → SecurityConfig, OpenApiConfig
controller/ → REST + ApiExceptionHandler
service/ → Regras de negócio, orquestração
repository/ → Spring Data JPA
domain/ → Entidades JPA + Enums
vo/ → Value Objects (NomeAluno, EmailAluno, RaAluno, ...)
dto/ → Request e Response DTOs