From 43d53b7cc31744dbabff2347b4a555bf30061b0b Mon Sep 17 00:00:00 2001 From: alwil17 Date: Tue, 20 May 2025 16:17:55 +0000 Subject: [PATCH 1/4] Enhance reservation creation by adding slot availability check and updating slot status --- .../service/impl/ReservationServiceImpl.java | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/grey/rdv_manager_api/service/impl/ReservationServiceImpl.java b/src/main/java/com/grey/rdv_manager_api/service/impl/ReservationServiceImpl.java index 77919cf..68d602c 100644 --- a/src/main/java/com/grey/rdv_manager_api/service/impl/ReservationServiceImpl.java +++ b/src/main/java/com/grey/rdv_manager_api/service/impl/ReservationServiceImpl.java @@ -3,12 +3,15 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import com.grey.rdv_manager_api.domain.enums.ReservationStatus; import com.grey.rdv_manager_api.domain.model.Reservation; +import com.grey.rdv_manager_api.domain.model.Slot; import com.grey.rdv_manager_api.mapper.ReservationMapper; import com.grey.rdv_manager_api.payload.request.CreateReservationRequest; import com.grey.rdv_manager_api.payload.request.UpdateReservationRequest; import com.grey.rdv_manager_api.payload.response.ReservationResponse; import com.grey.rdv_manager_api.repository.ReservationRepository; +import com.grey.rdv_manager_api.repository.SlotRepository; import com.grey.rdv_manager_api.service.ReservationService; import java.util.List; @@ -18,18 +21,34 @@ public class ReservationServiceImpl implements ReservationService { private final ReservationRepository repository; + private final SlotRepository slotRepository; private final ReservationMapper mapper; - public ReservationServiceImpl(ReservationRepository repository, ReservationMapper mapper) { + public ReservationServiceImpl(ReservationRepository repository, ReservationMapper mapper, SlotRepository slotRepository) { this.repository = repository; this.mapper = mapper; + this.slotRepository = slotRepository; } @Override @Transactional public ReservationResponse create(CreateReservationRequest request) { + // Check slot availability + Slot slot = slotRepository.findById(request.slotId()) + .orElseThrow(() -> new RuntimeException("Slot not found: " + request.slotId())); + if (slot.getAvailable() <= 0) { + throw new RuntimeException("No available places for this slot."); + } + + // Proceed with reservation Reservation entity = mapper.toEntity(request); entity.setId(UUID.randomUUID()); + entity.setStatus(ReservationStatus.PENDING); + + // Decrement slot availability + slot.setAvailable(slot.getAvailable() - 1); + slotRepository.save(slot); + Reservation saved = repository.save(entity); return mapper.toResponse(saved); } From 562180e0878df243be2e2ae4d3aee01a0475a238 Mon Sep 17 00:00:00 2001 From: alwil17 Date: Tue, 20 May 2025 16:22:43 +0000 Subject: [PATCH 2/4] Set slot availability during creation --- .../com/grey/rdv_manager_api/service/impl/SlotServiceImpl.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/grey/rdv_manager_api/service/impl/SlotServiceImpl.java b/src/main/java/com/grey/rdv_manager_api/service/impl/SlotServiceImpl.java index 464ff3b..96bb2e1 100644 --- a/src/main/java/com/grey/rdv_manager_api/service/impl/SlotServiceImpl.java +++ b/src/main/java/com/grey/rdv_manager_api/service/impl/SlotServiceImpl.java @@ -30,6 +30,7 @@ public SlotServiceImpl(SlotRepository repository, SlotMapper mapper) { public SlotResponse create(CreateSlotRequest request) { Slot entity = mapper.toEntity(request); entity.setId(UUID.randomUUID()); + entity.setAvailable(request.capacity()); Slot saved = repository.save(entity); return mapper.toResponse(saved); } From f6b502039b5b75c424b4b9f32d793fa5eb75e8c9 Mon Sep 17 00:00:00 2001 From: alwil17 Date: Tue, 20 May 2025 17:02:35 +0000 Subject: [PATCH 3/4] Add endpoint to retrieve services by structure ID --- .../grey/rdv_manager_api/controller/ServiceController.java | 6 ++++++ .../grey/rdv_manager_api/service/ServiceEntityService.java | 1 + .../service/impl/ServiceEntityServiceImpl.java | 5 +++++ 3 files changed, 12 insertions(+) diff --git a/src/main/java/com/grey/rdv_manager_api/controller/ServiceController.java b/src/main/java/com/grey/rdv_manager_api/controller/ServiceController.java index f15d9da..0ab83b1 100644 --- a/src/main/java/com/grey/rdv_manager_api/controller/ServiceController.java +++ b/src/main/java/com/grey/rdv_manager_api/controller/ServiceController.java @@ -55,4 +55,10 @@ public ResponseEntity updateService( public void deleteService(@PathVariable UUID id) { serviceService.delete(id); } + + @GetMapping("/structure/{structureId}") + public ResponseEntity> getServicesByStructure(@PathVariable UUID structureId) { + List list = serviceService.getByStructureId(structureId); + return ResponseEntity.ok(list); + } } \ No newline at end of file diff --git a/src/main/java/com/grey/rdv_manager_api/service/ServiceEntityService.java b/src/main/java/com/grey/rdv_manager_api/service/ServiceEntityService.java index 6a6b737..ed9f1f9 100644 --- a/src/main/java/com/grey/rdv_manager_api/service/ServiceEntityService.java +++ b/src/main/java/com/grey/rdv_manager_api/service/ServiceEntityService.java @@ -13,4 +13,5 @@ public interface ServiceEntityService { List getAll(); ServiceResponse update(UUID id, UpdateServiceRequest request); void delete(UUID id); + List getByStructureId(UUID structureId); } diff --git a/src/main/java/com/grey/rdv_manager_api/service/impl/ServiceEntityServiceImpl.java b/src/main/java/com/grey/rdv_manager_api/service/impl/ServiceEntityServiceImpl.java index 3752068..d846635 100644 --- a/src/main/java/com/grey/rdv_manager_api/service/impl/ServiceEntityServiceImpl.java +++ b/src/main/java/com/grey/rdv_manager_api/service/impl/ServiceEntityServiceImpl.java @@ -61,4 +61,9 @@ public ServiceResponse update(UUID id, UpdateServiceRequest request) { public void delete(UUID id) { repository.deleteById(id); } + + @Override + public List getByStructureId(UUID structureId) { + return mapper.toResponseList(repository.findByStructureId(structureId)); + } } \ No newline at end of file From 329d32ee2ca1082e130910c2cb3db94ffbd0e3f1 Mon Sep 17 00:00:00 2001 From: alwil17 Date: Tue, 20 May 2025 17:07:23 +0000 Subject: [PATCH 4/4] Add .dockerignore file to exclude unnecessary files from Docker context --- .dockerignore | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 .dockerignore diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..276e3ee --- /dev/null +++ b/.dockerignore @@ -0,0 +1,14 @@ +__pycache__/ +*.pyc +*.pyo +*.pyd +*.db +*.sqlite3 +.git +.gitignore +resources/ +venv/ +.venv/ +.idea/ +.vscode/ +target/ \ No newline at end of file