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 ffc7eae8..64c5eb7a 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 @@ -7,13 +7,12 @@ import org.springframework.data.domain.Page; import org.springframework.stereotype.Component; -import com.querydsl.core.Tuple; - import kernel360.trackycore.core.common.exception.ErrorCode; import kernel360.trackycore.core.common.exception.GlobalException; -import kernel360.trackycore.core.domain.entity.QRentEntity; +import kernel360.trackycore.core.domain.entity.BizEntity; import kernel360.trackycore.core.domain.entity.RentEntity; import kernel360.trackycore.core.domain.entity.enums.RentStatus; +import kernel360.trackycore.core.infrastructure.repository.BizRepository; import kernel360.trackyweb.car.infrastructure.repository.CarDomainRepository; import kernel360.trackyweb.rent.application.dto.request.RentSearchByFilterRequest; import kernel360.trackyweb.rent.application.dto.response.OverlappingRentResponse; @@ -27,6 +26,7 @@ public class RentDomainProvider { private final RentDomainRepository rentDomainRepository; private final CarDomainRepository carDomainRepository; + private final BizRepository bizRepository; public RentEntity save(RentEntity rent) { return rentDomainRepository.save(rent); @@ -37,6 +37,7 @@ public Long count() { } public Page searchRentByFilter(RentSearchByFilterRequest request, String bizUuid) { + return rentDomainRepository.searchRentByFilter(request, bizUuid); } @@ -53,8 +54,10 @@ public Long getTotalRentDurationInMinutes() { } public void softDelete(String rentUuid) { + RentEntity rent = rentDomainRepository.findByRentUuid(rentUuid) .orElseThrow(() -> GlobalException.throwError(ErrorCode.RENT_NOT_FOUND)); + rent.updateStatus(RentStatus.DELETED); } @@ -71,11 +74,10 @@ public void validateOverlappingRent(String mdn, LocalDateTime rentStime, LocalDa } public List getRentableMdnList(String bizUuid) { - List tuples = rentDomainRepository.findRentableMdn(bizUuid); - return tuples.stream().map(tuple -> { - return new RentMdnResponse(tuple.get(QRentEntity.rentEntity.car.mdn), - tuple.get(QRentEntity.rentEntity.car.status)); - }).toList(); - } + BizEntity biz = bizRepository.findByBizUuid(bizUuid) + .orElseThrow(() -> GlobalException.throwError(ErrorCode.BIZ_NOT_FOUND)); + + return rentDomainRepository.findRentableMdn(biz.getId()); + } } diff --git a/tracky-web/src/main/java/kernel360/trackyweb/rent/infrastructure/repository/RentRepositoryCustom.java b/tracky-web/src/main/java/kernel360/trackyweb/rent/infrastructure/repository/RentRepositoryCustom.java index ff0506e6..5d56371d 100644 --- a/tracky-web/src/main/java/kernel360/trackyweb/rent/infrastructure/repository/RentRepositoryCustom.java +++ b/tracky-web/src/main/java/kernel360/trackyweb/rent/infrastructure/repository/RentRepositoryCustom.java @@ -5,15 +5,14 @@ import org.springframework.data.domain.Page; -import com.querydsl.core.Tuple; - import kernel360.trackycore.core.domain.entity.RentEntity; import kernel360.trackyweb.rent.application.dto.request.RentSearchByFilterRequest; +import kernel360.trackyweb.rent.application.dto.response.RentMdnResponse; public interface RentRepositoryCustom { Page searchRentByFilter(RentSearchByFilterRequest request, String bizUuid); - List findRentableMdn(String bizUuid); + List findRentableMdn(Long bizId); List findDelayedRents(String bizUuid, LocalDateTime now); diff --git a/tracky-web/src/main/java/kernel360/trackyweb/rent/infrastructure/repository/RentRepositoryCustomImpl.java b/tracky-web/src/main/java/kernel360/trackyweb/rent/infrastructure/repository/RentRepositoryCustomImpl.java index 2128a196..2b0c6c7a 100644 --- a/tracky-web/src/main/java/kernel360/trackyweb/rent/infrastructure/repository/RentRepositoryCustomImpl.java +++ b/tracky-web/src/main/java/kernel360/trackyweb/rent/infrastructure/repository/RentRepositoryCustomImpl.java @@ -13,7 +13,7 @@ import org.springframework.stereotype.Repository; import com.querydsl.core.BooleanBuilder; -import com.querydsl.core.Tuple; +import com.querydsl.core.types.Projections; import com.querydsl.jpa.impl.JPAQuery; import com.querydsl.jpa.impl.JPAQueryFactory; @@ -22,6 +22,7 @@ import kernel360.trackycore.core.domain.entity.enums.CarStatus; import kernel360.trackycore.core.domain.entity.enums.RentStatus; import kernel360.trackyweb.rent.application.dto.request.RentSearchByFilterRequest; +import kernel360.trackyweb.rent.application.dto.response.RentMdnResponse; import lombok.RequiredArgsConstructor; @Repository @@ -60,14 +61,18 @@ public Page searchRentByFilter(RentSearchByFilterRequest request, St } @Override - public List findRentableMdn(String bizUuid) { + public List findRentableMdn(Long bizId) { return queryFactory - .select(rentEntity.car.mdn, rentEntity.car.status) + .select( + Projections.constructor( + RentMdnResponse.class, + rentEntity.car.mdn, rentEntity.car.status + )) .distinct() .from(rentEntity) .where( - rentEntity.car.biz.bizUuid.eq(bizUuid), + rentEntity.car.biz.id.eq(bizId), rentEntity.car.status.ne(CarStatus.CLOSED), rentEntity.car.status.ne(CarStatus.DELETED) )