diff --git a/tracky-web/src/main/java/kernel360/trackyweb/rent/application/RentService.java b/tracky-web/src/main/java/kernel360/trackyweb/rent/application/RentService.java index 90cb0740..beb8704d 100644 --- a/tracky-web/src/main/java/kernel360/trackyweb/rent/application/RentService.java +++ b/tracky-web/src/main/java/kernel360/trackyweb/rent/application/RentService.java @@ -18,8 +18,10 @@ import kernel360.trackyweb.common.sse.GlobalSseEvent; import kernel360.trackyweb.common.sse.SseEvent; import kernel360.trackyweb.rent.application.dto.request.RentCreateRequest; +import kernel360.trackyweb.rent.application.dto.request.RentOverLapRequest; import kernel360.trackyweb.rent.application.dto.request.RentSearchByFilterRequest; import kernel360.trackyweb.rent.application.dto.request.RentUpdateRequest; +import kernel360.trackyweb.rent.application.dto.response.OverlappingRentResponse; import kernel360.trackyweb.rent.application.dto.response.RentMdnResponse; import kernel360.trackyweb.rent.application.dto.response.RentResponse; import kernel360.trackyweb.rent.domain.provider.RentDomainProvider; @@ -177,4 +179,15 @@ public void updateStatus() { } }); } + + @Transactional(readOnly = true) + public ApiResponse> validateOverlappingRentOps( + RentOverLapRequest rentOverLapRequest + ) { + return ApiResponse.success(rentDomainProvider.validateOverlappingRentOps( + rentOverLapRequest.mdn(), + rentOverLapRequest.startDate(), + rentOverLapRequest.endDate() + )); + } } diff --git a/tracky-web/src/main/java/kernel360/trackyweb/rent/application/dto/request/RentOverLapRequest.java b/tracky-web/src/main/java/kernel360/trackyweb/rent/application/dto/request/RentOverLapRequest.java new file mode 100644 index 00000000..c6d9ee47 --- /dev/null +++ b/tracky-web/src/main/java/kernel360/trackyweb/rent/application/dto/request/RentOverLapRequest.java @@ -0,0 +1,10 @@ +package kernel360.trackyweb.rent.application.dto.request; + +import java.time.LocalDateTime; + +public record RentOverLapRequest( + String mdn, + LocalDateTime startDate, + LocalDateTime endDate +) { +} diff --git a/tracky-web/src/main/java/kernel360/trackyweb/rent/domain/provider/RentDomainProvider.java b/tracky-web/src/main/java/kernel360/trackyweb/rent/domain/provider/RentDomainProvider.java index 64c5eb7a..85a57261 100644 --- a/tracky-web/src/main/java/kernel360/trackyweb/rent/domain/provider/RentDomainProvider.java +++ b/tracky-web/src/main/java/kernel360/trackyweb/rent/domain/provider/RentDomainProvider.java @@ -73,6 +73,14 @@ public void validateOverlappingRent(String mdn, LocalDateTime rentStime, LocalDa } } + public List validateOverlappingRentOps(String mdn, LocalDateTime rentStime, LocalDateTime rentEtime) { + List overlaps = rentDomainRepository.findOverlappingRent(mdn, rentStime, rentEtime); + + return overlaps.stream() + .map(OverlappingRentResponse::from) + .collect(Collectors.toList()); + } + public List getRentableMdnList(String bizUuid) { BizEntity biz = bizRepository.findByBizUuid(bizUuid) diff --git a/tracky-web/src/main/java/kernel360/trackyweb/rent/presentation/RentController.java b/tracky-web/src/main/java/kernel360/trackyweb/rent/presentation/RentController.java index 0c10f2f4..5dc2dd63 100644 --- a/tracky-web/src/main/java/kernel360/trackyweb/rent/presentation/RentController.java +++ b/tracky-web/src/main/java/kernel360/trackyweb/rent/presentation/RentController.java @@ -17,8 +17,10 @@ import kernel360.trackycore.core.common.api.ApiResponse; import kernel360.trackyweb.rent.application.RentService; import kernel360.trackyweb.rent.application.dto.request.RentCreateRequest; +import kernel360.trackyweb.rent.application.dto.request.RentOverLapRequest; import kernel360.trackyweb.rent.application.dto.request.RentSearchByFilterRequest; import kernel360.trackyweb.rent.application.dto.request.RentUpdateRequest; +import kernel360.trackyweb.rent.application.dto.response.OverlappingRentResponse; import kernel360.trackyweb.rent.application.dto.response.RentMdnResponse; import kernel360.trackyweb.rent.application.dto.response.RentResponse; import kernel360.trackyweb.sign.infrastructure.security.principal.MemberPrincipal; @@ -81,4 +83,11 @@ public ApiResponse delete( return rentService.delete(rentUuid); } + @PostMapping("/availability") + public ApiResponse> validateOverlappingRentOps( + @RequestBody RentOverLapRequest rentOverLapRequest + ) { + return rentService.validateOverlappingRentOps(rentOverLapRequest); + } + }