Sistema genérico de reservas desenvolvido com Spring Boot, ideal para restaurantes, salões de beleza, barbearias e outros estabelecimentos que necessitam gerenciar agendamentos.
- ✅ Cadastro completo de clientes
- ✅ Consulta por ID ou listagem completa
- ✅ Atualização de dados cadastrais
- ✅ Exclusão de clientes
- ✅ Validação de email único
- ✅ Timestamp automático de criação
- ✅ Criação de reservas vinculadas a clientes
- ✅ Controle de status (Pendente, Confirmada, Cancelada, Concluída)
- ✅ Validação de datas (não permite reservas no passado)
- ✅ Filtragem por cliente, status ou intervalo de datas
- ✅ Atualização de reservas existentes
- ✅ Cancelamento e conclusão de reservas
- ✅ Timestamps automáticos de criação e atualização
- ✅ Observações personalizadas
- Java 17 - Linguagem de programação
- Spring Boot 3.5.7 - Framework principal
- Spring Data JPA - Persistência de dados
- Hibernate - ORM (Object-Relational Mapping)
- H2 Database - Banco de dados em memória
- Maven - Gerenciador de dependências
- Jackson - Serialização JSON
- Spring DevTools - Hot reload em desenvolvimento
- JDK 17 ou superior
- Maven 3.6+
- VS Code (recomendado) ou IDE de sua preferência
git clone https://github.com/xbruno1000x/SisReservas.git
cd SisReservasmvn spring-boot:runOu se estiver usando VS Code com as tasks configuradas:
- Pressione
Ctrl+Alt+Mpara compilar e executar
- API: http://localhost:8080
- Console H2: http://localhost:8080/h2-console
- JDBC URL:
jdbc:h2:mem:sisreservas - Username:
sa - Password: (deixe em branco)
- JDBC URL:
| Método | Endpoint | Descrição |
|---|---|---|
| GET | /api/clientes |
Lista todos os clientes |
| GET | /api/clientes/{id} |
Busca cliente por ID |
| POST | /api/clientes |
Cria novo cliente |
| PUT | /api/clientes/{id} |
Atualiza cliente |
| DELETE | /api/clientes/{id} |
Remove cliente |
{
"nome": "João Silva",
"telefone": "(11) 98765-4321",
"email": "joao.silva@email.com"
}| Método | Endpoint | Descrição |
|---|---|---|
| GET | /api/reservas |
Lista todas as reservas |
| GET | /api/reservas/{id} |
Busca reserva por ID |
| GET | /api/reservas/cliente/{clienteId} |
Lista reservas de um cliente |
| GET | /api/reservas/status/{status} |
Filtra por status |
| GET | /api/reservas/periodo?inicio=YYYY-MM-DD&fim=YYYY-MM-DD |
Filtra por período |
| POST | /api/reservas |
Cria nova reserva |
| PUT | /api/reservas/{id} |
Atualiza reserva |
| PATCH | /api/reservas/{id}/status?status=CONFIRMADA |
Atualiza apenas o status |
| DELETE | /api/reservas/{id} |
Cancela reserva |
{
"clienteId": 1,
"data": "2025-11-15",
"hora": "14:30:00",
"observacoes": "Corte de cabelo e barba",
"status": "PENDENTE"
}PENDENTE- Reserva criada, aguardando confirmaçãoCONFIRMADA- Reserva confirmada pelo estabelecimentoCANCELADA- Reserva canceladaCONCLUIDA- Serviço realizado
O projeto utiliza H2 Database em memória com dados pré-populados:
- 10 clientes cadastrados
- 20 reservas com diferentes status e datas
Os dados são recriados a cada inicialização da aplicação (arquivo data.sql).
| Campo | Tipo | Descrição |
|---|---|---|
| id | BIGINT | Chave primária |
| nome | VARCHAR(100) | Nome do cliente |
| telefone | VARCHAR(20) | Telefone |
| VARCHAR(100) | Email (único) | |
| criado_em | TIMESTAMP | Data de cadastro |
| Campo | Tipo | Descrição |
|---|---|---|
| id | BIGINT | Chave primária |
| cliente_id | BIGINT | FK para clientes |
| data | DATE | Data da reserva |
| hora | TIME | Horário da reserva |
| status | VARCHAR(20) | Status da reserva |
| observacoes | VARCHAR(500) | Observações |
| criado_em | TIMESTAMP | Data de criação |
| atualizado_em | TIMESTAMP | Última atualização |
O projeto está configurado com Spring DevTools para reiniciar automaticamente ao salvar arquivos:
- Certifique-se de que o auto-save está habilitado no VS Code
- Ao modificar arquivos
.java, a aplicação recompila automaticamente - Use
Ctrl+Alt+Mpara recompilar manualmente
O projeto inclui configurações em .vscode/:
tasks.json- Task de compilação Mavenkeybindings.json- AtalhoCtrl+Alt+Msettings.json- Autobuild e autosaveextensions.json- Extensões recomendadas
SisReservas/
├── src/main/java/com/SisReservas/
│ ├── controller/ # Controladores REST
│ │ ├── ClienteController.java
│ │ ├── ReservaController.java
│ │ └── HelloController.java
│ ├── model/ # Entidades JPA
│ │ ├── Cliente.java
│ │ └── Reserva.java
│ ├── repository/ # Repositórios JPA
│ │ ├── ClienteRepository.java
│ │ └── ReservaRepository.java
│ ├── service/ # Lógica de negócio
│ │ ├── ClienteService.java
│ │ └── ReservaService.java
│ └── SisReservasApplication.java
├── src/main/resources/
│ ├── application.properties
│ └── data.sql # Dados iniciais
├── pom.xml
└── README.md
Este projeto está sob licença não comercial. Contribuições são bem-vindas para fins educacionais e não lucrativos!
- Faça um fork do projeto
- Crie uma branch para sua feature (
git checkout -b feature/MinhaFeature) - Commit suas mudanças (
git commit -m 'Adiciona MinhaFeature') - Push para a branch (
git push origin feature/MinhaFeature) - Abra um Pull Request
Este projeto está licenciado sob a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0).
Você pode:
- ✅ Compartilhar e adaptar o código
- ✅ Usar para fins educacionais
- ✅ Usar para projetos pessoais não comerciais
Você NÃO pode:
- ❌ Usar para fins comerciais
- ❌ Vender ou lucrar com este código
Veja o arquivo LICENSE para mais detalhes.
xbruno1000x
- GitHub: @xbruno1000x
Para reportar bugs ou sugerir melhorias, abra uma issue.
⭐ Se este projeto foi útil para você, considere dar uma estrela no repositório!