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());