|
|
|
@@ -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);
|
|
|
|
|