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 ru.soune.nocopy.dto.BaseRequest;
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.ViolationStatisticsResponse;
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.service.violation.ViolationService;
@@ -55,16 +58,36 @@ public class ViolationStatisticsHandler implements RequestHandler {
}
Long userId = tokenOptional.orElseThrow().getUser().getId();
ViolationStatisticsResponse statistics;
try {
statistics = violationService.getViolationStatistics(
userId,
statRequest.getFileId(),
startDate,
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();
}
ViolationStatisticsResponse statistics = violationService.getViolationStatistics(
userId,
statRequest.getFileId(),
startDate,
endDate);
return BaseResponse.builder()
.msgId(request.getMsgId())
.messageBody(statistics)
.messageCode(MessageCode.SUCCESS.getCode())
.messageDesc(MessageCode.SUCCESS.getDescription())
.build();
}
@@ -11,6 +11,7 @@ import org.springframework.transaction.annotation.Transactional;
import ru.soune.nocopy.entity.complaint.ComplaintEntity;
import ru.soune.nocopy.entity.complaint.ComplaintStatus;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Optional;
@@ -41,6 +42,8 @@ public interface ComplaintEntityRepository extends JpaRepository<ComplaintEntity
""")
Long getComplaintsWithoutLawCaseCount();
Long countComplaintEntityByEmailAndCreatedAtBetween(String email, LocalDateTime startDate, LocalDateTime endDate);
@Query("SELECT COUNT(c) FROM ComplaintEntity c WHERE c.violation.id IN :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.LawCaseType;
import java.time.LocalDateTime;
import java.util.List;
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")
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);
}
@@ -41,6 +41,13 @@ public class UserService {
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
public UserDTO updateUser(UserRequest userRequest, User currentUser) {
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.FileStatus;
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.exception.UserNotHavePermission;
import ru.soune.nocopy.repository.ComplaintEntityRepository;
import ru.soune.nocopy.repository.FileEntityRepository;
import ru.soune.nocopy.repository.LawCaseRepository;
import ru.soune.nocopy.repository.ViolationRepository;
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.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
@@ -40,6 +44,8 @@ public class ViolationService {
private final LawCaseRepository lawCaseRepository;
private final UserService userService;
public void processViolation(YandexSearchResponse.ImageResult imageResult, FileEntity file,
GlobalSearchResult result) {
String url = imageResult.getUrl();
@@ -287,16 +293,16 @@ public class ViolationService {
}
public ViolationStatisticsResponse getViolationStatistics(Long userId, String fileId,
LocalDateTime startDate, LocalDateTime endDate) {
LocalDateTime startDate, LocalDateTime endDate) throws FileNotFoundException {
List<FileEntity> userFiles;
if (fileId != null && !fileId.isEmpty()) {
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)) {
throw new IllegalArgumentException("File does not belong to user");
throw new UserNotHavePermission("File does not belong to user");
}
userFiles = List.of(file);
@@ -345,7 +351,13 @@ public class ViolationService {
Long totalComplaints = 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);
totalLawCases = lawCaseRepository.countLawCaseByViolationIds(violationIds);
}