diff --git a/src/main/java/ru/soune/nocopy/handler/ViolationHandler.java b/src/main/java/ru/soune/nocopy/handler/ViolationHandler.java index fea6ba5..00ed8fd 100644 --- a/src/main/java/ru/soune/nocopy/handler/ViolationHandler.java +++ b/src/main/java/ru/soune/nocopy/handler/ViolationHandler.java @@ -135,23 +135,32 @@ public class ViolationHandler implements RequestHandler { .messageBody(groupedData) .build(); } else { - Page violationPage; - - if (startDate != null && endDate != null) { - violationPage = violationService.getViolationsByFilesAndDateRange( - targetFiles, startDate, endDate, - violationRequest.getPage(), violationRequest.getSize(), violationRequest.getSortDirection() - ); - } else if (violationRequest.getStatus() != null && !violationRequest.getStatus().isEmpty()) { - violationPage = violationService.getViolationsByFilesAndStatus( - targetFiles, violationRequest.getStatus(), - violationRequest.getPage(), violationRequest.getSize(), violationRequest.getSortDirection() - ); - } else { - violationPage = violationService.getViolationsByFiles( - targetFiles, violationRequest.getPage(), violationRequest.getSize(), - violationRequest.getSortDirection()); - } +// Page violationPage; +// +// if (startDate != null && endDate != null) { +// violationPage = violationService.getViolationsByFilesAndDateRange( +// targetFiles, startDate, endDate, +// violationRequest.getPage(), violationRequest.getSize(), violationRequest.getSortDirection() +// ); +// } else if (violationRequest.getStatus() != null && !violationRequest.getStatus().isEmpty()) { +// violationPage = violationService.getViolationsByFilesAndStatus( +// targetFiles, violationRequest.getStatus(), +// violationRequest.getPage(), violationRequest.getSize(), violationRequest.getSortDirection() +// ); +// } else { +// violationPage = violationService.getViolationsByFiles( +// targetFiles, violationRequest.getPage(), violationRequest.getSize(), +// violationRequest.getSortDirection()); +// } + Page violationPage = violationService.getViolationsByFilesAndFilters( + targetFiles, + startDate, + endDate, + violationRequest.getStatus(), + violationRequest.getPage(), + violationRequest.getSize(), + violationRequest.getSortDirection() + ); ViolationResponse.ViolationDto firstShowViolation = null; List content = violationPage.getContent(); diff --git a/src/main/java/ru/soune/nocopy/repository/ViolationRepository.java b/src/main/java/ru/soune/nocopy/repository/ViolationRepository.java index 0e3a8c0..5b74999 100644 --- a/src/main/java/ru/soune/nocopy/repository/ViolationRepository.java +++ b/src/main/java/ru/soune/nocopy/repository/ViolationRepository.java @@ -4,6 +4,7 @@ import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; @@ -15,7 +16,7 @@ import java.util.List; import java.util.Optional; @Repository -public interface ViolationRepository extends JpaRepository { +public interface ViolationRepository extends JpaRepository, JpaSpecificationExecutor { Page findByFileEntity(FileEntity file, Pageable pageable); diff --git a/src/main/java/ru/soune/nocopy/service/violation/ViolationService.java b/src/main/java/ru/soune/nocopy/service/violation/ViolationService.java index e5016be..a71f7d3 100644 --- a/src/main/java/ru/soune/nocopy/service/violation/ViolationService.java +++ b/src/main/java/ru/soune/nocopy/service/violation/ViolationService.java @@ -4,6 +4,7 @@ import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.codec.digest.DigestUtils; import org.springframework.data.domain.*; +import org.springframework.data.jpa.domain.Specification; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import ru.soune.nocopy.dto.file.YandexSearchResponse; @@ -71,6 +72,34 @@ public class ViolationService { } } + public Page getViolationsByFilesAndFilters( + List targetFiles, + LocalDateTime startDate, + LocalDateTime endDate, + String status, + int page, int size, String sortDirection) { + Specification spec = (root, query, cb) -> cb.conjunction(); + + if (targetFiles != null && !targetFiles.isEmpty()) { + spec = spec.and((root, query, cb) -> root.get("file").in(targetFiles)); + } + + if (startDate != null && endDate != null) { + spec = spec.and((root, query, cb) -> + cb.between(root.get("violationDate"), startDate, endDate)); + } + + if (status != null && !status.isEmpty()) { + spec = spec.and((root, query, cb) -> + cb.equal(root.get("status"), status)); + } + + Sort sort = Sort.by("ASC".equalsIgnoreCase(sortDirection) ? + Sort.Direction.ASC : Sort.Direction.DESC, "violationDate"); + + return violationRepository.findAll(spec, PageRequest.of(page, size, sort)); + } + public Violation getById(Long violationId) { return violationRepository.findById(violationId).orElse(null); }