diff --git a/src/main/java/com/provedcode/user/controller/AuthenticationController.java b/src/main/java/com/provedcode/user/controller/AuthenticationController.java index 2a04c69..cba29cd 100644 --- a/src/main/java/com/provedcode/user/controller/AuthenticationController.java +++ b/src/main/java/com/provedcode/user/controller/AuthenticationController.java @@ -1,7 +1,7 @@ package com.provedcode.user.controller; import com.provedcode.user.model.dto.RegistrationDTO; -import com.provedcode.user.model.dto.SessionInfoDTO; +import com.provedcode.user.model.dto.UserInfoDTO; import com.provedcode.user.service.AuthenticationService; import jakarta.validation.Valid; import lombok.AllArgsConstructor; @@ -18,13 +18,13 @@ public class AuthenticationController { AuthenticationService authenticationService; @PostMapping("/login") - SessionInfoDTO login(Authentication authentication) { + UserInfoDTO login(Authentication authentication) { return authenticationService.login(authentication.getName(), authentication.getAuthorities()); } @PostMapping("/register") @ResponseStatus(HttpStatus.CREATED) - SessionInfoDTO register(@RequestBody @Valid RegistrationDTO user) { + UserInfoDTO register(@RequestBody @Valid RegistrationDTO user) { return authenticationService.register(user); } diff --git a/src/main/java/com/provedcode/user/model/dto/UserInfoDTO.java b/src/main/java/com/provedcode/user/model/dto/UserInfoDTO.java new file mode 100644 index 0000000..4b2a1f1 --- /dev/null +++ b/src/main/java/com/provedcode/user/model/dto/UserInfoDTO.java @@ -0,0 +1,15 @@ +package com.provedcode.user.model.dto; + +import lombok.Builder; + +@Builder +public record UserInfoDTO( + String token, + Long id, + String login, + String firstName, + String lastName, + String image + +) { +} diff --git a/src/main/java/com/provedcode/user/service/AuthenticationService.java b/src/main/java/com/provedcode/user/service/AuthenticationService.java index 743015d..7814ac8 100644 --- a/src/main/java/com/provedcode/user/service/AuthenticationService.java +++ b/src/main/java/com/provedcode/user/service/AuthenticationService.java @@ -1,12 +1,12 @@ package com.provedcode.user.service; import com.provedcode.user.model.dto.RegistrationDTO; -import com.provedcode.user.model.dto.SessionInfoDTO; +import com.provedcode.user.model.dto.UserInfoDTO; import org.springframework.security.core.GrantedAuthority; import java.util.Collection; public interface AuthenticationService { - SessionInfoDTO login(String name, Collection authorities); - SessionInfoDTO register(RegistrationDTO user); + UserInfoDTO login(String name, Collection authorities); + UserInfoDTO register(RegistrationDTO user); } diff --git a/src/main/java/com/provedcode/user/service/impl/AuthenticationServiceImpl.java b/src/main/java/com/provedcode/user/service/impl/AuthenticationServiceImpl.java index 8911bb6..654a377 100644 --- a/src/main/java/com/provedcode/user/service/impl/AuthenticationServiceImpl.java +++ b/src/main/java/com/provedcode/user/service/impl/AuthenticationServiceImpl.java @@ -4,7 +4,7 @@ import com.provedcode.talent.repo.TalentRepository; import com.provedcode.user.model.Role; import com.provedcode.user.model.dto.RegistrationDTO; -import com.provedcode.user.model.dto.SessionInfoDTO; +import com.provedcode.user.model.dto.UserInfoDTO; import com.provedcode.user.model.entity.Authority; import com.provedcode.user.model.entity.UserInfo; import com.provedcode.user.repo.AuthorityRepository; @@ -24,10 +24,12 @@ import java.time.Instant; import java.util.Collection; +import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; import static java.time.temporal.ChronoUnit.MINUTES; +import static org.springframework.http.HttpStatus.NOT_FOUND; @Service @AllArgsConstructor @@ -40,28 +42,46 @@ public class AuthenticationServiceImpl implements AuthenticationService { PasswordEncoder passwordEncoder; @Transactional - public SessionInfoDTO login(String name, Collection authorities) { - return new SessionInfoDTO("User {%s} log-in".formatted(name), generateJWTToken(name, authorities)); + public UserInfoDTO login(String name, Collection authorities) { + Optional id = userInfoRepository.findByLogin(name).map(userInfo -> userInfo.getTalentId()); + if (id.isEmpty()) { + throw new ResponseStatusException(NOT_FOUND, String.format("talent with id = %d not found", id)); + } + + Optional userInfo = userInfoRepository.findByLogin(name); + if (userInfo.isEmpty()) { + throw new ResponseStatusException(NOT_FOUND, String.format("talent with name = %s not found", name)); + } + Optional talent = talentEntityRepository.findById(userInfo.get().getTalentId()); + + return UserInfoDTO.builder() + .token(generateJWTToken(name, authorities)) + .id(talent.get().getId()) + .login(userInfo.get().getLogin()) + .firstName(talent.get().getFirstName()) + .lastName(talent.get().getLastName()) + .image(talent.get().getImage()) + .build(); } @Transactional - public SessionInfoDTO register(RegistrationDTO user) { + public UserInfoDTO register(RegistrationDTO user) { if (userInfoRepository.existsByLogin(user.login())) { throw new ResponseStatusException(HttpStatus.CONFLICT, - String.format("user with login = {%s} already exists", user.login())); + String.format("user with login = {%s} already exists", user.login())); } Talent talent = Talent.builder() - .firstName(user.firstName()) - .lastName(user.lastName()) - .specialization(user.specialization()) - .build(); + .firstName(user.firstName()) + .lastName(user.lastName()) + .specialization(user.specialization()) + .build(); talentEntityRepository.save(talent); UserInfo userInfo = UserInfo.builder() - .talentId(talent.getId()) - .login(user.login()) - .password(passwordEncoder.encode(user.password())) - .build(); + .talentId(talent.getId()) + .login(user.login()) + .password(passwordEncoder.encode(user.password())) + .build(); userInfo.setAuthorities(Set.of(authorityRepository.findByAuthority(Role.TALENT).orElseThrow())); userInfoRepository.save(userInfo); @@ -72,8 +92,14 @@ public SessionInfoDTO register(RegistrationDTO user) { log.info("user with login {%s} was saved, his authorities: %s".formatted(userLogin, userAuthorities)); - return new SessionInfoDTO("User: {%s} was registered".formatted(userLogin), - generateJWTToken(userLogin, userAuthorities)); + return UserInfoDTO.builder() + .token(generateJWTToken(userLogin, userAuthorities)) + .id(talent.getId()) + .login(userInfo.getLogin()) + .firstName(talent.getFirstName()) + .lastName(talent.getLastName()) + .image(talent.getImage()) + .build(); } private String generateJWTToken(String name, Collection authorities) { @@ -81,13 +107,13 @@ private String generateJWTToken(String name, Collection