From 6bc6592f3737aa1ddcdf16ed1bf0b4bd8bee1dae Mon Sep 17 00:00:00 2001 From: backdev-1 Date: Tue, 12 May 2026 14:22:56 +0700 Subject: [PATCH] dev add user info method by id --- .../soune/nocopy/handler/UserInfoHandler.java | 21 +++++++++ .../nocopy/service/user/UserService.java | 44 ++++++++++++++++++- 2 files changed, 63 insertions(+), 2 deletions(-) diff --git a/src/main/java/ru/soune/nocopy/handler/UserInfoHandler.java b/src/main/java/ru/soune/nocopy/handler/UserInfoHandler.java index 841d5df..a1153f8 100644 --- a/src/main/java/ru/soune/nocopy/handler/UserInfoHandler.java +++ b/src/main/java/ru/soune/nocopy/handler/UserInfoHandler.java @@ -15,6 +15,7 @@ import ru.soune.nocopy.dto.BaseResponse; import ru.soune.nocopy.dto.MessageCode; import ru.soune.nocopy.dto.user.UserAdditionalInfoBody; +import ru.soune.nocopy.dto.user.UserDTO; import ru.soune.nocopy.entity.tarif.TariffInfo; import ru.soune.nocopy.entity.user.User; import ru.soune.nocopy.entity.user.UserAdditionalInfo; @@ -23,6 +24,7 @@ import ru.soune.nocopy.entity.user.UserAdditionalInfoListAnswer; import ru.soune.nocopy.exception.UserAdditionalInfoNotFound; import ru.soune.nocopy.repository.UserRepository; import ru.soune.nocopy.service.user.AdditionalInfoService; +import ru.soune.nocopy.service.user.UserService; import ru.soune.nocopy.service.user.UserSpecifications; @@ -43,6 +45,8 @@ public class UserInfoHandler implements RequestHandler { private final UserRepository userRepository; + private final UserService userService; + @Override public BaseResponse handle(BaseRequest request) throws Exception { try { @@ -55,6 +59,7 @@ public class UserInfoHandler implements RequestHandler { case "getAll" -> getAllAdditionalInfos(request); case "getAllWithPagination" -> getAllAdditionalInfoWithPagination(request, body); case "getById" -> getAdditionalInfoById(request, body.getUserId()); + case "getIngoById" -> getInfoById(request, body.getUserId()); case "update" -> updateAdditionalInfo(request, body); case "delete" -> deleteAdditionalInfo(request, body.getUserId()); default -> new BaseResponse( @@ -210,6 +215,22 @@ public class UserInfoHandler implements RequestHandler { ); } + private BaseResponse getInfoById(BaseRequest request, Long userId) { + log.info("Getting info for user: {}", userId); + + if (userId == null) { + throw new IllegalArgumentException("User Id is required for getById action"); + } + + UserDTO userInfo = userService.getUserInfo(userId); + + return new BaseResponse( + request.getMsgId(), + MessageCode.SUCCESS.getCode(), + MessageCode.SUCCESS.getDescription(), + userInfo); + } + private BaseResponse updateAdditionalInfo(BaseRequest request, UserAdditionalInfoBody body) { log.info("Updating additional info for user: {}", body.getUserId()); diff --git a/src/main/java/ru/soune/nocopy/service/user/UserService.java b/src/main/java/ru/soune/nocopy/service/user/UserService.java index 3f01a02..ab8c917 100644 --- a/src/main/java/ru/soune/nocopy/service/user/UserService.java +++ b/src/main/java/ru/soune/nocopy/service/user/UserService.java @@ -5,13 +5,17 @@ import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import ru.soune.nocopy.dto.register.ChangePasswordRequest; +import ru.soune.nocopy.dto.tarriff.TariffInfoDTO; import ru.soune.nocopy.dto.user.UserDTO; import ru.soune.nocopy.dto.user.UserRequest; +import ru.soune.nocopy.entity.tarif.Tariff; +import ru.soune.nocopy.entity.tarif.TariffInfo; import ru.soune.nocopy.entity.user.User; import ru.soune.nocopy.exception.InvalidUserEmail; import ru.soune.nocopy.exception.NotValidationPasswordException; import ru.soune.nocopy.exception.UserNotFoundException; import ru.soune.nocopy.repository.UserRepository; +import ru.soune.nocopy.service.file.FileStatsService; import java.util.List; import java.util.Optional; @@ -24,6 +28,8 @@ public class UserService { private final PasswordEncoder passwordEncoder; + private final FileStatsService fileStatsService; + @Transactional public User changePassword(User user, ChangePasswordRequest request) { if (!passwordEncoder.matches(request.getCurrentPassword(), user.getPassword())) { @@ -47,6 +53,13 @@ public class UserService { return mapToDTO(updatedUser); } + public UserDTO getUserInfo(Long userId) { + User user = userRepository.findById(userId) + .orElseThrow(() -> new UserNotFoundException("User not found with id: " + userId)); + + return mapToDTO(user); + } + @Transactional public List getUsersCompanyEmails(String company) { return userRepository.emailsByCompany(company); @@ -86,15 +99,42 @@ public class UserService { } private UserDTO mapToDTO(User user) { + TariffInfo personalTariffInfo = user.getPersonalTariffInfo(); + Tariff tariff = personalTariffInfo.getTariff(); + Long fileOnDisk = user.canManageCompanySettings() ? + fileStatsService.calculateCompanyFileSize(user.getId()): + fileStatsService.calculateUserFileSize(user.getId()); + + Integer filesCount = user.canManageCompanySettings() ? + fileStatsService.filesCompanyCount(user.getId()): + fileStatsService.filesUserCount(user.getId()); + + TariffInfoDTO infoDTO = TariffInfoDTO.builder().tokens(personalTariffInfo.getTokens()) + .id(personalTariffInfo.getId()) + .tariffName(tariff.getName()) + .status(personalTariffInfo.getStatus().name()) + .tariffId(tariff.getId()) + .currentFileCounts(filesCount) + .maxFileCounts(tariff.getMaxFilesCount()) + .currentFileOnDisk(fileOnDisk) + .maxFileOnDisk(tariff.getDiskSize()) + .startTariff(personalTariffInfo.getStartTariff()) + .endTariff(personalTariffInfo.getEndTariff()) + .tokens(personalTariffInfo.getTokens() + personalTariffInfo.getBoughtTokens()) + .build(); + return UserDTO.builder() .fullName(user.getFullName()) - .email(user.getEmail()) .company(user.getCompanyName()) + .email(user.getEmail()) + .active(user.isActive()) .phone(user.getPhone()) .genderType(user.getGenderType()) .birthday(user.getBirthday()) - .subscriptionType(user.getSubscriptionType()) .createdAt(user.getCreatedAt()) + .subscriptionType(user.getSubscriptionType()) + .tariffInfo(infoDTO) + .verifiedStatus(user.getVerificationStatus()) .build(); } }