Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -45,7 +46,7 @@ public class AuthenticationController {
}
)
@PostMapping("/registration")
UserResponseDto registerUser(
UserRegistrationResponseDto registerUser(
@RequestBody @Valid UserRegistrationRequestDto requestDto
) {
return userService.registerUser(requestDto);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.videogamescatalogue.backend.dto.internal.user;

public record UserRegistrationResponseDto(
Long id,
String profileName,
String about,
String location,
String token
) {
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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);
}
Original file line number Diff line number Diff line change
Expand Up @@ -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
);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand All @@ -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
Expand All @@ -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());

Expand All @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand All @@ -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";
Expand Down Expand Up @@ -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))
Expand All @@ -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);
Expand Down