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 @@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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);
}
}
Original file line number Diff line number Diff line change
@@ -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;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package moja.refrigerator.exception.common;

public class BusinessException extends RuntimeException {
public BusinessException(String message) {
super(message);
}
}
Original file line number Diff line number Diff line change
@@ -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<String> handleDuplicateUser(DuplicateUserException e) {
return ResponseEntity.status(HttpStatus.CONFLICT)
.body(e.getMessage());
}
}
Original file line number Diff line number Diff line change
@@ -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);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,7 @@

@Repository
public interface UserRepository extends JpaRepository<User, Long> {
boolean existsByUserId(String userId);
boolean existsByUserEmail(String userEmail);
boolean existsByUserNickname(String userNickname);
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
package moja.refrigerator.service.user;

import moja.refrigerator.dto.user.request.UserCreateRequest;

public interface UserService {
void createUser(UserCreateRequest request);
}
Original file line number Diff line number Diff line change
@@ -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<String> 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));
}
}
}