From 646d6fa11dfa7487c5d880a00f58893db1cb9660 Mon Sep 17 00:00:00 2001 From: backdev-1 Date: Tue, 26 May 2026 14:47:56 +0700 Subject: [PATCH] dev add complaint all info with pagination --- .../nocopy/dto/file/FileEntityRequest.java | 3 + .../dto/file/ModerationActionRequest.java | 2 +- .../nocopy/handler/FileEntityHandler.java | 71 -------- .../handler/FileInteranlInfoHandler.java | 3 +- .../handler/FileInternalControlHandler.java | 162 ++++++++++++++++++ 5 files changed, 167 insertions(+), 74 deletions(-) create mode 100644 src/main/java/ru/soune/nocopy/handler/FileInternalControlHandler.java diff --git a/src/main/java/ru/soune/nocopy/dto/file/FileEntityRequest.java b/src/main/java/ru/soune/nocopy/dto/file/FileEntityRequest.java index 7231e63..3a4b307 100644 --- a/src/main/java/ru/soune/nocopy/dto/file/FileEntityRequest.java +++ b/src/main/java/ru/soune/nocopy/dto/file/FileEntityRequest.java @@ -81,4 +81,7 @@ public class FileEntityRequest { @JsonProperty("permissions") private Map permissions; + + @JsonProperty("admin_id") + private Long adminId; } diff --git a/src/main/java/ru/soune/nocopy/dto/file/ModerationActionRequest.java b/src/main/java/ru/soune/nocopy/dto/file/ModerationActionRequest.java index 58a227c..9e1471a 100644 --- a/src/main/java/ru/soune/nocopy/dto/file/ModerationActionRequest.java +++ b/src/main/java/ru/soune/nocopy/dto/file/ModerationActionRequest.java @@ -10,7 +10,7 @@ public class ModerationActionRequest { private String fileId; private FileStatus newStatus; private String comment; - private String token; + private Long adminId; } diff --git a/src/main/java/ru/soune/nocopy/handler/FileEntityHandler.java b/src/main/java/ru/soune/nocopy/handler/FileEntityHandler.java index fb1a60c..265a43b 100644 --- a/src/main/java/ru/soune/nocopy/handler/FileEntityHandler.java +++ b/src/main/java/ru/soune/nocopy/handler/FileEntityHandler.java @@ -86,16 +86,10 @@ public class FileEntityHandler implements RequestHandler { return handleProtectFile(request, fileRequest); case "delete_file": return handleDeleteFile(request, fileRequest); - case "change_file_status": - return handleChangeStatus(request, fileRequest); case "delete_files": return handleDeleteFiles(request, fileRequest); - case "moderate_file": - return handleModerateFile(request, fileRequest); case "submit_appeal": return handleSubmitAppeal(request, fileRequest); - case "review_appeal": - return handleReviewAppeal(request, fileRequest); case "user_appeals": return handleGetUserAppeals(request, fileRequest); case "change_permission": @@ -274,25 +268,6 @@ public class FileEntityHandler implements RequestHandler { } } - private BaseResponse handleChangeStatus(BaseRequest request, FileEntityRequest fileRequest) { - FileStatus newStatus = fileRequest.getFileStatus(); - String fileId = fileRequest.getFileId(); - - try { - fileEntityService.changeFileStatus(newStatus ,fileRequest.getFileId()); - } catch (FileEntityNotFoundException e) { - return new BaseResponse(request.getMsgId(), - MessageCode.FILE_NOT_FOUND.getCode(), - MessageCode.FILE_NOT_FOUND.getDescription(), - FileEntityResponse.builder().id(fileId).build()); - } - - return new BaseResponse(request.getMsgId(), - MessageCode.SUCCESS.getCode(), - MessageCode.SUCCESS.getDescription(), - Map.of("file_status", newStatus, "file_id", fileId)); - } - private BaseResponse handleSearchFiles(BaseRequest request, FileEntityRequest fileRequest) { try { Long userId = authService.useUserAuthToken(fileRequest.getToken()); @@ -816,52 +791,6 @@ public class FileEntityHandler implements RequestHandler { } } - private BaseResponse handleReviewAppeal(BaseRequest request, FileEntityRequest fileRequest) { - try { - // TODO -// Long moderatorId = authService.useAdminAuthToken(fileRequest.getToken()); - - String appealId = fileRequest.getAppealId(); - Boolean approve = fileRequest.getApprove(); - String comment = fileRequest.getComment(); - - if (appealId == null || approve == null) { - return new BaseResponse(request.getMsgId(), - MessageCode.INVALID_FIELD.getCode(), - "appealId and approve are required", - null); - } - //TODO - moderationService.reviewAppeal(appealId, approve, comment, 0L); - - return new BaseResponse(request.getMsgId(), - MessageCode.SUCCESS.getCode(), - "Appeal reviewed successfully", - Map.of( - "appealId", appealId, - "approved", approve, - "comment", comment - )); - - } catch (SecurityException e) { - return new BaseResponse(request.getMsgId(), - MessageCode.ACCESS_DENIED.getCode(), - "Admin access required", - null); - } catch (IllegalStateException e) { - return new BaseResponse(request.getMsgId(), - MessageCode.INVALID_FIELD.getCode(), - e.getMessage(), - null); - } catch (Exception e) { - log.error("Error reviewing appeal", e); - return new BaseResponse(request.getMsgId(), - MessageCode.INVALID_FIELD.getCode(), - "Failed to review appeal: " + e.getMessage(), - null); - } - } - private BaseResponse handleGetUserAppeals(BaseRequest request, FileEntityRequest fileRequest) { try { Long userId = authService.useUserAuthToken(fileRequest.getToken()); diff --git a/src/main/java/ru/soune/nocopy/handler/FileInteranlInfoHandler.java b/src/main/java/ru/soune/nocopy/handler/FileInteranlInfoHandler.java index 81f2b43..63951b9 100644 --- a/src/main/java/ru/soune/nocopy/handler/FileInteranlInfoHandler.java +++ b/src/main/java/ru/soune/nocopy/handler/FileInteranlInfoHandler.java @@ -45,8 +45,7 @@ public class FileInteranlInfoHandler implements RequestHandler { default: ActionResponse response = ActionResponse.builder() .action(action) - .availableActions(Arrays.asList( - "files_for_moderation")) + .availableActions(Arrays.asList("files_for_moderation", "all_appeals")) .build(); return new BaseResponse(request.getMsgId(), diff --git a/src/main/java/ru/soune/nocopy/handler/FileInternalControlHandler.java b/src/main/java/ru/soune/nocopy/handler/FileInternalControlHandler.java new file mode 100644 index 0000000..11cbc2f --- /dev/null +++ b/src/main/java/ru/soune/nocopy/handler/FileInternalControlHandler.java @@ -0,0 +1,162 @@ +package ru.soune.nocopy.handler; + +import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import ru.soune.nocopy.dto.BaseRequest; +import ru.soune.nocopy.dto.BaseResponse; +import ru.soune.nocopy.dto.MessageCode; +import ru.soune.nocopy.dto.file.ActionResponse; +import ru.soune.nocopy.dto.file.FileEntityRequest; +import ru.soune.nocopy.dto.file.FileEntityResponse; +import ru.soune.nocopy.dto.file.ModerationActionRequest; +import ru.soune.nocopy.entity.file.FileStatus; +import ru.soune.nocopy.exception.FileEntityNotFoundException; +import ru.soune.nocopy.service.file.FileEntityService; +import ru.soune.nocopy.service.file.moderation.ModerationService; + +import java.util.Arrays; +import java.util.Map; + +@Component +@Slf4j +@RequiredArgsConstructor +public class FileInternalControlHandler implements RequestHandler { + + private final ObjectMapper objectMapper; + + private final ModerationService moderationService; + + private final FileEntityService fileEntityService; + + @Override + public BaseResponse handle(BaseRequest request) throws Exception { + try { + FileEntityRequest fileRequest = objectMapper.convertValue( + request.getMessageBody(), FileEntityRequest.class); + + String action = fileRequest.getAction(); + switch (action) { + case "moderate_file": + return handleModerateFile(request, fileRequest); + case "review_appeal": + return handleReviewAppeal(request, fileRequest); + case "change_file_status": + return handleChangeStatus(request, fileRequest); + default: + ActionResponse response = ActionResponse.builder() + .action(action) + .availableActions(Arrays.asList( + "moderate_file", "change_file_status", "review_appeal")) + .build(); + + return new BaseResponse(request.getMsgId(), + MessageCode.INVALID_ACTION.getCode(), + "Invalid action: " + action, + response); + + } + } catch (Exception e) { + log.error("Error in FileEntityHandler", e); + return new BaseResponse(request.getMsgId(), + MessageCode.FILE_UPLOAD_ERROR.getCode(), + "Handler error: " + e.getMessage(), + null); + } + } + + private BaseResponse handleChangeStatus(BaseRequest request, FileEntityRequest fileRequest) { + FileStatus newStatus = fileRequest.getFileStatus(); + String fileId = fileRequest.getFileId(); + + try { + fileEntityService.changeFileStatus(newStatus ,fileRequest.getFileId()); + } catch (FileEntityNotFoundException e) { + return new BaseResponse(request.getMsgId(), + MessageCode.FILE_NOT_FOUND.getCode(), + MessageCode.FILE_NOT_FOUND.getDescription(), + FileEntityResponse.builder().id(fileId).build()); + } + + return new BaseResponse(request.getMsgId(), + MessageCode.SUCCESS.getCode(), + MessageCode.SUCCESS.getDescription(), + Map.of("file_status", newStatus, "file_id", fileId)); + } + + private BaseResponse handleReviewAppeal(BaseRequest request, FileEntityRequest fileRequest) { + try { + String appealId = fileRequest.getAppealId(); + Boolean approve = fileRequest.getApprove(); + String comment = fileRequest.getComment(); + + if (appealId == null || approve == null) { + return new BaseResponse(request.getMsgId(), + MessageCode.INVALID_FIELD.getCode(), + "appealId and approve are required", + null); + } + + moderationService.reviewAppeal(appealId, approve, comment, fileRequest.getAdminId()); + + return new BaseResponse(request.getMsgId(), + MessageCode.SUCCESS.getCode(), + "Appeal reviewed successfully", + Map.of( + "appealId", appealId, + "approved", approve, + "comment", comment + )); + + } catch (SecurityException e) { + return new BaseResponse(request.getMsgId(), + MessageCode.ACCESS_DENIED.getCode(), + "Admin access required", + Map.of("file_id", fileRequest.getFileId())); + } catch (IllegalStateException e) { + return new BaseResponse(request.getMsgId(), + MessageCode.INVALID_FIELD.getCode(), + e.getMessage(), + Map.of("file_id", fileRequest.getFileId())); + } catch (Exception e) { + log.error("Error reviewing appeal", e); + return new BaseResponse(request.getMsgId(), + MessageCode.INVALID_FIELD.getCode(), + "Failed to review appeal: " + e.getMessage(), + Map.of("file_id", fileRequest.getFileId())); + } + } + + private BaseResponse handleModerateFile(BaseRequest request, FileEntityRequest fileRequest) { + try { + ModerationActionRequest moderationRequest = ModerationActionRequest.builder() + .fileId(fileRequest.getFileId()) + .newStatus(fileRequest.getFileStatus()) + .comment(fileRequest.getComment()) + .build(); + + moderationService.moderateFile(moderationRequest, fileRequest.getAdminId()); + + return new BaseResponse(request.getMsgId(), + MessageCode.SUCCESS_MODERATION.getCode(), + MessageCode.SUCCESS_MODERATION.getDescription(), + Map.of("file_id", fileRequest.getFileId())); + } catch (SecurityException e) { + return new BaseResponse(request.getMsgId(), + MessageCode.ACCESS_DENIED.getCode(), + MessageCode.ACCESS_DENIED.getDescription(), + Map.of("file_id", fileRequest.getFileId())); + } catch (FileEntityNotFoundException e) { + return new BaseResponse(request.getMsgId(), + MessageCode.FILE_NOT_FOUND.getCode(), + MessageCode.FILE_NOT_FOUND.getDescription(), + Map.of("file_id", fileRequest.getFileId())); + } catch (IllegalStateException e) { + return new BaseResponse(request.getMsgId(), + MessageCode.ILLEGAL_STATE.getCode(), + MessageCode.ILLEGAL_STATE.getDescription(), + Map.of("file_id", fileRequest.getFileId())); + } + } +}