diff --git a/src/main/java/com/videogamescatalogue/backend/controller/AuthenticationController.java b/src/main/java/com/videogamescatalogue/backend/controller/AuthenticationController.java index f4f7c3f..b619977 100644 --- a/src/main/java/com/videogamescatalogue/backend/controller/AuthenticationController.java +++ b/src/main/java/com/videogamescatalogue/backend/controller/AuthenticationController.java @@ -3,6 +3,7 @@ import com.videogamescatalogue.backend.dto.internal.user.UserLoginRequestDto; import com.videogamescatalogue.backend.dto.internal.user.UserLoginResponseDto; import com.videogamescatalogue.backend.dto.internal.user.UserRegistrationRequestDto; +import com.videogamescatalogue.backend.dto.internal.user.UserRegistrationResponseDto; import com.videogamescatalogue.backend.dto.internal.user.UserResponseDto; import com.videogamescatalogue.backend.security.AuthenticationService; import com.videogamescatalogue.backend.service.user.UserService; @@ -45,7 +46,7 @@ public class AuthenticationController { } ) @PostMapping("/registration") - UserResponseDto registerUser( + UserRegistrationResponseDto registerUser( @RequestBody @Valid UserRegistrationRequestDto requestDto ) { return userService.registerUser(requestDto); diff --git a/src/main/java/com/videogamescatalogue/backend/dto/internal/user/UserRegistrationResponseDto.java b/src/main/java/com/videogamescatalogue/backend/dto/internal/user/UserRegistrationResponseDto.java new file mode 100644 index 0000000..4e04a2c --- /dev/null +++ b/src/main/java/com/videogamescatalogue/backend/dto/internal/user/UserRegistrationResponseDto.java @@ -0,0 +1,10 @@ +package com.videogamescatalogue.backend.dto.internal.user; + +public record UserRegistrationResponseDto( + Long id, + String profileName, + String about, + String location, + String token +) { +} diff --git a/src/main/java/com/videogamescatalogue/backend/mapper/user/UserMapper.java b/src/main/java/com/videogamescatalogue/backend/mapper/user/UserMapper.java index 60a75e0..e93d4ee 100644 --- a/src/main/java/com/videogamescatalogue/backend/mapper/user/UserMapper.java +++ b/src/main/java/com/videogamescatalogue/backend/mapper/user/UserMapper.java @@ -3,6 +3,7 @@ import com.videogamescatalogue.backend.config.MapperConfig; import com.videogamescatalogue.backend.dto.internal.user.UpdateUserRequestDto; import com.videogamescatalogue.backend.dto.internal.user.UserRegistrationRequestDto; +import com.videogamescatalogue.backend.dto.internal.user.UserRegistrationResponseDto; import com.videogamescatalogue.backend.dto.internal.user.UserResponseDto; import com.videogamescatalogue.backend.model.User; import org.mapstruct.Mapper; @@ -17,5 +18,8 @@ public interface UserMapper { @Mapping(source = "id", target = "userGames", qualifiedByName = "getStatusDtoList") UserResponseDto toDto(User user); + @Mapping(source = "token", target = "token") + UserRegistrationResponseDto toRegistrationResponseDto(User user, String token); + User updateProfileInfo(@MappingTarget User user, UpdateUserRequestDto requestDto); } diff --git a/src/main/java/com/videogamescatalogue/backend/service/user/UserService.java b/src/main/java/com/videogamescatalogue/backend/service/user/UserService.java index 73c69ac..5212084 100644 --- a/src/main/java/com/videogamescatalogue/backend/service/user/UserService.java +++ b/src/main/java/com/videogamescatalogue/backend/service/user/UserService.java @@ -3,11 +3,12 @@ import com.videogamescatalogue.backend.dto.internal.user.ChangePasswordRequestDto; import com.videogamescatalogue.backend.dto.internal.user.UpdateUserRequestDto; import com.videogamescatalogue.backend.dto.internal.user.UserRegistrationRequestDto; +import com.videogamescatalogue.backend.dto.internal.user.UserRegistrationResponseDto; import com.videogamescatalogue.backend.dto.internal.user.UserResponseDto; import com.videogamescatalogue.backend.model.User; public interface UserService { - UserResponseDto registerUser( + UserRegistrationResponseDto registerUser( UserRegistrationRequestDto requestDto ); diff --git a/src/main/java/com/videogamescatalogue/backend/service/user/UserServiceImpl.java b/src/main/java/com/videogamescatalogue/backend/service/user/UserServiceImpl.java index ae29973..cea8ec2 100644 --- a/src/main/java/com/videogamescatalogue/backend/service/user/UserServiceImpl.java +++ b/src/main/java/com/videogamescatalogue/backend/service/user/UserServiceImpl.java @@ -2,7 +2,10 @@ import com.videogamescatalogue.backend.dto.internal.user.ChangePasswordRequestDto; import com.videogamescatalogue.backend.dto.internal.user.UpdateUserRequestDto; +import com.videogamescatalogue.backend.dto.internal.user.UserLoginRequestDto; +import com.videogamescatalogue.backend.dto.internal.user.UserLoginResponseDto; import com.videogamescatalogue.backend.dto.internal.user.UserRegistrationRequestDto; +import com.videogamescatalogue.backend.dto.internal.user.UserRegistrationResponseDto; import com.videogamescatalogue.backend.dto.internal.user.UserResponseDto; import com.videogamescatalogue.backend.exception.AuthenticationRequiredException; import com.videogamescatalogue.backend.exception.EntityNotFoundException; @@ -13,7 +16,9 @@ import com.videogamescatalogue.backend.model.User; import com.videogamescatalogue.backend.repository.RoleRepository; import com.videogamescatalogue.backend.repository.UserRepository; +import com.videogamescatalogue.backend.security.AuthenticationService; import jakarta.annotation.PostConstruct; +import jakarta.transaction.Transactional; import lombok.RequiredArgsConstructor; import lombok.extern.log4j.Log4j2; import org.springframework.security.crypto.password.PasswordEncoder; @@ -27,6 +32,7 @@ public class UserServiceImpl implements UserService { private final UserMapper userMapper; private final PasswordEncoder passwordEncoder; private final RoleRepository roleRepository; + private final AuthenticationService authenticationService; private Role roleUser; @PostConstruct @@ -37,8 +43,9 @@ private void init() { ); } + @Transactional @Override - public UserResponseDto registerUser(UserRegistrationRequestDto requestDto) { + public UserRegistrationResponseDto registerUser(UserRegistrationRequestDto requestDto) { checkUserAlreadyExistsByEmail(requestDto.email()); checkProfileNameAlreadyExists(requestDto.profileName()); @@ -50,7 +57,12 @@ public UserResponseDto registerUser(UserRegistrationRequestDto requestDto) { log.info("User registered successfully, id={}",savedUser.getId()); - return userMapper.toDto(savedUser); + UserLoginResponseDto authResponseDto = authenticationService.authenticate( + new UserLoginRequestDto( + requestDto.email(), requestDto.password() + )); + + return userMapper.toRegistrationResponseDto(savedUser, authResponseDto.token()); } @Override diff --git a/src/test/java/com/videogamescatalogue/backend/service/user/UserServiceImplTest.java b/src/test/java/com/videogamescatalogue/backend/service/user/UserServiceImplTest.java index d5064f0..d689459 100644 --- a/src/test/java/com/videogamescatalogue/backend/service/user/UserServiceImplTest.java +++ b/src/test/java/com/videogamescatalogue/backend/service/user/UserServiceImplTest.java @@ -11,7 +11,10 @@ import com.videogamescatalogue.backend.dto.internal.user.ChangePasswordRequestDto; import com.videogamescatalogue.backend.dto.internal.user.UpdateUserRequestDto; +import com.videogamescatalogue.backend.dto.internal.user.UserLoginRequestDto; +import com.videogamescatalogue.backend.dto.internal.user.UserLoginResponseDto; import com.videogamescatalogue.backend.dto.internal.user.UserRegistrationRequestDto; +import com.videogamescatalogue.backend.dto.internal.user.UserRegistrationResponseDto; import com.videogamescatalogue.backend.dto.internal.user.UserResponseDto; import com.videogamescatalogue.backend.dto.internal.usergame.UserGameStatusDto; import com.videogamescatalogue.backend.exception.AuthenticationRequiredException; @@ -21,6 +24,7 @@ import com.videogamescatalogue.backend.model.Role; import com.videogamescatalogue.backend.model.User; import com.videogamescatalogue.backend.repository.UserRepository; +import com.videogamescatalogue.backend.security.AuthenticationService; import java.util.List; import java.util.Optional; import org.junit.jupiter.api.BeforeEach; @@ -39,6 +43,8 @@ class UserServiceImplTest { private UserMapper userMapper; @Mock private PasswordEncoder passwordEncoder; + @Mock + private AuthenticationService authenticationService; @InjectMocks private UserServiceImpl userService; private String email = "test@gmail.com"; @@ -128,6 +134,11 @@ void registerUser_userExists_throwException() { @Test void registerUser_validRequest_returnUserDto() { + final UserRegistrationResponseDto responseDto = new UserRegistrationResponseDto( + 1L, "profileName", "about", + "location", "token" + ); + String encodedPassword = user.getPassword(); when(userRepository.existsByEmail(email)) @@ -139,13 +150,17 @@ void registerUser_validRequest_returnUserDto() { .thenReturn(encodedPassword); when(userRepository.save(user)) .thenReturn(user); - when(userMapper.toDto(user)).thenReturn(responseDtoBob); + when(authenticationService.authenticate(new UserLoginRequestDto( + registrationRequestDto.email(), registrationRequestDto.password() + ))).thenReturn(new UserLoginResponseDto("token", 10L)); + when(userMapper.toRegistrationResponseDto(user, "token")) + .thenReturn(responseDto); - UserResponseDto actual = userService.registerUser( + UserRegistrationResponseDto actual = userService.registerUser( registrationRequestDto ); - assertEquals(responseDtoBob, actual); + assertEquals(responseDto, actual); verify(passwordEncoder).encode(registrationRequestDto.password()); verify(userRepository).existsByEmail(email);