dev add method link
Test Workflow / test (push) Has been cancelled

This commit is contained in:
2026-05-04 15:15:42 +07:00
parent aacd485584
commit 25b4601bfb
3 changed files with 39 additions and 22 deletions
@@ -12,8 +12,10 @@ import ru.soune.nocopy.dto.BaseResponse;
import ru.soune.nocopy.dto.MessageCode; import ru.soune.nocopy.dto.MessageCode;
import ru.soune.nocopy.dto.complaint.ComplaintRequest; import ru.soune.nocopy.dto.complaint.ComplaintRequest;
import ru.soune.nocopy.dto.complaint.ComplaintResponse; 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.complaint.ComplaintStatus;
import ru.soune.nocopy.entity.user.User; import ru.soune.nocopy.entity.user.User;
import ru.soune.nocopy.repository.ComplaintEntityRepository;
import ru.soune.nocopy.repository.FileEntityRepository; import ru.soune.nocopy.repository.FileEntityRepository;
import ru.soune.nocopy.repository.UserRepository; import ru.soune.nocopy.repository.UserRepository;
import ru.soune.nocopy.service.complaint.ComplaintEntityService; import ru.soune.nocopy.service.complaint.ComplaintEntityService;
@@ -38,6 +40,8 @@ public class ComplaintEntityHandler implements RequestHandler {
private final FileEntityRepository fileEntityRepository; private final FileEntityRepository fileEntityRepository;
private final ComplaintEntityRepository complaintEntityRepository;
@Override @Override
public BaseResponse handle(BaseRequest request) throws Exception { public BaseResponse handle(BaseRequest request) throws Exception {
Integer msgId = request.getMsgId(); Integer msgId = request.getMsgId();
@@ -63,9 +67,9 @@ public class ComplaintEntityHandler implements RequestHandler {
case "create" -> handleCreate(msgId, complaintRequest); case "create" -> handleCreate(msgId, complaintRequest);
case "get" -> handleGet(msgId, complaintRequest, userId); case "get" -> handleGet(msgId, complaintRequest, userId);
case "get_all" -> handleGetAll(msgId, complaintRequest, emails); case "get_all" -> handleGetAll(msgId, complaintRequest, emails);
case "get_by_violation" -> handleGetByViolation(msgId, complaintRequest); case "get_by_violation" -> handleGetByViolation(msgId, complaintRequest, userId);
case "update_status" -> handleUpdateStatus(msgId, complaintRequest); case "update_status" -> handleUpdateStatus(msgId, complaintRequest, userId);
case "update" -> handleUpdate(msgId, complaintRequest); case "update" -> handleUpdate(msgId, complaintRequest, userId);
case "delete" -> handleDelete(msgId, complaintRequest); case "delete" -> handleDelete(msgId, complaintRequest);
default -> errorResponse(msgId, MessageCode.MSG_ID_NOT_FOUND.getCode(), "Valid actions: " + default -> errorResponse(msgId, MessageCode.MSG_ID_NOT_FOUND.getCode(), "Valid actions: " +
List.of("create", "get", "get_all", "get_by_violation", "update_status", 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); 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(), if (req.getViolationId() == null) return errorResponse(msgId, MessageCode.NOT_FOUND.getCode(),
"violation_id is required"); "violation_id is required");
var complaints = complaintService.getComplaintsByViolationId(req.getViolationId()); ComplaintResponse response = complaintService.getComplaintsByViolationId(req.getViolationId());
Map<String, Object> data = new HashMap<>();
data.put("content", complaints);
data.put("totalElements", complaints.size());
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.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"); 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()); 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); 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"); 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); ComplaintResponse response = complaintService.updateComplaint(req.getId(), req);
return successResponse(msgId, "Complaint updated successfully", response); return successResponse(msgId, "Complaint updated successfully", response);
@@ -19,7 +19,7 @@ public interface ComplaintEntityRepository extends JpaRepository<ComplaintEntity
Optional<ComplaintEntity> findById(Long id); Optional<ComplaintEntity> findById(Long id);
Page<ComplaintEntity> findAll(Pageable pageable); Page<ComplaintEntity> findAll(Pageable pageable);
Page<ComplaintEntity> findByStatus(ComplaintStatus status, Pageable pageable); Page<ComplaintEntity> findByStatus(ComplaintStatus status, Pageable pageable);
List<ComplaintEntity> findByViolationId(Long violationId); ComplaintEntity findByViolationId(Long violationId);
@Query("SELECT c FROM ComplaintEntity c WHERE c.violation.id = :violationId AND c.status IN :statuses") @Query("SELECT c FROM ComplaintEntity c WHERE c.violation.id = :violationId AND c.status IN :statuses")
List<ComplaintEntity> findByViolationIdAndStatuses(@Param("violationId") Long violationId, @Param("statuses") List<String> statuses); List<ComplaintEntity> findByViolationIdAndStatuses(@Param("violationId") Long violationId, @Param("statuses") List<String> statuses);
boolean existsByViolationId(Long violationId); boolean existsByViolationId(Long violationId);
@@ -24,7 +24,6 @@ import ru.soune.nocopy.service.violation.ViolationStatus;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.List; import java.util.List;
import java.util.stream.Collectors;
@Slf4j @Slf4j
@Service @Service
@@ -81,15 +80,12 @@ public class ComplaintEntityService {
} }
@Transactional(readOnly = true) @Transactional(readOnly = true)
public List<ComplaintResponse> getComplaintsByViolationId(Long violationId) { public ComplaintResponse getComplaintsByViolationId(Long violationId) {
if (!violationRepository.existsById(violationId)) { if (!violationRepository.existsById(violationId)) {
throw new ViolationNotFoundException("Violation not found: " + violationId); throw new ViolationNotFoundException("Violation not found: " + violationId);
} }
return complaintRepository.findByViolationId(violationId) return mapToResponse(complaintRepository.findByViolationId(violationId));
.stream()
.map(this::mapToResponse)
.collect(Collectors.toList());
} }
public List<ComplaintEntity> fetchComplaintByViolation(Long violationId) { public List<ComplaintEntity> fetchComplaintByViolation(Long violationId) {
@@ -101,10 +97,9 @@ public class ComplaintEntityService {
ComplaintStatus.SHOWED.name(), ComplaintStatus.IN_WORK.name())); ComplaintStatus.SHOWED.name(), ComplaintStatus.IN_WORK.name()));
} }
public ComplaintResponse updateComplaintStatus(Long id, ComplaintStatus status) { public ComplaintResponse updateComplaintStatus(ComplaintEntity complaint, ComplaintStatus status) {
ComplaintEntity complaint = complaintRepository.findById(id)
.orElseThrow(() -> new ComplaintNotFoundException("Complaint not found: " + id));
complaint.setStatus(status); complaint.setStatus(status);
return mapToResponse(complaintRepository.save(complaint)); return mapToResponse(complaintRepository.save(complaint));
} }