How r1qk/cp05-poo-petfiap-bughunt works
PetFiap is a Spring REST API for scheduling pet bathing, grooming, and veterinary appointments. The main workflow accepts appointment details, assigns a protocol, builds and type-selects a domain appointment, checks scheduling rules, and persists it; clients can then look up appointments, view price/points/duration, or complete and cancel them. The README also documents Oracle/H2 runtime configuration. Edges follow the controller, service, builder, factory, model, and repository calls visible in the excerpts; storage wiring is represented by the repository abstraction, not an asserted database connection.
Main entry points: AtendimentoController.java Appointment API · AgendaService.java Agenda rules · AtendimentoFactory.java Appointment factory · Atendimento.java Appointment state
Components 14
REST API
- Appointment API
src/main/java/br/com/fiap/petfiap/controller/AtendimentoController.java - Agenda rules
src/main/java/br/com/fiap/petfiap/service/AgendaService.java - Appointment not found
src/main/java/br/com/fiap/petfiap/exception/AtendimentoNaoEncontradoException.java - Occupied slot
src/main/java/br/com/fiap/petfiap/exception/HorarioOcupadoException.java
Appointment creation
- Appointment builder
src/main/java/br/com/fiap/petfiap/builder/AtendimentoBuilder.java - Appointment factory
src/main/java/br/com/fiap/petfiap/factory/AtendimentoFactory.java - Protocol generator
src/main/java/br/com/fiap/petfiap/model/GeradorProtocolo.java
Appointment domain
- Appointment state
src/main/java/br/com/fiap/petfiap/model/Atendimento.java - Bath pricing
src/main/java/br/com/fiap/petfiap/model/Banho.java - Grooming pricing
src/main/java/br/com/fiap/petfiap/model/Tosa.java - Veterinary consultation
src/main/java/br/com/fiap/petfiap/model/ConsultaVeterinaria.java - Invalid status
src/main/java/br/com/fiap/petfiap/exception/StatusInvalidoException.java
Persistence
- Appointment repository
src/main/java/br/com/fiap/petfiap/repository/AtendimentoRepository.java
Other components
- API client
Connections 16
- API client → Appointment API: sends requests
src/main/java/br/com/fiap/petfiap/controller/AtendimentoController.java - Appointment API → Protocol generator: gets protocol
src/main/java/br/com/fiap/petfiap/controller/AtendimentoController.java - Appointment API → Appointment builder: builds appointment
src/main/java/br/com/fiap/petfiap/controller/AtendimentoController.java - Appointment builder → Appointment factory: creates type
src/main/java/br/com/fiap/petfiap/builder/AtendimentoBuilder.java - Appointment factory → Bath pricing: instantiates
src/main/java/br/com/fiap/petfiap/factory/AtendimentoFactory.java - Appointment factory → Grooming pricing: instantiates
src/main/java/br/com/fiap/petfiap/factory/AtendimentoFactory.java - Appointment factory → Veterinary consultation: instantiates
src/main/java/br/com/fiap/petfiap/factory/AtendimentoFactory.java - Appointment API → Agenda rules: routes operations
src/main/java/br/com/fiap/petfiap/controller/AtendimentoController.java - Agenda rules → Appointment repository: queries and saves
src/main/java/br/com/fiap/petfiap/service/AgendaService.java - Appointment repository → Appointment state: stores entities
src/main/java/br/com/fiap/petfiap/repository/AtendimentoRepository.java - Appointment API → Appointment state: reads summary
src/main/java/br/com/fiap/petfiap/controller/AtendimentoController.java - Agenda rules → Appointment state: changes status
src/main/java/br/com/fiap/petfiap/service/AgendaService.java - Appointment state → Invalid status: rejects transitions
src/main/java/br/com/fiap/petfiap/model/Atendimento.java - Agenda rules → Occupied slot: rejects slot
src/main/java/br/com/fiap/petfiap/service/AgendaService.java - Agenda rules → Appointment not found: throws on missing
src/main/java/br/com/fiap/petfiap/service/AgendaService.java - Appointment API → Appointment not found: maps not found
src/main/java/br/com/fiap/petfiap/controller/AtendimentoController.java