dev add load and download file for moderatuion user
Test Workflow / test (push) Waiting to run

This commit is contained in:
vladp
2026-04-04 17:38:20 +07:00
parent f4fc1f26a7
commit 724e72c71a
12 changed files with 279 additions and 2 deletions
@@ -35,7 +35,8 @@ public class HandlerConfig {
ViolationNotionHandler violationNotionHandler,
ComplaintEntityHandler complaintEntityHandler,
UserInfoHandler userInfoHandler,
NotificationHandler notificationHandler
NotificationHandler notificationHandler,
UserVerificationHandler userVerificationHandler
) {
Map<Integer, RequestHandler> map = new HashMap<>();
map.put(20001, login);
@@ -62,6 +63,7 @@ public class HandlerConfig {
map.put(30013, complaintEntityHandler);
map.put(30014, userInfoHandler);
map.put(30015, notificationHandler);
map.put(30016, userVerificationHandler);
return map;
}
@@ -37,6 +37,7 @@ import ru.soune.nocopy.repository.UserRepository;
import ru.soune.nocopy.service.FileSimilarityService;
import ru.soune.nocopy.service.file.*;
import ru.soune.nocopy.service.register.AuthService;
import ru.soune.nocopy.service.user.moderation.UserVerificationService;
import ru.soune.nocopy.util.FileUtil;
import java.io.File;
@@ -76,6 +77,8 @@ public class ApiController {
private final ZipService zipService;
private final UserVerificationService userVerificationService;
@PostMapping("/v{version}/data")
public ResponseEntity<?> handlePostRequest(@RequestBody BaseRequest request,
@PathVariable("version") int version) {
@@ -59,7 +59,9 @@ public enum MessageCode {
USER_NOT_ACTIVE(2, "User not active"),
NOTION_NOT_FOUND(4, "Notion not found"),
NOT_FOUND(4, "Notion not found"),
MESSAGE_IS_REQUIRED_FOR_NOTION(4, "Message is required for notion");
MESSAGE_IS_REQUIRED_FOR_NOTION(4, "Message is required for notion"),
USER_VERIFICATIONS_NOT_FOUND(4, "Verifications not found"),
ADMIN_USER_NOT_FOUND(4, "Verifications ,user or admin not found");
private final Integer code;
@@ -0,0 +1,12 @@
package ru.soune.nocopy.dto.user.moderation;
import lombok.Data;
@Data
public class UserVerificationRequest {
private String message;
private Long userId;
private Boolean verified;
private Long adminId;
private String action;
}
@@ -0,0 +1,15 @@
package ru.soune.nocopy.dto.user.moderation;
import lombok.Builder;
import lombok.Data;
import java.time.LocalDateTime;
@Data
@Builder
public class UserVerificationResponse {
private Long userVerificationId;
private Long userId;
private LocalDateTime updateTime;
private String moderationStatus;
}
@@ -0,0 +1,15 @@
package ru.soune.nocopy.entity.user;
import lombok.Getter;
@Getter
public enum ModerationStatus {
NOT_VERIFIED("not_verified") , VERIFICATION_IN_PROGRESS("verification_in_progress"),
VERIFIED("verified"), VERIFICATION_FAILED("verification_failed");
private final String name;
private ModerationStatus(String name) {
this.name = name;
}
}
@@ -106,6 +106,9 @@ public class User {
@ToString.Exclude
private UserNotActive userNotActive;
@Column(name = "verification_status")
private ModerationStatus verificationStatus = ModerationStatus.NOT_VERIFIED;
public TariffInfo getActiveTariffInfo() {
if (company != null && company.getTariffInfo() != null) {
return company.getTariffInfo();
@@ -0,0 +1,44 @@
package ru.soune.nocopy.entity.user.moderation;
import jakarta.persistence.*;
import lombok.*;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import ru.soune.nocopy.entity.user.ModerationStatus;
import java.time.LocalDateTime;
@Entity
@Table(name = "user_verification")
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Getter
@Setter
public class UserVerification {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "user_id", unique = true, nullable = false)
private Long userId;
@CreatedDate
@Column(name = "created_at", updatable = false, nullable = false)
private LocalDateTime createdAt;
@LastModifiedDate
@Column(name = "updated_at")
private LocalDateTime updatedAt;
@Column(name = "message")
private String message;
@Column(name = "admin_id")
private Long adminId;
@Enumerated(EnumType.STRING)
@Column(name = "status")
private ModerationStatus moderationStatus;
}
@@ -0,0 +1,98 @@
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.user.moderation.UserVerificationRequest;
import ru.soune.nocopy.dto.user.moderation.UserVerificationResponse;
import ru.soune.nocopy.entity.user.moderation.UserVerification;
import ru.soune.nocopy.service.user.moderation.UserVerificationService;
import java.util.Arrays;
import java.util.List;
@Component
@RequiredArgsConstructor
@Slf4j
public class UserVerificationHandler implements RequestHandler {
private final UserVerificationService userVerificationService;
private final ObjectMapper objectMapper;
@Override
public BaseResponse handle(BaseRequest request) throws Exception {
UserVerificationRequest userVerificationRequest = objectMapper.convertValue(request.getMessageBody(),
UserVerificationRequest.class);
String action = userVerificationRequest.getAction();
switch (action) {
case "get_all_verifications":
return handleVerifications(request, userVerificationRequest);
case "verified":
return handleVerified(request, userVerificationRequest);
default:
ActionResponse response = ActionResponse.builder()
.action(action)
.availableActions(Arrays.asList(
"get_all_verifications", "verified"))
.build();
return new BaseResponse(request.getMsgId(),
MessageCode.INVALID_ACTION.getCode(),
"Invalid action: " + action,
response);
}
}
private BaseResponse handleVerifications(BaseRequest request, UserVerificationRequest userVerificationRequest) throws Exception {
List<UserVerification> verifications = userVerificationService.verifications();
if (verifications.isEmpty()) {
return new BaseResponse(request.getMsgId(), MessageCode.USER_VERIFICATIONS_NOT_FOUND.getCode(),
MessageCode.USER_VERIFICATIONS_NOT_FOUND.getDescription(), null);
}
List<UserVerificationResponse> verificationResponses = verifications.stream().map(this::convertDto).toList();
return BaseResponse.builder()
.msgId(request.getMsgId())
.messageBody(verificationResponses)
.build();
}
private BaseResponse handleVerified(BaseRequest request, UserVerificationRequest userVerificationRequest) throws Exception {
UserVerification userVerification = userVerificationService.verifyUser(userVerificationRequest.getUserId(), userVerificationRequest.getMessage(),
userVerificationRequest.getAdminId(), userVerificationRequest.getVerified());
if (userVerification == null) {
return new BaseResponse(request.getMsgId(),
MessageCode.ADMIN_USER_NOT_FOUND.getCode(),
MessageCode.ADMIN_USER_NOT_FOUND.getDescription(),
null);
}
return BaseResponse.builder()
.msgId(request.getMsgId())
.messageBody(UserVerificationResponse.builder()
.userVerificationId(userVerification.getId())
.moderationStatus(userVerification.getModerationStatus().toString())
.userId(userVerification.getUserId()))
.build();
}
private UserVerificationResponse convertDto(UserVerification userVerification) {
return UserVerificationResponse.builder()
.userVerificationId(userVerification.getId())
.userId(userVerification.getUserId())
.moderationStatus(userVerification.getModerationStatus().name())
.updateTime(userVerification.getUpdatedAt())
.build();
}
}
@@ -0,0 +1,12 @@
package ru.soune.nocopy.repository;
import org.springframework.data.jpa.repository.JpaRepository;
import ru.soune.nocopy.entity.user.ModerationStatus;
import ru.soune.nocopy.entity.user.moderation.UserVerification;
import java.util.List;
public interface UserVerificationRepository extends JpaRepository<UserVerification, Long> {
List<UserVerification> findByUserId(Long userId);
List<UserVerification>findByUserIdAndModerationStatus(Long userId, ModerationStatus moderationStatus);
}
@@ -4,6 +4,7 @@ import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import ru.soune.nocopy.entity.file.moderation.ModerationPassportFile;
import ru.soune.nocopy.repository.ModerationFileRepository;
import ru.soune.nocopy.service.user.moderation.UserVerificationService;
import java.util.List;
import java.util.Map;
@@ -14,6 +15,8 @@ public class ModerationFileService {
private final ModerationFileRepository moderationFileRepository;
private final UserVerificationService userVerificationService;
public void addFiles(Long userId, Map<Integer, String> files) {
List<ModerationPassportFile> moderationFileRepositoryByStatus =
moderationFileRepository.findByStatus(ModerationFileStatus.ACTIVE.getName());
@@ -33,6 +36,8 @@ public class ModerationFileService {
moderationFileRepository.save(moderationFile);
}
userVerificationService.initUserVerification(userId);
}
public List<ModerationPassportFile> getActiveFiles() {
@@ -0,0 +1,66 @@
package ru.soune.nocopy.service.user.moderation;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import ru.soune.nocopy.entity.user.ModerationStatus;
import ru.soune.nocopy.entity.user.User;
import ru.soune.nocopy.entity.user.moderation.UserVerification;
import ru.soune.nocopy.repository.UserRepository;
import ru.soune.nocopy.repository.UserVerificationRepository;
import java.util.List;
@Service
@RequiredArgsConstructor
public class UserVerificationService {
private final UserRepository userRepository;
private final UserVerificationRepository userVerificationRepository;
public void initUserVerification(Long userId) {
User user = userRepository.findById(userId).orElse(null);
if (user == null) return;
UserVerification userVerification = UserVerification.builder()
.moderationStatus(ModerationStatus.VERIFICATION_IN_PROGRESS)
.build();
userVerificationRepository.save(userVerification);
user.setVerificationStatus(ModerationStatus.VERIFICATION_IN_PROGRESS);
userRepository.save(user);
}
public UserVerification verifyUser(Long userId, String message, Long adminId, boolean verified) {
User user = userRepository.findById(userId).orElse(null);
if (user == null) return null;
UserVerification userVerification = userVerificationRepository.findById(userId).orElse(null);
if (userVerification == null) return null;
ModerationStatus moderationStatus = verified ? ModerationStatus.VERIFIED: ModerationStatus.VERIFICATION_FAILED;
userVerification.setModerationStatus(moderationStatus);
if (message != null) userVerification.setMessage(message);
userVerification.setAdminId(adminId);
UserVerification save = userVerificationRepository.save(userVerification);
user.setVerificationStatus(moderationStatus);
userRepository.save(user);
return save;
}
public List<UserVerification> verifications() {
return userVerificationRepository.findAll();
}
}