dev add field locale for get info for view doc
Test Workflow / test (push) Has been cancelled

This commit is contained in:
2026-05-15 10:49:44 +07:00
parent 59e9de2684
commit 0c373acc7f
5 changed files with 61 additions and 9 deletions
@@ -6,9 +6,12 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import ru.soune.nocopy.dto.BaseRequest; import ru.soune.nocopy.dto.BaseRequest;
import ru.soune.nocopy.dto.BaseResponse; import ru.soune.nocopy.dto.BaseResponse;
import ru.soune.nocopy.dto.MessageCode;
import ru.soune.nocopy.dto.violation.ViolationStatisticsRequest; import ru.soune.nocopy.dto.violation.ViolationStatisticsRequest;
import ru.soune.nocopy.dto.violation.ViolationStatisticsResponse; import ru.soune.nocopy.dto.violation.ViolationStatisticsResponse;
import ru.soune.nocopy.entity.user.AuthToken; import ru.soune.nocopy.entity.user.AuthToken;
import ru.soune.nocopy.exception.FileEntityNotFoundException;
import ru.soune.nocopy.exception.UserNotHavePermission;
import ru.soune.nocopy.repository.AuthTokenRepository; import ru.soune.nocopy.repository.AuthTokenRepository;
import ru.soune.nocopy.service.violation.ViolationService; import ru.soune.nocopy.service.violation.ViolationService;
@@ -55,16 +58,36 @@ public class ViolationStatisticsHandler implements RequestHandler {
} }
Long userId = tokenOptional.orElseThrow().getUser().getId(); Long userId = tokenOptional.orElseThrow().getUser().getId();
ViolationStatisticsResponse statistics;
ViolationStatisticsResponse statistics = violationService.getViolationStatistics( try {
statistics = violationService.getViolationStatistics(
userId, userId,
statRequest.getFileId(), statRequest.getFileId(),
startDate, startDate,
endDate); endDate);
} catch (UserNotHavePermission e) {
return BaseResponse.builder()
.msgId(request.getMsgId())
.messageBody("userId: " + userId)
.messageCode(MessageCode.USER_NOT_HAD_PERMISSION.getCode())
.messageDesc(MessageCode.USER_NOT_HAD_PERMISSION.getDescription())
.build();
} catch (FileEntityNotFoundException e) {
return BaseResponse.builder()
.msgId(request.getMsgId())
.messageBody("fileId: " + statRequest.getFileId())
.messageDesc(MessageCode.FILE_NOT_FOUND.getDescription())
.messageCode(MessageCode.FILE_NOT_FOUND.getCode())
.build();
}
return BaseResponse.builder() return BaseResponse.builder()
.msgId(request.getMsgId()) .msgId(request.getMsgId())
.messageBody(statistics) .messageBody(statistics)
.messageCode(MessageCode.SUCCESS.getCode())
.messageDesc(MessageCode.SUCCESS.getDescription())
.build(); .build();
} }
@@ -11,6 +11,7 @@ import org.springframework.transaction.annotation.Transactional;
import ru.soune.nocopy.entity.complaint.ComplaintEntity; import ru.soune.nocopy.entity.complaint.ComplaintEntity;
import ru.soune.nocopy.entity.complaint.ComplaintStatus; import ru.soune.nocopy.entity.complaint.ComplaintStatus;
import java.time.LocalDateTime;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
@@ -41,6 +42,8 @@ public interface ComplaintEntityRepository extends JpaRepository<ComplaintEntity
""") """)
Long getComplaintsWithoutLawCaseCount(); Long getComplaintsWithoutLawCaseCount();
Long countComplaintEntityByEmailAndCreatedAtBetween(String email, LocalDateTime startDate, LocalDateTime endDate);
@Query("SELECT COUNT(c) FROM ComplaintEntity c WHERE c.violation.id IN :violations") @Query("SELECT COUNT(c) FROM ComplaintEntity c WHERE c.violation.id IN :violations")
Long countComplaintByViolations(@Param("violations") List<Long> violations); Long countComplaintByViolations(@Param("violations") List<Long> violations);
@@ -10,6 +10,7 @@ import ru.soune.nocopy.entity.complaint.LawCase;
import ru.soune.nocopy.entity.complaint.LawCasePriority; import ru.soune.nocopy.entity.complaint.LawCasePriority;
import ru.soune.nocopy.entity.complaint.LawCaseType; import ru.soune.nocopy.entity.complaint.LawCaseType;
import java.time.LocalDateTime;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
@@ -47,5 +48,11 @@ public interface LawCaseRepository extends JpaRepository<LawCase, Long> {
@Query("SELECT COUNT(l) FROM LawCase l WHERE l.violationId IN :violationIds") @Query("SELECT COUNT(l) FROM LawCase l WHERE l.violationId IN :violationIds")
Long countLawCaseByViolationIds(@Param("violationIds") List<Long> violationIds); Long countLawCaseByViolationIds(@Param("violationIds") List<Long> violationIds);
@Query("SELECT COUNT(lc) FROM LawCase lc WHERE lc.user.Id = :userId " +
"AND lc.createdAt BETWEEN :startDate AND :endDate")
Long countLawCasesByUserAndDateRange(@Param("userId") Long userId, @Param("startDate") LocalDateTime startDate,
@Param("endDate") LocalDateTime endDate);
Optional<LawCase> getLawCaseByViolationIdAndType(Long violationId, LawCaseType type); Optional<LawCase> getLawCaseByViolationIdAndType(Long violationId, LawCaseType type);
} }
@@ -41,6 +41,13 @@ public class UserService {
return userRepository.save(user); return userRepository.save(user);
} }
public String userEmailById(Long userId) {
User user = userRepository.findById(userId)
.orElseThrow(() -> new UserNotFoundException("User not found with id: " + userId));
return user.getEmail();
}
@Transactional @Transactional
public UserDTO updateUser(UserRequest userRequest, User currentUser) { public UserDTO updateUser(UserRequest userRequest, User currentUser) {
User user = userRepository.findById(currentUser.getId()) User user = userRepository.findById(currentUser.getId())
@@ -12,13 +12,17 @@ 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.file.FileStatus; import ru.soune.nocopy.entity.file.FileStatus;
import ru.soune.nocopy.entity.search.GlobalSearchResult; import ru.soune.nocopy.entity.search.GlobalSearchResult;
import ru.soune.nocopy.entity.user.User;
import ru.soune.nocopy.entity.violation.Violation; import ru.soune.nocopy.entity.violation.Violation;
import ru.soune.nocopy.exception.UserNotHavePermission;
import ru.soune.nocopy.repository.ComplaintEntityRepository; import ru.soune.nocopy.repository.ComplaintEntityRepository;
import ru.soune.nocopy.repository.FileEntityRepository; import ru.soune.nocopy.repository.FileEntityRepository;
import ru.soune.nocopy.repository.LawCaseRepository; import ru.soune.nocopy.repository.LawCaseRepository;
import ru.soune.nocopy.repository.ViolationRepository; import ru.soune.nocopy.repository.ViolationRepository;
import ru.soune.nocopy.service.file.FileEntityService; import ru.soune.nocopy.service.file.FileEntityService;
import ru.soune.nocopy.service.user.UserService;
import java.io.FileNotFoundException;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException; import java.time.format.DateTimeParseException;
@@ -40,6 +44,8 @@ public class ViolationService {
private final LawCaseRepository lawCaseRepository; private final LawCaseRepository lawCaseRepository;
private final UserService userService;
public void processViolation(YandexSearchResponse.ImageResult imageResult, FileEntity file, public void processViolation(YandexSearchResponse.ImageResult imageResult, FileEntity file,
GlobalSearchResult result) { GlobalSearchResult result) {
String url = imageResult.getUrl(); String url = imageResult.getUrl();
@@ -287,16 +293,16 @@ public class ViolationService {
} }
public ViolationStatisticsResponse getViolationStatistics(Long userId, String fileId, public ViolationStatisticsResponse getViolationStatistics(Long userId, String fileId,
LocalDateTime startDate, LocalDateTime endDate) { LocalDateTime startDate, LocalDateTime endDate) throws FileNotFoundException {
List<FileEntity> userFiles; List<FileEntity> userFiles;
if (fileId != null && !fileId.isEmpty()) { if (fileId != null && !fileId.isEmpty()) {
FileEntity file = fileEntityRepository.findById(fileId) FileEntity file = fileEntityRepository.findById(fileId)
.orElseThrow(() -> new IllegalArgumentException("File not found with id: " + fileId)); .orElseThrow(() -> new FileNotFoundException("File not found with id: " + fileId));
if (!file.getUserId().equals(userId)) { if (!file.getUserId().equals(userId)) {
throw new IllegalArgumentException("File does not belong to user"); throw new UserNotHavePermission("File does not belong to user");
} }
userFiles = List.of(file); userFiles = List.of(file);
@@ -345,7 +351,13 @@ public class ViolationService {
Long totalComplaints = 0L; Long totalComplaints = 0L;
Long totalLawCases = 0L; Long totalLawCases = 0L;
if (!violationIds.isEmpty()) { if (startDate != null && endDate != null) {
totalLawCases = lawCaseRepository.countLawCasesByUserAndDateRange(userId, startDate, endDate);
totalComplaints = complaintRepository.countComplaintEntityByEmailAndCreatedAtBetween(
userService.userEmailById(userId),
startDate,
endDate);
} else if (!violationIds.isEmpty()) {
totalComplaints = complaintRepository.countComplaintByViolations(violationIds); totalComplaints = complaintRepository.countComplaintByViolations(violationIds);
totalLawCases = lawCaseRepository.countLawCaseByViolationIds(violationIds); totalLawCases = lawCaseRepository.countLawCaseByViolationIds(violationIds);
} }