CustomerExpiringSessionPassQueryServiceImpl.java

package com.deveagles.be15_deveagles_be.features.membership.query.service.impl;

import com.deveagles.be15_deveagles_be.common.dto.Pagination;
import com.deveagles.be15_deveagles_be.features.membership.query.dto.request.CustomerExpiringSessionPassFilterRequest;
import com.deveagles.be15_deveagles_be.features.membership.query.dto.response.CustomerExpiringSessionPassResponse;
import com.deveagles.be15_deveagles_be.features.membership.query.dto.response.CustomerExpiringSessionPassResult;
import com.deveagles.be15_deveagles_be.features.membership.query.dto.response.SessionPassInfo;
import com.deveagles.be15_deveagles_be.features.membership.query.mapper.CustomerMembershipMapper;
import com.deveagles.be15_deveagles_be.features.membership.query.service.CustomerExpiringSessionPassQueryService;
import java.util.List;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

@Service
@RequiredArgsConstructor
public class CustomerExpiringSessionPassQueryServiceImpl
    implements CustomerExpiringSessionPassQueryService {

  private final CustomerMembershipMapper customerMembershipMapper;

  @Override
  public CustomerExpiringSessionPassResult getExpiringSessionPasses(
      Long shopId, CustomerExpiringSessionPassFilterRequest request) {

    int offset = request.getOffset();

    List<CustomerExpiringSessionPassResponse> list =
        customerMembershipMapper.findExpiringSessionPassCustomers(shopId, request, offset);

    for (CustomerExpiringSessionPassResponse customer : list) {
      List<SessionPassInfo> sessionPasses =
          customerMembershipMapper.findExpiringSessionPassesByCustomerId(customer.getCustomerId());
      customer.setSessionPasses(sessionPasses);
    }

    long totalItems = customerMembershipMapper.countExpiringSessionPassCustomers(shopId, request);

    Pagination pagination =
        Pagination.builder()
            .currentPage(request.getPage())
            .totalPages((int) Math.ceil((double) totalItems / request.getSize()))
            .totalItems(totalItems)
            .build();

    return CustomerExpiringSessionPassResult.builder().list(list).pagination(pagination).build();
  }
}