ReviewQueryService.java

package com.newbit.coffeechat.query.service;

import com.newbit.coffeechat.query.dto.request.ReviewSearchServiceRequest;
import com.newbit.coffeechat.query.dto.response.CoffeechatListResponse;
import com.newbit.coffeechat.query.dto.response.ReviewListDto;
import com.newbit.coffeechat.query.dto.response.ReviewListResponse;
import com.newbit.coffeechat.query.mapper.ReviewMapper;
import com.newbit.common.dto.Pagination;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@Service
@RequiredArgsConstructor
public class ReviewQueryService {

    private final ReviewMapper reviewMapper;

    @Transactional(readOnly = true)
    public ReviewListResponse getReviews(ReviewSearchServiceRequest reviewSearchServiceRequest) {
        List<ReviewListDto> reviews = reviewMapper.selectReviews(reviewSearchServiceRequest);
        long totalItems = reviewMapper.countReviews(reviewSearchServiceRequest);

        int page = reviewSearchServiceRequest.getPage();
        int size = reviewSearchServiceRequest.getSize();

        return ReviewListResponse.builder()
                .reviews(reviews)
                .pagination(Pagination.builder()
                        .currentPage(page)
                        .totalPage((int) Math.ceil((double) totalItems / size))
                        .totalItems(totalItems)
                        .build())
                .build();
    }
}