dev add user info method by id
Test Workflow / test (push) Has been cancelled

This commit is contained in:
2026-05-12 14:22:56 +07:00
parent 4d8d3d4df2
commit 6bc6592f37
2 changed files with 63 additions and 2 deletions
@@ -15,6 +15,7 @@ import ru.soune.nocopy.dto.BaseResponse;
import ru.soune.nocopy.dto.MessageCode; import ru.soune.nocopy.dto.MessageCode;
import ru.soune.nocopy.dto.user.UserAdditionalInfoBody; 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.tarif.TariffInfo;
import ru.soune.nocopy.entity.user.User; import ru.soune.nocopy.entity.user.User;
import ru.soune.nocopy.entity.user.UserAdditionalInfo; 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.exception.UserAdditionalInfoNotFound;
import ru.soune.nocopy.repository.UserRepository; import ru.soune.nocopy.repository.UserRepository;
import ru.soune.nocopy.service.user.AdditionalInfoService; import ru.soune.nocopy.service.user.AdditionalInfoService;
import ru.soune.nocopy.service.user.UserService;
import ru.soune.nocopy.service.user.UserSpecifications; import ru.soune.nocopy.service.user.UserSpecifications;
@@ -43,6 +45,8 @@ public class UserInfoHandler implements RequestHandler {
private final UserRepository userRepository; private final UserRepository userRepository;
private final UserService userService;
@Override @Override
public BaseResponse handle(BaseRequest request) throws Exception { public BaseResponse handle(BaseRequest request) throws Exception {
try { try {
@@ -55,6 +59,7 @@ public class UserInfoHandler implements RequestHandler {
case "getAll" -> getAllAdditionalInfos(request); case "getAll" -> getAllAdditionalInfos(request);
case "getAllWithPagination" -> getAllAdditionalInfoWithPagination(request, body); case "getAllWithPagination" -> getAllAdditionalInfoWithPagination(request, body);
case "getById" -> getAdditionalInfoById(request, body.getUserId()); case "getById" -> getAdditionalInfoById(request, body.getUserId());
case "getIngoById" -> getInfoById(request, body.getUserId());
case "update" -> updateAdditionalInfo(request, body); case "update" -> updateAdditionalInfo(request, body);
case "delete" -> deleteAdditionalInfo(request, body.getUserId()); case "delete" -> deleteAdditionalInfo(request, body.getUserId());
default -> new BaseResponse( 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) { private BaseResponse updateAdditionalInfo(BaseRequest request, UserAdditionalInfoBody body) {
log.info("Updating additional info for user: {}", body.getUserId()); log.info("Updating additional info for user: {}", body.getUserId());
@@ -5,13 +5,17 @@ import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import ru.soune.nocopy.dto.register.ChangePasswordRequest; 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.UserDTO;
import ru.soune.nocopy.dto.user.UserRequest; 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.entity.user.User;
import ru.soune.nocopy.exception.InvalidUserEmail; import ru.soune.nocopy.exception.InvalidUserEmail;
import ru.soune.nocopy.exception.NotValidationPasswordException; import ru.soune.nocopy.exception.NotValidationPasswordException;
import ru.soune.nocopy.exception.UserNotFoundException; import ru.soune.nocopy.exception.UserNotFoundException;
import ru.soune.nocopy.repository.UserRepository; import ru.soune.nocopy.repository.UserRepository;
import ru.soune.nocopy.service.file.FileStatsService;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
@@ -24,6 +28,8 @@ public class UserService {
private final PasswordEncoder passwordEncoder; private final PasswordEncoder passwordEncoder;
private final FileStatsService fileStatsService;
@Transactional @Transactional
public User changePassword(User user, ChangePasswordRequest request) { public User changePassword(User user, ChangePasswordRequest request) {
if (!passwordEncoder.matches(request.getCurrentPassword(), user.getPassword())) { if (!passwordEncoder.matches(request.getCurrentPassword(), user.getPassword())) {
@@ -47,6 +53,13 @@ public class UserService {
return mapToDTO(updatedUser); 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 @Transactional
public List<String> getUsersCompanyEmails(String company) { public List<String> getUsersCompanyEmails(String company) {
return userRepository.emailsByCompany(company); return userRepository.emailsByCompany(company);
@@ -86,15 +99,42 @@ public class UserService {
} }
private UserDTO mapToDTO(User user) { 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() return UserDTO.builder()
.fullName(user.getFullName()) .fullName(user.getFullName())
.email(user.getEmail())
.company(user.getCompanyName()) .company(user.getCompanyName())
.email(user.getEmail())
.active(user.isActive())
.phone(user.getPhone()) .phone(user.getPhone())
.genderType(user.getGenderType()) .genderType(user.getGenderType())
.birthday(user.getBirthday()) .birthday(user.getBirthday())
.subscriptionType(user.getSubscriptionType())
.createdAt(user.getCreatedAt()) .createdAt(user.getCreatedAt())
.subscriptionType(user.getSubscriptionType())
.tariffInfo(infoDTO)
.verifiedStatus(user.getVerificationStatus())
.build(); .build();
} }
} }