From 5c8431195b12688fad6f532722272785f5621fc1 Mon Sep 17 00:00:00 2001 From: backdev-1 Date: Tue, 28 Apr 2026 17:11:51 +0700 Subject: [PATCH] dev fix add count --- .../controller/GlobalSearchController.java | 3 - .../service/violation/ViolationService.java | 87 +++++++++++++++---- 2 files changed, 72 insertions(+), 18 deletions(-) diff --git a/src/main/java/ru/soune/nocopy/controller/GlobalSearchController.java b/src/main/java/ru/soune/nocopy/controller/GlobalSearchController.java index 78d77a1..263676e 100644 --- a/src/main/java/ru/soune/nocopy/controller/GlobalSearchController.java +++ b/src/main/java/ru/soune/nocopy/controller/GlobalSearchController.java @@ -19,9 +19,6 @@ import ru.soune.nocopy.service.register.AuthService; import ru.soune.nocopy.service.search.GlobalSearchService; import ru.soune.nocopy.service.violation.ViolationService; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.time.format.DateTimeParseException; import java.util.*; @Slf4j 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 f378064..45572cd 100644 --- a/src/main/java/ru/soune/nocopy/service/violation/ViolationService.java +++ b/src/main/java/ru/soune/nocopy/service/violation/ViolationService.java @@ -69,29 +69,27 @@ public class ViolationService { return violationRepository.findById(violationId).orElse(null); } - public Page getFileViolationsSummary(Long userId, String fileName, String sortDirection, Integer page, - Integer size, String start, String end) { - List userFiles = fileName == null || fileName.isEmpty() ? fileEntityService.getAllUserFiles(userId) + public Page getFileViolationsSummary(Long userId, String fileName, String sortDirection, + Integer page, Integer size, String start, String end) { + List userFiles = fileName == null || fileName.isEmpty() + ? fileEntityService.getAllUserFiles(userId) : fileEntityService.getAllUserFilesWithFileName(userId, fileName, List.of(FileStatus.ACTIVE, FileStatus.BLOCKED, FileStatus.MODERATION)); - Sort sort = Sort.by(sortDirection.equalsIgnoreCase("desc") ? Sort.Direction.DESC : Sort.Direction.ASC, - "createdDate"); - Pageable pageable = PageRequest.of(page, size, sort); - Page violations; - + List allViolations; if (start == null || end == null) { - violations = violationRepository.findByFileEntityInAndStatusNot( userFiles, - ViolationStatus.NOT_OWNER_FILE.name(),pageable); + allViolations = violationRepository.findByFileEntityInAndStatusNot(userFiles, + ViolationStatus.NOT_OWNER_FILE.name()); } else { - violations = violationRepository.findByFileEntityInAndStatusNotAndCreatedDateBetween( - userFiles, ViolationStatus.NOT_OWNER_FILE.name(), parseDate(start), parseDate(end), pageable); + allViolations = violationRepository.findByFileEntityInAndCreatedDateBetweenAndStatusNot( + userFiles, parseDate(start), parseDate(end), + ViolationStatus.NOT_OWNER_FILE.name()); } - Map> violationsByFileId = violations.getContent().stream() + Map> violationsByFileId = allViolations.stream() .collect(Collectors.groupingBy(v -> v.getFileEntity().getId())); - List dtoList = violationsByFileId.entrySet().stream() + List allDTOs = violationsByFileId.entrySet().stream() .map(entry -> { List fileViolations = entry.getValue(); FileEntity file = fileViolations.get(0).getFileEntity(); @@ -115,8 +113,67 @@ public class ViolationService { }) .collect(Collectors.toList()); - return new PageImpl<>(dtoList, pageable, violations.getTotalElements()); + Comparator comparator = Comparator.comparing( + FileViolationSummaryDTO::getLatestViolationDate, + sortDirection.equalsIgnoreCase("desc") ? Comparator.reverseOrder(): Comparator.naturalOrder()); + allDTOs.sort(comparator); + + int startIdx = page * size; + int endIdx = Math.min(startIdx + size, allDTOs.size()); + List pageContent = startIdx < allDTOs.size() + ? allDTOs.subList(startIdx, endIdx) + : Collections.emptyList(); + + return new PageImpl<>(pageContent, PageRequest.of(page, size), allDTOs.size()); } +// public Page getFileViolationsSummary(Long userId, String fileName, String sortDirection, +// Integer page, Integer size, String start, String end) { +// List userFiles = fileName == null || fileName.isEmpty() ? fileEntityService.getAllUserFiles(userId) +// : fileEntityService.getAllUserFilesWithFileName(userId, fileName, +// List.of(FileStatus.ACTIVE, FileStatus.BLOCKED, FileStatus.MODERATION)); +// +// Sort sort = Sort.by(sortDirection.equalsIgnoreCase("desc") ? Sort.Direction.DESC : Sort.Direction.ASC, +// "createdDate"); +// Pageable pageable = PageRequest.of(page, size, sort); +// Page violations; +// +// if (start == null || end == null) { +// violations = violationRepository.findByFileEntityInAndStatusNot(userFiles, +// ViolationStatus.NOT_OWNER_FILE.name(),pageable); +// } else { +// violations = violationRepository.findByFileEntityInAndStatusNotAndCreatedDateBetween( +// userFiles, ViolationStatus.NOT_OWNER_FILE.name(), parseDate(start), parseDate(end), pageable); +// } +// +// Map> violationsByFileId = violations.getContent().stream() +// .collect(Collectors.groupingBy(v -> v.getFileEntity().getId())); +// +// List dtoList = violationsByFileId.entrySet().stream() +// .map(entry -> { +// List fileViolations = entry.getValue(); +// FileEntity file = fileViolations.get(0).getFileEntity(); +// +// LocalDateTime latestDate = fileViolations.stream() +// .map(Violation::getCreatedDate) +// .max(LocalDateTime::compareTo) +// .orElse(null); +// +// return FileViolationSummaryDTO.builder() +// .fileId(file.getId()) +// .supportId(file.getSupportId()) +// .fileName(file.getOriginalFileName()) +// .fileSize(file.getFileSize()) +// .mimeType(file.getMimeType()) +// .status(file.getStatus()) +// .createdAt(file.getCreatedAt()) +// .violationCount(fileViolations.size()) +// .latestViolationDate(latestDate) +// .build(); +// }) +// .collect(Collectors.toList()); +// +// return new PageImpl<>(dtoList, pageable, violations.getTotalElements()); +// } public List getFileViolationsSummary(Long userId) { List userFiles = fileEntityService.getAllUserFiles(userId);