Este projeto implementa uma API ReST desenvolvida com Spring Boot para o sistema de agendamento de instruções de uma auto-escola. A API permite o cadastro, listagem, atualização e exclusão (lógica) de instrutores e alunos, além do agendamento e cancelamento de instruções.
- Java 17
- Spring Boot 3.2.9
- Spring Data JPA
- H2 Database (em memória)
- Maven
- Spring Security
- Cadastro de Usuários: Permite o cadastro de novos usuários com senha encriptada.
- Autenticação: Sistema de autenticação via JWT (já existente no projeto base).
- Controle de Acesso (Roles): Implementação de roles (ex: ADMIN, USER) para controle de acesso.
- Gerenciamento de Usuários (ADMIN): Apenas administradores podem cadastrar, listar, atualizar e excluir usuários.
- Alteração de Senha: Usuários autenticados podem alterar suas próprias senhas.
- Cadastro: Permite cadastrar novos instrutores com todas as informações obrigatórias
- Listagem: Lista instrutores ativos com paginação (10 registros por página) e ordenação por nome
- Atualização: Permite atualizar nome, telefone e endereço (e-mail, CNH e especialidade não podem ser alterados)
- Exclusão: Exclusão lógica que torna o instrutor inativo no sistema
- Cadastro: Permite cadastrar novos alunos com todas as informações obrigatórias
- Listagem: Lista alunos ativos com paginação (10 registros por página) e ordenação por nome
- Atualização: Permite atualizar nome, telefone e endereço (e-mail e CPF não podem ser alterados)
- Exclusão: Exclusão lógica que torna o aluno inativo no sistema
- Agendamento de Instruções: Permite agendar instruções com validações de horário de funcionamento, antecedência mínima, limite de instruções por aluno e disponibilidade de instrutor
- Cancelamento de Instruções: Permite cancelar instruções com antecedência mínima de 24 horas e motivo obrigatório
- Segunda a sábado, das 06:00 às 21:00
- Instruções têm duração fixa de 1 hora
- Antecedência mínima de 30 minutos para agendamento
- Máximo de 2 instruções por dia para o mesmo aluno
- Instrutor não pode ter conflito de horário
- Seleção automática de instrutor disponível quando não especificado
- Antecedência mínima de 24 horas
- Motivo obrigatório (Aluno desistiu, Instrutor cancelou, Outros)
src/main/java/com/autoescola/api/
├── entity/ # Entidades JPA
├── dto/ # Data Transfer Objects
├── vo/ # Value Objects
├── repository/ # Repositórios JPA
├── service/ # Camada de serviços
├── config/ # Classes de configuração (ex: SecurityConfig)
└── controller/ # Controladores REST
- Clone o repositório
- Navegue até o diretório do projeto
- Execute o comando:
mvn spring-boot:run - A aplicação estará disponível em:
http://localhost:8080
POST /api/instrutores- Cadastrar instrutorGET /api/instrutores- Listar instrutores (com paginação)PUT /api/instrutores/{id}- Atualizar instrutorDELETE /api/instrutores/{id}- Excluir instrutor (lógica)
POST /api/alunos- Cadastrar alunoGET /api/alunos- Listar alunos (com paginação)PUT /api/alunos/{id}- Atualizar alunoDELETE /api/alunos/{id}- Excluir aluno (lógica)
POST /api/agendamentos- Agendar instruçãoPUT /api/agendamentos/cancelar- Cancelar instrução
POST /api/users/register- Cadastrar novo usuário (acesso público)GET /api/users- Listar todos os usuários (apenas ADMIN)PUT /api/users/{id}- Atualizar perfil de usuário (apenas ADMIN)DELETE /api/users/{id}- Excluir usuário (apenas ADMIN)PUT /api/users/{id}/change-password- Alterar senha do usuário (usuário autenticado)
Para acessar o console do banco H2 durante o desenvolvimento:
- URL:
http://localhost:8080/h2-console - JDBC URL:
jdbc:h2:mem:testdb - Username:
sa - Password:
password
- O banco de dados H2 é configurado em memória para facilitar o desenvolvimento e testes
- Todas as validações de negócio foram implementadas conforme especificação
- A API utiliza exclusão lógica para manter histórico dos dados
- Foi adicionada uma estrutura básica de segurança com Spring Security, incluindo autenticação e autorização baseada em roles. É necessário integrar com o sistema de autenticação JWT existente para um controle de acesso completo.