From e5d4ec2f0747b743a3e854eff25c73d75647abab Mon Sep 17 00:00:00 2001 From: backdev-1 Date: Tue, 28 Apr 2026 16:37:00 +0700 Subject: [PATCH] dev fix add count --- .../controller/GlobalSearchController.java | 57 +++++++++---------- .../service/violation/ViolationService.java | 36 ++++++++++++ 2 files changed, 64 insertions(+), 29 deletions(-) diff --git a/src/main/java/ru/soune/nocopy/controller/GlobalSearchController.java b/src/main/java/ru/soune/nocopy/controller/GlobalSearchController.java index 888540d..78d77a1 100644 --- a/src/main/java/ru/soune/nocopy/controller/GlobalSearchController.java +++ b/src/main/java/ru/soune/nocopy/controller/GlobalSearchController.java @@ -110,37 +110,36 @@ public class GlobalSearchController { return ResponseEntity.ok(taskOptional.get()); } -// @GetMapping("/violation-summary") -// public ResponseEntity getSummary(@RequestHeader(value = "Authorization", required = false) String tokenHeader) { -// -// if (tokenHeader == null || tokenHeader.isBlank()) { -// Map errorData = new HashMap<>(); -// errorData.put("token", tokenHeader); -// -// return ResponseEntity.ok().body(Map.of("error", errorData)); -// } -// -// List fileViolationsSummary; -// -// try { -// Long userId = authService.useUserAuthToken(tokenHeader); -// -// fileViolationsSummary = -// violationService.getFileViolationsSummary(userId); -// -// if (fileViolationsSummary.isEmpty()) return ResponseEntity.ok().body("Violations summary not found"); -// } catch (NotFoundAuthToken e) { -// Map errorData = new HashMap<>(); -// errorData.put("token", tokenHeader); -// -// return ResponseEntity.ok().body(Map.of("error", errorData)); -// } -// -// return ResponseEntity.ok(fileViolationsSummary); -// } + @GetMapping("/violation-summary") + public ResponseEntity getSummary(@RequestHeader(value = "Authorization", required = false) String tokenHeader) { + + if (tokenHeader == null || tokenHeader.isBlank()) { + Map errorData = new HashMap<>(); + errorData.put("token", tokenHeader); + + return ResponseEntity.ok().body(Map.of("error", errorData)); + } + + List fileViolationsSummary; + + try { + Long userId = authService.useUserAuthToken(tokenHeader); + + fileViolationsSummary = violationService.getFileViolationsSummary(userId); + + if (fileViolationsSummary.isEmpty()) return ResponseEntity.ok().body("Violations summary not found"); + } catch (NotFoundAuthToken e) { + Map errorData = new HashMap<>(); + errorData.put("token", tokenHeader); + + return ResponseEntity.ok().body(Map.of("error", errorData)); + } + + return ResponseEntity.ok(fileViolationsSummary); + } - @PostMapping("/violation-summary") + @PostMapping("v2/violation-summary") public ResponseEntity getViolations(@RequestBody ViolationRequest request) { if (request.getToken() == null || request.getToken().isBlank()) { Map errorData = new HashMap<>(); 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 1c1ec9b..f378064 100644 --- a/src/main/java/ru/soune/nocopy/service/violation/ViolationService.java +++ b/src/main/java/ru/soune/nocopy/service/violation/ViolationService.java @@ -118,6 +118,42 @@ public class ViolationService { return new PageImpl<>(dtoList, pageable, violations.getTotalElements()); } + public List getFileViolationsSummary(Long userId) { + List userFiles = fileEntityService.getAllUserFiles(userId); + + List violations = violationRepository.findByFileEntityInAndStatusNot( userFiles, + ViolationStatus.NOT_OWNER_FILE.name()); + + Map> violationsByFileId = violations.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 dtoList; + } + @Transactional public void changeStatus(ViolationStatus status, Long violationId) { Violation violation = violationRepository.findById(violationId).orElseThrow();