Plataforma completa para gerenciamento administrativo de instituições educacionais. Backend desenvolvido com Spring Boot, PostgreSQL e Docker.
A API RESTful fornece funcionalidades completas para gerenciamento educacional:
- Gestão de Alunos: Cadastro, atualização, busca e ativação/desativação de alunos
- Gestão de Professores: Gerenciamento de dados profissionais e acadêmicos dos professores
- Gestão de Cursos: Criação e manutenção de cursos oferecidos pela instituição
- Gestão de Turmas: Organização de turmas com professor e período específicos
- Matrículas: Inscrição de alunos em turmas com controle de status
- Notas: Registro de avaliações e cálculo de médias
- Frequência: Controle de presença com relatórios de taxa de frequência
- Autenticação JWT: Segurança com tokens JWT para proteção de endpoints
| Componente | Versão | Descrição |
|---|---|---|
| Java | 17 | Linguagem de programação |
| Spring Boot | 3.2.0 | Framework web |
| Spring Data JPA | 3.2.0 | Acesso a dados |
| Spring Security | 3.2.0 | Autenticação e autorização |
| PostgreSQL | 15 | Banco de dados relacional |
| JWT (JJWT) | 0.12.3 | Tokens de autenticação |
| Swagger/OpenAPI | 2.1.0 | Documentação da API |
| Lombok | 1.18.30 | Redução de boilerplate |
| Maven | 3.9+ | Gerenciador de dependências |
| Docker | Latest | Containerização |
Antes de iniciar, certifique-se de ter instalado:
- Java 17 ou superior: Download
- Maven 3.9+: Download
- Docker: Download
- Docker Compose: Incluído no Docker Desktop
git clone <seu-repositorio>
cd sga-backendExecute o Docker Compose para iniciar o banco de dados:
docker-compose up -dIsso iniciará um contêiner PostgreSQL com as seguintes credenciais:
- Host: localhost
- Porta: 5432
- Banco de dados: sga_db
- Usuário: sga_user
- Senha: sga_password
Edite o arquivo src/main/resources/application.properties conforme necessário:
# Banco de dados
spring.datasource.url=jdbc:postgresql://localhost:5432/sga_db
spring.datasource.username=sga_user
spring.datasource.password=sga_password
# JWT
jwt.secret=your-secret-key-change-in-production-environment-with-at-least-256-bits
jwt.expiration=86400000 # 24 horas em milissegundosImportante: Em produção, altere a chave secreta JWT para uma chave forte e única.
# Compilar o projeto
mvn clean install
# Executar a aplicação
mvn spring-boot:runA aplicação estará disponível em: http://localhost:8080/api
A documentação interativa da API está disponível através do Swagger UI:
- Swagger UI: http://localhost:8080/api/swagger-ui.html
- OpenAPI JSON: http://localhost:8080/api/v3/api-docs
A API utiliza autenticação baseada em JWT (JSON Web Tokens). Para acessar endpoints protegidos:
curl -X POST http://localhost:8080/api/auth/login \
-H "Content-Type: application/json" \
-d '{
"email": "usuario@example.com",
"senha": "senha123"
}'Resposta:
{
"token": "eyJhbGciOiJIUzUxMiJ9...",
"tokenType": "Bearer",
"userId": 1,
"email": "usuario@example.com",
"nome": "João Silva",
"expiresIn": 86400000
}Inclua o token no header Authorization de todas as requisições:
curl -X GET http://localhost:8080/api/alunos \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9..."POST /auth/login- Login de usuárioPOST /auth/registrar- Registrar novo usuárioGET /auth/me- Obter dados do usuário autenticado
GET /alunos- Listar todos os alunosGET /alunos/{id}- Obter aluno por IDPOST /alunos- Criar novo alunoPUT /alunos/{id}- Atualizar alunoDELETE /alunos/{id}- Deletar aluno
GET /professores- Listar todos os professoresGET /professores/{id}- Obter professor por IDPOST /professores- Criar novo professorPUT /professores/{id}- Atualizar professorDELETE /professores/{id}- Deletar professor
GET /cursos- Listar todos os cursosGET /cursos/{id}- Obter curso por IDPOST /cursos- Criar novo cursoPUT /cursos/{id}- Atualizar cursoDELETE /cursos/{id}- Deletar curso
GET /turmas- Listar todas as turmasGET /turmas/{id}- Obter turma por IDPOST /turmas- Criar nova turmaPUT /turmas/{id}- Atualizar turmaDELETE /turmas/{id}- Deletar turma
GET /matriculas- Listar todas as matrículasGET /matriculas/{id}- Obter matrícula por IDPOST /matriculas- Criar nova matrículaPATCH /matriculas/{id}/cancelar- Cancelar matrículaPATCH /matriculas/{id}/trancar- Trancar matrícula
GET /notas- Listar todas as notasGET /notas/{id}- Obter nota por IDPOST /notas- Criar nova notaPUT /notas/{id}- Atualizar notaGET /notas/aluno/{alunoId}/turma/{turmaId}/media- Calcular média
GET /frequencias- Listar todas as frequênciasGET /frequencias/{id}- Obter frequência por IDPOST /frequencias- Criar novo registro de frequênciaPUT /frequencias/{id}- Atualizar frequênciaGET /frequencias/aluno/{alunoId}/turma/{turmaId}/taxa-presenca- Taxa de presença
sga-backend/
├── src/main/java/com/sga/
│ ├── config/ # Configurações (Security, OpenAPI)
│ ├── controller/ # Controllers REST
│ ├── dto/ # Data Transfer Objects
│ ├── entity/ # Entidades JPA
│ ├── exception/ # Exceções customizadas
│ ├── repository/ # Repositórios Spring Data JPA
│ ├── security/ # Componentes de segurança JWT
│ ├── service/ # Serviços (lógica de negócio)
│ └── SgaBackendApplication.java # Classe principal
├── src/main/resources/
│ └── application.properties # Configurações da aplicação
├── pom.xml # Dependências Maven
├── docker-compose.yml # Configuração Docker
└── README.md # Este arquivo
Gere uma chave segura e altere em application.properties:
# Gerar chave aleatória (Linux/Mac)
openssl rand -base64 32Atualize a URL do banco de dados para apontar para seu servidor PostgreSQL:
spring.datasource.url=jdbc:postgresql://seu-servidor:5432/sga_db
spring.datasource.username=seu-usuario
spring.datasource.password=sua-senhamvn clean package -DskipTestsIsso gera um arquivo JAR em target/sga-backend-1.0.0.jar
java -jar target/sga-backend-1.0.0.jarExecute os testes unitários:
mvn testcurl -X POST http://localhost:8080/api/auth/registrar \
-H "Content-Type: application/json" \
-d '{
"email": "admin@example.com",
"nome": "Administrador",
"senha": "senha123",
"tipo": "ADMINISTRADOR",
"ativo": true
}'curl -X POST http://localhost:8080/api/auth/login \
-H "Content-Type: application/json" \
-d '{
"email": "admin@example.com",
"senha": "senha123"
}'curl -X POST http://localhost:8080/api/alunos \
-H "Authorization: Bearer SEU_TOKEN_AQUI" \
-H "Content-Type: application/json" \
-d '{
"matricula": "MAT001",
"nome": "João Silva",
"email": "joao@example.com",
"telefone": "(11) 98765-4321",
"dataNascimento": "2000-01-15",
"endereco": "Rua das Flores, 123",
"cidade": "São Paulo",
"estado": "SP",
"cep": "01234-567",
"cpf": "123.456.789-00",
"ativo": true
}'Verifique se o Docker está rodando:
docker psSe o contêiner não estiver rodando, inicie-o novamente:
docker-compose up -dAltere a porta em application.properties:
server.port=8081Verifique se o token foi copiado corretamente e se não expirou. Faça login novamente para obter um novo token.
Este projeto é fornecido como está para fins educacionais e comerciais.
Desenvolvido por Jefferson Monteiro - Sistema de Gerenciamento de Alunos (SGA)
Para dúvidas ou problemas, consulte a documentação Swagger em http://localhost:8080/api/swagger-ui.html
Versão: 1.0.0
Última atualização: Outubro de 2025