diff --git a/refrigerator/src/main/java/moja/refrigerator/config/SecurityConfig.java b/refrigerator/src/main/java/moja/refrigerator/config/SecurityConfig.java index 2970b11..948026c 100644 --- a/refrigerator/src/main/java/moja/refrigerator/config/SecurityConfig.java +++ b/refrigerator/src/main/java/moja/refrigerator/config/SecurityConfig.java @@ -34,9 +34,9 @@ public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { // URL 별 접근 권한 설정 http .authorizeHttpRequests((auth) -> auth - .requestMatchers("/login", "/", "/join", "/ingredient").permitAll() // 이 경로들은 모두 접근 가능 - .requestMatchers("/admin").hasRole("ADMIN") // admin 경로는 ADMIN 역할을 가진 사용자만 - .anyRequest().authenticated()); // 나머지는 인증된 사용자만 + .requestMatchers("/**").permitAll() // 이 경로들은 모두 접근 가능 + .requestMatchers("/admin").hasRole("ADMIN") // admin 경로는 ADMIN 역할을 가진 사용자만 + .anyRequest().authenticated()); // 나머지는 인증된 사용자만 // 세션 관리 설정 http diff --git a/refrigerator/src/main/java/moja/refrigerator/controller/user/UserController.java b/refrigerator/src/main/java/moja/refrigerator/controller/user/UserController.java index bfb9c12..324055a 100644 --- a/refrigerator/src/main/java/moja/refrigerator/controller/user/UserController.java +++ b/refrigerator/src/main/java/moja/refrigerator/controller/user/UserController.java @@ -1,7 +1,10 @@ package moja.refrigerator.controller.user; +import moja.refrigerator.dto.user.request.UserCreateRequest; import moja.refrigerator.service.user.UserService; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; @RestController @@ -16,4 +19,10 @@ public UserController(UserService userService) { // public String getMainPage() { // return "user Controller"; // } + + // 회원 가입 처리 + @PostMapping("/auth/join") + public void joinProcess(@RequestBody UserCreateRequest request) { + userService.createUser(request); + } } diff --git a/refrigerator/src/main/java/moja/refrigerator/dto/user/request/UserCreateRequest.java b/refrigerator/src/main/java/moja/refrigerator/dto/user/request/UserCreateRequest.java new file mode 100644 index 0000000..de6ebb5 --- /dev/null +++ b/refrigerator/src/main/java/moja/refrigerator/dto/user/request/UserCreateRequest.java @@ -0,0 +1,11 @@ +package moja.refrigerator.dto.user.request; + +import lombok.Data; + +@Data +public class UserCreateRequest { + private String userId; + private String userPw; + private String userEmail; + private String userNickname; +} diff --git a/refrigerator/src/main/java/moja/refrigerator/exception/common/BusinessException.java b/refrigerator/src/main/java/moja/refrigerator/exception/common/BusinessException.java new file mode 100644 index 0000000..e012311 --- /dev/null +++ b/refrigerator/src/main/java/moja/refrigerator/exception/common/BusinessException.java @@ -0,0 +1,7 @@ +package moja.refrigerator.exception.common; + +public class BusinessException extends RuntimeException { + public BusinessException(String message) { + super(message); + } +} diff --git a/refrigerator/src/main/java/moja/refrigerator/exception/handler/GlobalExceptionHandler.java b/refrigerator/src/main/java/moja/refrigerator/exception/handler/GlobalExceptionHandler.java new file mode 100644 index 0000000..445d8e1 --- /dev/null +++ b/refrigerator/src/main/java/moja/refrigerator/exception/handler/GlobalExceptionHandler.java @@ -0,0 +1,16 @@ +package moja.refrigerator.exception.handler; + +import moja.refrigerator.exception.user.DuplicateUserException; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; + +@RestControllerAdvice +public class GlobalExceptionHandler { + @ExceptionHandler(DuplicateUserException.class) + public ResponseEntity handleDuplicateUser(DuplicateUserException e) { + return ResponseEntity.status(HttpStatus.CONFLICT) + .body(e.getMessage()); + } +} diff --git a/refrigerator/src/main/java/moja/refrigerator/exception/user/DuplicateUserException.java b/refrigerator/src/main/java/moja/refrigerator/exception/user/DuplicateUserException.java new file mode 100644 index 0000000..b9937bf --- /dev/null +++ b/refrigerator/src/main/java/moja/refrigerator/exception/user/DuplicateUserException.java @@ -0,0 +1,9 @@ +package moja.refrigerator.exception.user; + +import moja.refrigerator.exception.common.BusinessException; + +public class DuplicateUserException extends BusinessException { + public DuplicateUserException(String message) { + super(message); + } +} diff --git a/refrigerator/src/main/java/moja/refrigerator/repository/user/UserRepository.java b/refrigerator/src/main/java/moja/refrigerator/repository/user/UserRepository.java index 38fa297..04cb76c 100644 --- a/refrigerator/src/main/java/moja/refrigerator/repository/user/UserRepository.java +++ b/refrigerator/src/main/java/moja/refrigerator/repository/user/UserRepository.java @@ -6,4 +6,7 @@ @Repository public interface UserRepository extends JpaRepository { + boolean existsByUserId(String userId); + boolean existsByUserEmail(String userEmail); + boolean existsByUserNickname(String userNickname); } diff --git a/refrigerator/src/main/java/moja/refrigerator/service/user/UserService.java b/refrigerator/src/main/java/moja/refrigerator/service/user/UserService.java index 3ebab0e..80fa52c 100644 --- a/refrigerator/src/main/java/moja/refrigerator/service/user/UserService.java +++ b/refrigerator/src/main/java/moja/refrigerator/service/user/UserService.java @@ -1,4 +1,7 @@ package moja.refrigerator.service.user; +import moja.refrigerator.dto.user.request.UserCreateRequest; + public interface UserService { + void createUser(UserCreateRequest request); } diff --git a/refrigerator/src/main/java/moja/refrigerator/service/user/UserServiceImpl.java b/refrigerator/src/main/java/moja/refrigerator/service/user/UserServiceImpl.java index 4413f85..21ff0bd 100644 --- a/refrigerator/src/main/java/moja/refrigerator/service/user/UserServiceImpl.java +++ b/refrigerator/src/main/java/moja/refrigerator/service/user/UserServiceImpl.java @@ -1,16 +1,58 @@ package moja.refrigerator.service.user; +import moja.refrigerator.aggregate.user.User; +import moja.refrigerator.dto.user.request.UserCreateRequest; +import moja.refrigerator.exception.user.DuplicateUserException; import moja.refrigerator.repository.user.UserRepository; +import org.modelmapper.ModelMapper; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.List; @Service public class UserServiceImpl implements UserService { private final UserRepository userRepository; private final BCryptPasswordEncoder passwordEncoder; + private final ModelMapper modelMapper; - public UserServiceImpl(UserRepository userRepository, BCryptPasswordEncoder passwordEncoder) { + public UserServiceImpl(UserRepository userRepository, BCryptPasswordEncoder passwordEncoder, ModelMapper modelMapper) { this.userRepository = userRepository; this.passwordEncoder = passwordEncoder; + this.modelMapper = modelMapper; + } + + @Override + @Transactional + public void createUser(UserCreateRequest request) { + // 중복 검사 로직 + checkDuplicateUser(request); + + // dto -> 엔티티 변환 + User user = modelMapper.map(request, User.class); + + // 비밀번호 암호화 + user.setUserPw(passwordEncoder.encode(request.getUserPw())); + + userRepository.save(user); + } + + private void checkDuplicateUser(UserCreateRequest request) { + List errors = new ArrayList<>(); + if (userRepository.existsByUserId(request.getUserId())) { + errors.add("이미 사용 중인 아이디입니다."); + } + if (userRepository.existsByUserEmail(request.getUserEmail())) { + errors.add("이미 사용 중인 이메일입니다."); + } + if (userRepository.existsByUserNickname(request.getUserNickname())) { + errors.add("이미 사용 중인 닉네임입니다."); + } + + if (!errors.isEmpty()) { + throw new DuplicateUserException(String.join(", ", errors)); + } } }