
@Setter
@Getter
public class JoinDTO {
private String username;
private String password;
}
예전에는 web안에 controller와 dto 디렉토리를 만들었었는데, 여기선 web 없이 따로따로 생성
원래 UserDTO를 만들고 그 안에 user와 관련된 DTO들을 클래스로 저장했었음 -> 이게 더 좋은 방법 같음
@Controller
@ResponseBody
public class JoinController {
private final JoinService joinService;
public JoinController(JoinService joinService) {
this.joinService = joinService;
}
@PostMapping("/join")
public String joinProcess(JoinDTO joinDTO) {
System.out.println(joinDTO.getUsername());
joinService.joinProcess(joinDTO);
return "ok";
}
}
@Service
public class JoinService {
private final UserRepository userRepository;
private final BCryptPasswordEncoder bCryptPasswordEncoder;
public JoinService(UserRepository userRepository, BCryptPasswordEncoder bCryptPasswordEncoder){
this.userRepository = userRepository;
this.bCryptPasswordEncoder = bCryptPasswordEncoder;
}
// 원래는 return 값이 boolean
public void joinProcess(JoinDTO joinDTO) {
String username = joinDTO.getUsername();
String password = joinDTO.getPassword();
Boolean isExist = userRepository.existsByUsername(username);
if (isExist){
// 사용자가 이미 등록되어 있으면 실행 안함
return;
}
UserEntity data = new UserEntity();
data.setUsername(username);
// 암호화하여 password를 넣음
data.setPassword(bCryptPasswordEncoder.encode(password));
// 강제로 admin 권한을 줌
data.setRole("ROLE_ADMIN");
userRepository.save(data);
}
}

