From 25b4601bfb44a7f24e998a1397e30db43f8f8105 Mon Sep 17 00:00:00 2001 From: backdev-1 Date: Mon, 4 May 2026 15:15:42 +0700 Subject: [PATCH] dev add method link --- .../handler/ComplaintEntityHandler.java | 46 ++++++++++++++----- .../repository/ComplaintEntityRepository.java | 2 +- .../complaint/ComplaintEntityService.java | 13 ++---- 3 files changed, 39 insertions(+), 22 deletions(-) diff --git a/src/main/java/ru/soune/nocopy/handler/ComplaintEntityHandler.java b/src/main/java/ru/soune/nocopy/handler/ComplaintEntityHandler.java index fbc54e1..88f95e9 100644 --- a/src/main/java/ru/soune/nocopy/handler/ComplaintEntityHandler.java +++ b/src/main/java/ru/soune/nocopy/handler/ComplaintEntityHandler.java @@ -12,8 +12,10 @@ import ru.soune.nocopy.dto.BaseResponse; import ru.soune.nocopy.dto.MessageCode; import ru.soune.nocopy.dto.complaint.ComplaintRequest; import ru.soune.nocopy.dto.complaint.ComplaintResponse; +import ru.soune.nocopy.entity.complaint.ComplaintEntity; import ru.soune.nocopy.entity.complaint.ComplaintStatus; import ru.soune.nocopy.entity.user.User; +import ru.soune.nocopy.repository.ComplaintEntityRepository; import ru.soune.nocopy.repository.FileEntityRepository; import ru.soune.nocopy.repository.UserRepository; import ru.soune.nocopy.service.complaint.ComplaintEntityService; @@ -38,6 +40,8 @@ public class ComplaintEntityHandler implements RequestHandler { private final FileEntityRepository fileEntityRepository; + private final ComplaintEntityRepository complaintEntityRepository; + @Override public BaseResponse handle(BaseRequest request) throws Exception { Integer msgId = request.getMsgId(); @@ -63,9 +67,9 @@ public class ComplaintEntityHandler implements RequestHandler { case "create" -> handleCreate(msgId, complaintRequest); case "get" -> handleGet(msgId, complaintRequest, userId); case "get_all" -> handleGetAll(msgId, complaintRequest, emails); - case "get_by_violation" -> handleGetByViolation(msgId, complaintRequest); - case "update_status" -> handleUpdateStatus(msgId, complaintRequest); - case "update" -> handleUpdate(msgId, complaintRequest); + case "get_by_violation" -> handleGetByViolation(msgId, complaintRequest, userId); + case "update_status" -> handleUpdateStatus(msgId, complaintRequest, userId); + case "update" -> handleUpdate(msgId, complaintRequest, userId); case "delete" -> handleDelete(msgId, complaintRequest); default -> errorResponse(msgId, MessageCode.MSG_ID_NOT_FOUND.getCode(), "Valid actions: " + List.of("create", "get", "get_all", "get_by_violation", "update_status", @@ -121,19 +125,21 @@ public class ComplaintEntityHandler implements RequestHandler { return successResponse(msgId, "Complaints retrieved successfully", data); } - private BaseResponse handleGetByViolation(Integer msgId, ComplaintRequest req) { + private BaseResponse handleGetByViolation(Integer msgId, ComplaintRequest req, Long userId) { if (req.getViolationId() == null) return errorResponse(msgId, MessageCode.NOT_FOUND.getCode(), "violation_id is required"); - var complaints = complaintService.getComplaintsByViolationId(req.getViolationId()); - Map data = new HashMap<>(); - data.put("content", complaints); - data.put("totalElements", complaints.size()); + ComplaintResponse response = complaintService.getComplaintsByViolationId(req.getViolationId()); - return successResponse(msgId, "Complaints retrieved successfully", data); + if (!Objects.equals(fileEntityRepository.findByFileId(response.getFileId()).getUserId(), userId)) { + return errorResponse(msgId, MessageCode.USER_NOT_HAD_PERMISSION.getCode(), + "User not have permission for file"); + } + + return successResponse(msgId, "Complaints retrieved successfully", response); } - private BaseResponse handleUpdateStatus(Integer msgId, ComplaintRequest req) { + private BaseResponse handleUpdateStatus(Integer msgId, ComplaintRequest req, Long userId) { if (req.getId() == null) return errorResponse(msgId, MessageCode.NOT_FOUND.getCode(), "id is required"); if (req.getStatus() == null) return errorResponse(msgId, MessageCode.NOT_FOUND.getCode(), "status is required"); @@ -145,14 +151,30 @@ public class ComplaintEntityHandler implements RequestHandler { ComplaintStatus status = ComplaintStatus.valueOf(req.getStatus().toUpperCase()); - ComplaintResponse response = complaintService.updateComplaintStatus(req.getId(), status); + ComplaintEntity complaintEntity = complaintEntityRepository.findById(req.getId()).orElse(null); + + if (complaintEntity == null || !Objects.equals( + complaintEntity.getViolation().getFileEntity().getUserId(), userId)) { + return errorResponse(msgId, MessageCode.USER_NOT_HAD_PERMISSION.getCode(), + MessageCode.USER_NOT_HAD_PERMISSION.getDescription()); + } + + ComplaintResponse response = complaintService.updateComplaintStatus(complaintEntity, status); return successResponse(msgId, "Status updated successfully", response); } - private BaseResponse handleUpdate(Integer msgId, ComplaintRequest req) { + private BaseResponse handleUpdate(Integer msgId, ComplaintRequest req, Long userId) { if (req.getId() == null) return errorResponse(msgId, MessageCode.NOT_FOUND.getCode(), "id is required"); + ComplaintEntity complaintEntity = complaintEntityRepository.findById(req.getId()).orElse(null); + + if (complaintEntity == null || !Objects.equals( + complaintEntity.getViolation().getFileEntity().getUserId(), userId)) { + return errorResponse(msgId, MessageCode.USER_NOT_HAD_PERMISSION.getCode(), + MessageCode.USER_NOT_HAD_PERMISSION.getDescription()); + } + ComplaintResponse response = complaintService.updateComplaint(req.getId(), req); return successResponse(msgId, "Complaint updated successfully", response); diff --git a/src/main/java/ru/soune/nocopy/repository/ComplaintEntityRepository.java b/src/main/java/ru/soune/nocopy/repository/ComplaintEntityRepository.java index 662e0a9..9dc6307 100644 --- a/src/main/java/ru/soune/nocopy/repository/ComplaintEntityRepository.java +++ b/src/main/java/ru/soune/nocopy/repository/ComplaintEntityRepository.java @@ -19,7 +19,7 @@ public interface ComplaintEntityRepository extends JpaRepository findById(Long id); Page findAll(Pageable pageable); Page findByStatus(ComplaintStatus status, Pageable pageable); - List findByViolationId(Long violationId); + ComplaintEntity findByViolationId(Long violationId); @Query("SELECT c FROM ComplaintEntity c WHERE c.violation.id = :violationId AND c.status IN :statuses") List findByViolationIdAndStatuses(@Param("violationId") Long violationId, @Param("statuses") List statuses); boolean existsByViolationId(Long violationId); diff --git a/src/main/java/ru/soune/nocopy/service/complaint/ComplaintEntityService.java b/src/main/java/ru/soune/nocopy/service/complaint/ComplaintEntityService.java index 8f0bed3..c768fb1 100644 --- a/src/main/java/ru/soune/nocopy/service/complaint/ComplaintEntityService.java +++ b/src/main/java/ru/soune/nocopy/service/complaint/ComplaintEntityService.java @@ -24,7 +24,6 @@ import ru.soune.nocopy.service.violation.ViolationStatus; import java.time.format.DateTimeFormatter; import java.util.List; -import java.util.stream.Collectors; @Slf4j @Service @@ -81,15 +80,12 @@ public class ComplaintEntityService { } @Transactional(readOnly = true) - public List getComplaintsByViolationId(Long violationId) { + public ComplaintResponse getComplaintsByViolationId(Long violationId) { if (!violationRepository.existsById(violationId)) { throw new ViolationNotFoundException("Violation not found: " + violationId); } - return complaintRepository.findByViolationId(violationId) - .stream() - .map(this::mapToResponse) - .collect(Collectors.toList()); + return mapToResponse(complaintRepository.findByViolationId(violationId)); } public List fetchComplaintByViolation(Long violationId) { @@ -101,10 +97,9 @@ public class ComplaintEntityService { ComplaintStatus.SHOWED.name(), ComplaintStatus.IN_WORK.name())); } - public ComplaintResponse updateComplaintStatus(Long id, ComplaintStatus status) { - ComplaintEntity complaint = complaintRepository.findById(id) - .orElseThrow(() -> new ComplaintNotFoundException("Complaint not found: " + id)); + public ComplaintResponse updateComplaintStatus(ComplaintEntity complaint, ComplaintStatus status) { complaint.setStatus(status); + return mapToResponse(complaintRepository.save(complaint)); }