@@ -7,6 +7,7 @@ import org.springframework.web.bind.annotation.*;
|
||||
import ru.soune.nocopy.dto.search.GlobalSearchStartRequest;
|
||||
import ru.soune.nocopy.dto.search.GlobalSearchStartResponse;
|
||||
import ru.soune.nocopy.dto.search.GlobalSearchStatusResponse;
|
||||
import ru.soune.nocopy.dto.violation.FileViolationSummaryDTO;
|
||||
import ru.soune.nocopy.entity.file.FileEntity;
|
||||
import ru.soune.nocopy.entity.search.GlobalSearchTask;
|
||||
import ru.soune.nocopy.entity.search.SearchStatus;
|
||||
@@ -114,7 +115,7 @@ public class GlobalSearchController {
|
||||
return ResponseEntity.ok().body(Map.of("error", errorData));
|
||||
}
|
||||
|
||||
Map<String, Map<String, Object>> fileViolationsSummary;
|
||||
List<FileViolationSummaryDTO> fileViolationsSummary;
|
||||
|
||||
try {
|
||||
Long userId = authService.useUserAuthToken(tokenHeader);
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
package ru.soune.nocopy.dto.violation;
|
||||
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import ru.soune.nocopy.entity.file.FileStatus;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
public class FileViolationSummaryDTO {
|
||||
private String fileId;
|
||||
private Integer supportId;
|
||||
private String fileName;
|
||||
private String storedFileName;
|
||||
private String filePath;
|
||||
private Long fileSize;
|
||||
private String mimeType;
|
||||
private FileStatus status;
|
||||
private LocalDateTime createdAt;
|
||||
private long violationCount;
|
||||
private LocalDateTime latestViolationDate;
|
||||
private List<ViolationInfoDTO> violations;
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package ru.soune.nocopy.dto.violation;
|
||||
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
public class ViolationInfoDTO {
|
||||
private Long violationId;
|
||||
private String url;
|
||||
private String pageUrl;
|
||||
private String host;
|
||||
private LocalDateTime createdDate;
|
||||
}
|
||||
@@ -8,6 +8,8 @@ import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.data.domain.Sort;
|
||||
import org.springframework.stereotype.Service;
|
||||
import ru.soune.nocopy.dto.file.YandexSearchResponse;
|
||||
import ru.soune.nocopy.dto.violation.FileViolationSummaryDTO;
|
||||
import ru.soune.nocopy.dto.violation.ViolationInfoDTO;
|
||||
import ru.soune.nocopy.dto.violation.ViolationStatisticsResponse;
|
||||
import ru.soune.nocopy.entity.file.FileEntity;
|
||||
import ru.soune.nocopy.entity.search.GlobalSearchResult;
|
||||
@@ -18,6 +20,7 @@ import ru.soune.nocopy.repository.ViolationRepository;
|
||||
import ru.soune.nocopy.service.file.FileEntityService;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@@ -57,29 +60,49 @@ public class ViolationService {
|
||||
}
|
||||
}
|
||||
|
||||
public Map<String, Map<String, Object>> getFileViolationsSummary(Long userId) {
|
||||
public List<FileViolationSummaryDTO> getFileViolationsSummary(Long userId) {
|
||||
List<FileEntity> userFiles = fileEntityService.getAllUserFiles(userId);
|
||||
List<Violation> violations = violationRepository.findByFileEntityIn(userFiles);
|
||||
|
||||
Map<String, List<Violation>> violationsByFileId = violations.stream()
|
||||
.collect(Collectors.groupingBy(v -> v.getFileEntity().getId()));
|
||||
|
||||
Map<String, Map<String, Object>> result = new HashMap<>();
|
||||
return userFiles.stream()
|
||||
.map(file -> {
|
||||
List<Violation> fileViolations = violationsByFileId.getOrDefault(file.getId(),
|
||||
Collections.emptyList());
|
||||
|
||||
for (Map.Entry<String, List<Violation>> entry : violationsByFileId.entrySet()) {
|
||||
List<Violation> fileViolations = entry.getValue();
|
||||
List<ViolationInfoDTO> violationDtos = fileViolations.stream()
|
||||
.map(v -> ViolationInfoDTO.builder()
|
||||
.violationId(v.getId())
|
||||
.url(v.getUrl())
|
||||
.pageUrl(v.getPageUrl())
|
||||
.host(v.getHost())
|
||||
.createdDate(v.getCreatedDate())
|
||||
.build())
|
||||
.collect(Collectors.toList());
|
||||
|
||||
Map<String, Object> info = new HashMap<>();
|
||||
info.put("count", fileViolations.size());
|
||||
info.put("latestDate", fileViolations.stream()
|
||||
.map(Violation::getCreatedDate)
|
||||
.max(LocalDateTime::compareTo)
|
||||
.orElse(null));
|
||||
LocalDateTime latestDate = fileViolations.stream()
|
||||
.map(Violation::getCreatedDate)
|
||||
.max(LocalDateTime::compareTo)
|
||||
.orElse(null);
|
||||
|
||||
result.put(entry.getKey(), info);
|
||||
}
|
||||
|
||||
return result;
|
||||
return FileViolationSummaryDTO.builder()
|
||||
.fileId(file.getId())
|
||||
.supportId(file.getSupportId())
|
||||
.fileName(file.getOriginalFileName())
|
||||
.storedFileName(file.getStoredFileName())
|
||||
.filePath(file.getFilePath())
|
||||
.fileSize(file.getFileSize())
|
||||
.mimeType(file.getMimeType())
|
||||
.status(file.getStatus())
|
||||
.createdAt(file.getCreatedAt())
|
||||
.violationCount(fileViolations.size())
|
||||
.latestViolationDate(latestDate)
|
||||
.violations(violationDtos)
|
||||
.build();
|
||||
})
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
public List<Violation> violationsByFileId(FileEntity file) {
|
||||
|
||||
Reference in New Issue
Block a user