@@ -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));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user