This commit is contained in:
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user