@@ -7,6 +7,7 @@ import org.springframework.web.bind.annotation.*;
|
|||||||
import ru.soune.nocopy.dto.search.GlobalSearchStartRequest;
|
import ru.soune.nocopy.dto.search.GlobalSearchStartRequest;
|
||||||
import ru.soune.nocopy.dto.search.GlobalSearchStartResponse;
|
import ru.soune.nocopy.dto.search.GlobalSearchStartResponse;
|
||||||
import ru.soune.nocopy.dto.search.GlobalSearchStatusResponse;
|
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.file.FileEntity;
|
||||||
import ru.soune.nocopy.entity.search.GlobalSearchTask;
|
import ru.soune.nocopy.entity.search.GlobalSearchTask;
|
||||||
import ru.soune.nocopy.entity.search.SearchStatus;
|
import ru.soune.nocopy.entity.search.SearchStatus;
|
||||||
@@ -114,7 +115,7 @@ public class GlobalSearchController {
|
|||||||
return ResponseEntity.ok().body(Map.of("error", errorData));
|
return ResponseEntity.ok().body(Map.of("error", errorData));
|
||||||
}
|
}
|
||||||
|
|
||||||
Map<String, Map<String, Object>> fileViolationsSummary;
|
List<FileViolationSummaryDTO> fileViolationsSummary;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
Long userId = authService.useUserAuthToken(tokenHeader);
|
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.data.domain.Sort;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import ru.soune.nocopy.dto.file.YandexSearchResponse;
|
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.dto.violation.ViolationStatisticsResponse;
|
||||||
import ru.soune.nocopy.entity.file.FileEntity;
|
import ru.soune.nocopy.entity.file.FileEntity;
|
||||||
import ru.soune.nocopy.entity.search.GlobalSearchResult;
|
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 ru.soune.nocopy.service.file.FileEntityService;
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
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<FileEntity> userFiles = fileEntityService.getAllUserFiles(userId);
|
||||||
List<Violation> violations = violationRepository.findByFileEntityIn(userFiles);
|
List<Violation> violations = violationRepository.findByFileEntityIn(userFiles);
|
||||||
|
|
||||||
Map<String, List<Violation>> violationsByFileId = violations.stream()
|
Map<String, List<Violation>> violationsByFileId = violations.stream()
|
||||||
.collect(Collectors.groupingBy(v -> v.getFileEntity().getId()));
|
.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<ViolationInfoDTO> violationDtos = fileViolations.stream()
|
||||||
List<Violation> fileViolations = entry.getValue();
|
.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<>();
|
LocalDateTime latestDate = fileViolations.stream()
|
||||||
info.put("count", fileViolations.size());
|
|
||||||
info.put("latestDate", fileViolations.stream()
|
|
||||||
.map(Violation::getCreatedDate)
|
.map(Violation::getCreatedDate)
|
||||||
.max(LocalDateTime::compareTo)
|
.max(LocalDateTime::compareTo)
|
||||||
.orElse(null));
|
.orElse(null);
|
||||||
|
|
||||||
result.put(entry.getKey(), info);
|
return FileViolationSummaryDTO.builder()
|
||||||
}
|
.fileId(file.getId())
|
||||||
|
.supportId(file.getSupportId())
|
||||||
return result;
|
.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) {
|
public List<Violation> violationsByFileId(FileEntity file) {
|
||||||
|
|||||||
Reference in New Issue
Block a user