CustomerExpiringPrepaidPassQueryServiceImpl.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.CustomerExpiringPrepaidPassFilterRequest;
import com.deveagles.be15_deveagles_be.features.membership.query.dto.response.*;
import com.deveagles.be15_deveagles_be.features.membership.query.mapper.CustomerMembershipMapper;
import com.deveagles.be15_deveagles_be.features.membership.query.service.CustomerExpiringPrepaidPassQueryService;
import java.util.List;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

@Service
@RequiredArgsConstructor
public class CustomerExpiringPrepaidPassQueryServiceImpl
    implements CustomerExpiringPrepaidPassQueryService {

  private final CustomerMembershipMapper customerMembershipMapper;

  @Override
  public CustomerExpiringPrepaidPassResult getExpiringPrepaidPasses(
      Long shopId, CustomerExpiringPrepaidPassFilterRequest request) {
    int offset = request.getOffset();

    List<CustomerExpiringPrepaidPassResponse> list =
        customerMembershipMapper.findExpiringPrepaidPassCustomers(shopId, request, offset);

    for (CustomerExpiringPrepaidPassResponse customer : list) {
      List<PrepaidPassInfo> prepaidPasses =
          customerMembershipMapper.findExpiringPrepaidPassesByCustomerId(customer.getCustomerId());
      customer.setPrepaidPasses(prepaidPasses);
    }

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

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

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