ReservationQueryService.java
package com.deveagles.be15_deveagles_be.features.schedules.query.service;
import com.deveagles.be15_deveagles_be.common.dto.PagedResult;
import com.deveagles.be15_deveagles_be.common.dto.Pagination;
import com.deveagles.be15_deveagles_be.common.exception.BusinessException;
import com.deveagles.be15_deveagles_be.common.exception.ErrorCode;
import com.deveagles.be15_deveagles_be.features.schedules.query.dto.request.BookedTimeRequest;
import com.deveagles.be15_deveagles_be.features.schedules.query.dto.request.ReservationSearchRequest;
import com.deveagles.be15_deveagles_be.features.schedules.query.dto.response.*;
import com.deveagles.be15_deveagles_be.features.schedules.query.mapper.ReservationQueryMapper;
import com.deveagles.be15_deveagles_be.features.schedules.query.mapper.ReservationSearchMapper;
import java.util.List;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
@Service
@RequiredArgsConstructor
public class ReservationQueryService {
private final ReservationQueryMapper reservationQueryMapper;
private final ReservationSearchMapper reservationSearchMapper;
public BookedTimeResponse getBookedTimes(BookedTimeRequest req) {
List<BookedTimeDto> results = reservationQueryMapper.findBookedTimes(req);
return new BookedTimeResponse(results);
}
public PagedResult<ReservationListResponse> findReservationRequests(
Long shopId, int page, int size) {
int offset = page * size;
List<ReservationListResponse> content =
reservationQueryMapper.findReservationRequests(shopId, size, offset);
long totalCount = reservationQueryMapper.countReservationRequests(shopId);
Pagination pagination =
Pagination.builder()
.currentPage(page)
.totalPages((int) Math.ceil((double) totalCount / size))
.totalItems(totalCount)
.build();
return new PagedResult<>(content, pagination);
}
public PagedResult<ReservationSearchResponse> searchReservations(
Long shopId, ReservationSearchRequest request, int page, int size) {
int offset = page * size;
ReservationSearchRequest newRequest =
ReservationSearchRequest.builder()
.shopId(shopId)
.staffId(request.staffId())
.reservationStatusName(request.reservationStatusName())
.customerKeyword(request.customerKeyword())
.from(request.from())
.to(request.to())
.build();
List<ReservationSearchResponse> content =
reservationSearchMapper.findReservations(newRequest, offset, size);
int totalCount = reservationSearchMapper.countReservations(newRequest);
return new PagedResult<>(
content, new Pagination(page, (int) Math.ceil((double) totalCount / size), totalCount));
}
public ReservationDetailResponse getReservationDetail(Long reservationId, Long shopId) {
ReservationDetailResponse response =
reservationQueryMapper.findReservationDetailById(reservationId, shopId);
if (response == null) {
throw new BusinessException(ErrorCode.RESERVATION_NOT_FOUND);
}
return response;
}
}