diff --git a/server/src/main/java/com/ticketing/server/user/service/UserServiceImpl.java b/server/src/main/java/com/ticketing/server/user/service/UserServiceImpl.java index a10d6d3..18a2092 100644 --- a/server/src/main/java/com/ticketing/server/user/service/UserServiceImpl.java +++ b/server/src/main/java/com/ticketing/server/user/service/UserServiceImpl.java @@ -1,9 +1,47 @@ package com.ticketing.server.user.service; +import com.ticketing.server.user.domain.User; +import com.ticketing.server.user.domain.UserGrade; +import com.ticketing.server.user.domain.repository.UserRepository; +import com.ticketing.server.user.exception.DuplicateEmailException; +import com.ticketing.server.user.service.dto.SignUp; import com.ticketing.server.user.service.interfaces.UserService; +import java.util.Optional; +import javax.validation.Valid; +import lombok.RequiredArgsConstructor; +import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.validation.annotation.Validated; @Service +@RequiredArgsConstructor +@Transactional(readOnly = true) +@Validated public class UserServiceImpl implements UserService { + private final PasswordEncoder passwordEncoder; + private final UserRepository userRepository; + + @Transactional + public User register(@Valid SignUp signUpDto) { + validateEmail(signUpDto.getEmail()); + + User user = new User(signUpDto.getName(), + signUpDto.getEmail(), + signUpDto.encodePassword(passwordEncoder), + UserGrade.GUEST, + signUpDto.getPhone()); + + return userRepository.save(user); + } + + private void validateEmail(String email) { + Optional user = userRepository.findByEmail(email); + + if (user.isPresent()) { + throw new DuplicateEmailException(email); + } + } + } diff --git a/server/src/main/java/com/ticketing/server/user/service/interfaces/UserService.java b/server/src/main/java/com/ticketing/server/user/service/interfaces/UserService.java index a5e676e..fd50c79 100644 --- a/server/src/main/java/com/ticketing/server/user/service/interfaces/UserService.java +++ b/server/src/main/java/com/ticketing/server/user/service/interfaces/UserService.java @@ -1,5 +1,10 @@ package com.ticketing.server.user.service.interfaces; +import com.ticketing.server.user.domain.User; +import com.ticketing.server.user.service.dto.SignUp; + public interface UserService { + User register(SignUp signUpDto); + }