From 8fd99f43ce6b01156ed9b352273b95ca0aadeed8 Mon Sep 17 00:00:00 2001 From: Art Date: Thu, 9 Sep 2021 14:43:03 +0300 Subject: [PATCH] 72.2 User service implementation - MapStruct UserMapper (#8) --- support-portal-backend/pom.xml | 40 ++++++++++++++++++- .../backend/mapper/UserMapper.java | 18 +++++++++ .../backend/service/UserServiceImpl.java | 26 +++++------- 3 files changed, 67 insertions(+), 17 deletions(-) create mode 100644 support-portal-backend/src/main/java/net/shyshkin/study/fullstack/supportportal/backend/mapper/UserMapper.java diff --git a/support-portal-backend/pom.xml b/support-portal-backend/pom.xml index ccb2063..678a978 100644 --- a/support-portal-backend/pom.xml +++ b/support-portal-backend/pom.xml @@ -15,6 +15,9 @@ Demo project for Spring Boot 11 + + 1.4.2.Final + @@ -53,7 +56,11 @@ lombok true - + + org.mapstruct + mapstruct + ${mapstruct.version} + org.apache.commons commons-lang3 @@ -112,6 +119,37 @@ + + + org.apache.maven.plugins + maven-compiler-plugin + + + + org.projectlombok + lombok-mapstruct-binding + 0.2.0 + + + org.mapstruct + mapstruct-processor + ${mapstruct.version} + + + org.projectlombok + lombok + ${lombok.version} + + + + + + -Amapstruct.defaultComponentModel=spring + + + + + diff --git a/support-portal-backend/src/main/java/net/shyshkin/study/fullstack/supportportal/backend/mapper/UserMapper.java b/support-portal-backend/src/main/java/net/shyshkin/study/fullstack/supportportal/backend/mapper/UserMapper.java new file mode 100644 index 0000000..bc3c54f --- /dev/null +++ b/support-portal-backend/src/main/java/net/shyshkin/study/fullstack/supportportal/backend/mapper/UserMapper.java @@ -0,0 +1,18 @@ +package net.shyshkin.study.fullstack.supportportal.backend.mapper; + +import net.shyshkin.study.fullstack.supportportal.backend.domain.User; +import net.shyshkin.study.fullstack.supportportal.backend.domain.dto.UserDto; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; + +import java.time.LocalDateTime; + +@Mapper(imports = {LocalDateTime.class}) +public interface UserMapper { + + @Mapping(target = "isNotLocked", source = "nonLocked") + @Mapping(target = "isActive", source = "active") + @Mapping(target = "joinDate", expression = "java( LocalDateTime.now() )") + User toEntity(UserDto userDto); + +} diff --git a/support-portal-backend/src/main/java/net/shyshkin/study/fullstack/supportportal/backend/service/UserServiceImpl.java b/support-portal-backend/src/main/java/net/shyshkin/study/fullstack/supportportal/backend/service/UserServiceImpl.java index b3c0427..aa5f236 100644 --- a/support-portal-backend/src/main/java/net/shyshkin/study/fullstack/supportportal/backend/service/UserServiceImpl.java +++ b/support-portal-backend/src/main/java/net/shyshkin/study/fullstack/supportportal/backend/service/UserServiceImpl.java @@ -11,6 +11,7 @@ import net.shyshkin.study.fullstack.supportportal.backend.exception.domain.Email import net.shyshkin.study.fullstack.supportportal.backend.exception.domain.EmailNotFoundException; import net.shyshkin.study.fullstack.supportportal.backend.exception.domain.UserNotFoundException; import net.shyshkin.study.fullstack.supportportal.backend.exception.domain.UsernameExistsException; +import net.shyshkin.study.fullstack.supportportal.backend.mapper.UserMapper; import net.shyshkin.study.fullstack.supportportal.backend.repository.UserRepository; import org.apache.commons.lang3.RandomStringUtils; import org.springframework.security.core.userdetails.UserDetails; @@ -40,6 +41,7 @@ public class UserServiceImpl implements UserService { private final PasswordEncoder passwordEncoder; private final LoginAttemptService loginAttemptService; private final EmailService emailService; + private final UserMapper userMapper; @Override @Transactional @@ -126,22 +128,14 @@ public class UserServiceImpl implements UserService { Role role = Role.valueOf(userDto.getRole()); - User newUser = User.builder() - .email(email) - .firstName(userDto.getFirstName()) - .lastName(userDto.getLastName()) - .username(username) - .password(encodedPassword) - .userId(generateUserId()) - .isActive(userDto.isActive()) - .isNotLocked(userDto.isNonLocked()) - .joinDate(LocalDateTime.now()) - .profileImageUrl(getTemporaryProfileImageUrl(username)) - .lastLoginDate(null) - .lastLoginDateDisplay(null) - .role(role.name()) - .authorities(role.getAuthorities()) - .build(); + User newUser = userMapper.toEntity(userDto); + + newUser.setPassword(encodedPassword); + newUser.setUserId(generateUserId()); + newUser.setProfileImageUrl(getTemporaryProfileImageUrl(username)); + newUser.setRole(role.name()); + newUser.setAuthorities(role.getAuthorities()); + userRepository.save(newUser); saveProfileImage(newUser, userDto.getProfileImage());