ReportServiceImpl.java

package com.nashtech.rookie.asset_management_0701.services.report;

import java.util.List;

import org.springframework.core.io.InputStreamResource;
import org.springframework.core.io.Resource;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;

import com.nashtech.rookie.asset_management_0701.dtos.responses.PaginationResponse;
import com.nashtech.rookie.asset_management_0701.dtos.responses.ReportResponse;
import com.nashtech.rookie.asset_management_0701.repositories.CategoryRepository;
import com.nashtech.rookie.asset_management_0701.utils.PageSortUtil;
import com.nashtech.rookie.asset_management_0701.utils.report.ReportUtil;
import lombok.RequiredArgsConstructor;

@Service
@RequiredArgsConstructor
public class ReportServiceImpl implements ReportService {
    private final ReportUtil reportUtil;
    private final CategoryRepository categoryRepository;

    @Override
    public PaginationResponse<ReportResponse> getReport (Integer page, Integer pageSize
                                                        , String sortBy, String sortDirection) {
        Sort sort = Sort.by(PageSortUtil.parseSortDirection(sortDirection), sortBy);
        Pageable pageable = PageSortUtil.createPageRequest(page, pageSize, sort);

        Page<ReportResponse> reports = categoryRepository.getReport(pageable);

        return PaginationResponse.<ReportResponse>builder()
                .page(reports.getNumber() + 1)
                .itemsPerPage(reports.getSize())
                .total(reports.getTotalElements())
                .data(reports.getContent())
                .build();
    }

    @Override
    public Resource exportReport (String sortBy, String sortDirection) {
        Sort sort = Sort.by(PageSortUtil.parseSortDirection(sortDirection), sortBy);
        Pageable pageable = Pageable.unpaged(sort);
        List<ReportResponse> reportList = categoryRepository.getReport(pageable).getContent();
        return new InputStreamResource(reportUtil.writeExcel(reportList));
    }
}