/
human
/
Mini-bank
Обзор
Документация
Войти
/
human
/
Mini-bank
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
develop
clients/src/main/java/org/example/service/UserService.java
222 строки
8 KB
gbb
Fix code for demonstration
07 фев 2025, 08:30
07 фев 2025, 08:30
d08673a
Код
Авторство
О чём код?
package org.example.service; import static org.springframework.security.oauth2.core.OAuth2AccessToken.TokenType.BEARER; import jakarta.transaction.Transactional; import java.time.LocalDate; import java.util.List; import java.util.NoSuchElementException; import java.util.UUID; import lombok.RequiredArgsConstructor; import org.example.dto.account.AccountDTO; import org.example.dto.account.AccountNumberDTO; import org.example.dto.userinfo.UserInfoCreateDTO; import org.example.dto.userinfo.UserInfoDTO; import org.example.dto.userinfo.UserInfoUpdateDTO; import org.example.dto.userinfo.UserLoginDTO; import org.example.entity.UserInfo; import org.example.repository.UserRepository; import org.example.service.account.AccountClient; import org.example.service.security.AuthorizationService; import org.springframework.security.oauth2.jwt.Jwt; import org.springframework.stereotype.Service; @Service @RequiredArgsConstructor public class UserService { private final UserRepository userRepository; private final UserInfoMapping userInfoMapping; private final AuthorizationService authorizationService; // private final AccountClient accountClient; private AccountClient accountClient; /** * Создание пользователя. * * @param dto - пришедшие данные пользователя * @return */ public UserInfoDTO createUser(UserInfoCreateDTO dto) { UserInfo userInfo = userInfoMapping.mapDtoToInfo(dto); checkUser(userInfo); checkBirthDate(userInfo.getBirthDate()); userInfo = save(userInfo); // Jwt token = authorizationService.login(userInfo.getId(), userInfo.getPhone(), "USER"); // System.out.println(token); // accountClient.createAccount(userInfo.getId().toString(), BEARER + token.getTokenValue()); // accountClient.createAccount(userInfo.getId().toString()); return userInfoMapping.mapInfoToDto(userInfo); } public UserInfoDTO deleteInfo(UUID userId, Jwt token) { UserInfo user = findUser(userId); List<AccountDTO> accounts = accountClient.getAccounts(userId.toString(), BEARER + token.getTokenValue()); List<AccountDTO> deposits = accountClient.getDeposits(userId.toString(), BEARER + token.getTokenValue()); for (AccountDTO account : accounts) { accountClient.deleteAccount(new AccountNumberDTO(account.getNumberAccount()), userId.toString(), BEARER + token.getTokenValue()); } for (AccountDTO deposit : deposits) { accountClient.deleteAccount(new AccountNumberDTO(deposit.getNumberAccount()), userId.toString(), BEARER + token.getTokenValue()); } delete(user); return userInfoMapping.mapInfoToDto(user); } /** * Обновление информации о пользователе. * * @param userId - id пользователя * @param dto - информация о пользователе * @return - информация о пользователе */ public UserInfoDTO updateUserInfo(UUID userId, UserInfoUpdateDTO dto) { UserInfo userInfo = findUser(userId); userInfoMapping.mapDtoToInfo(userInfo, dto); checkPhone(userInfo.getPhone()); checkEmail(userInfo.getEmail()); userInfo = save(userInfo); return userInfoMapping.mapInfoToDto(userInfo); } /** * Получение информации о пользователе по id. * * @param userId - id пользователя * @return пользователь */ public UserInfoDTO getUserInfo(UUID userId) { UserInfo user = findUser(userId); return userInfoMapping.mapInfoToDto(user); } /** * Получение информации о пользователе по username. * * @param username - username пользователя * @return пользователь */ public UserLoginDTO getUserInfo(String username) { UserInfo user = findUser(username); return userInfoMapping.mapInfoToLoginDTO(user); } /** * Проверка телефона. * * @param phone - телефон */ public void checkPhone(String phone) { if (!phone.startsWith("+")) { throw new IllegalArgumentException("Введенный телефон должен начинаться с символа + "); } } /** * Проверка email. * * @param email - email */ public void checkEmail(String email) { if (!email.matches("^[\\w-\\.]+@([\\w-]+\\.)+[\\w-]{2,4}$")) { throw new IllegalArgumentException("Email не валиден"); } } /** * Проверка даты рождения. * * @param birthDate - дата рождения */ public void checkBirthDate(LocalDate birthDate) { if (birthDate.isAfter(LocalDate.now())) { throw new IllegalArgumentException("Дата рождения не может быть больше, чем текущая дата"); } } /** * Поиск пользователя по id. * * @param userId - id пользователя * @return пользователь */ private UserInfo findUser(UUID userId) { return userRepository.findById(userId).orElseThrow(() -> new NoSuchElementException( String.format("Пользователь с id %1$s не существует.", userId))); } /** * Поиск пользователя по id. * * @param username - id пользователя * @return пользователь */ private UserInfo findUser(String username) { return userRepository.findByUsername(username).orElseThrow(() -> new NoSuchElementException( String.format("Пользователь с id %1$s не существует.", username))); } /** * Сохранение информации о пользователе в базу данных. * * @param user - пользователь * @return пользователь */ @Transactional public UserInfo save(UserInfo user) { return userRepository.saveAndFlush(user); } /** * Удаление пользователя. * * @param user - пользователь */ @Transactional public void delete(UserInfo user) { userRepository.delete(user); } /** * Проверка пользователя на существование. * * @param user - пользователь */ private void checkUser(UserInfo user) { checkPhone(user.getPhone()); checkEmail(user.getEmail()); if ((user.getId() == null && userRepository.existsByEmail(user.getEmail())) || (userRepository.existsByEmailAndIdNot(user.getEmail(), user.getId()))) { throw new IllegalArgumentException( String.format("Пользователь с email %1$s уже существует", user.getEmail())); } if ((user.getId() == null && userRepository.existsByPhoneNormalized(user.getPhoneNormalized())) || userRepository.existsByPhoneNormalizedAndIdNot(user.getPhoneNormalized(), user.getId())) { throw new IllegalArgumentException( String.format("Пользователь с номером телефона %1$s уже существует", user.getPhone())); } } }