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.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<String, Object> 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);
@@ -19,7 +19,7 @@ public interface ComplaintEntityRepository extends JpaRepository<ComplaintEntity
Optional<ComplaintEntity> findById(Long id);
Page<ComplaintEntity> findAll(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")
List<ComplaintEntity> findByViolationIdAndStatuses(@Param("violationId") Long violationId, @Param("statuses") List<String> statuses);
boolean existsByViolationId(Long violationId);
@@ -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<ComplaintResponse> 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<ComplaintEntity> 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));
}