Skip to content
Open
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
7 changes: 6 additions & 1 deletion front/src/components/SignupPage.vue
Original file line number Diff line number Diff line change
Expand Up @@ -80,9 +80,14 @@ export default {
email: email
};
axios.post("/api/user/signup", params).then(res => {
console.log(res.data);
console.log(res);
if(res.status == 200) {
alert(res.data);
this.$router.push('/');
}
}).catch(err => {
console.log(err);
alert(err.response.data.errorMsg);
})
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.neorang.neims.globals.exceptionhandler;

import com.neorang.neims.users.exception.DuplicatedException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

@Slf4j
@RestControllerAdvice
public class CustomExceptionHandler {

ErrorResult getErrorResult(String errorCd, String msg) {
return new ErrorResult(errorCd, msg);
}

@ExceptionHandler(DuplicatedException.class)
protected ResponseEntity<ErrorResult> handleCustomException(DuplicatedException e) {
ErrorResult errorResult = getErrorResult("BAD_REQUEST", e.getMessage());
return new ResponseEntity<>(errorResult, HttpStatus.BAD_REQUEST);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.neorang.neims.globals.exceptionhandler;

import lombok.AllArgsConstructor;
import lombok.Getter;

@Getter
@AllArgsConstructor
public class ErrorResult {
private String errorType;
private String errorMsg;
}
14 changes: 14 additions & 0 deletions src/main/java/com/neorang/neims/users/UserRepository.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.neorang.neims.users;

import com.neorang.neims.users.domain.Users;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.Optional;

public interface UserRepository extends JpaRepository<Users, String> {

Optional<Users> findByEmail(String email);

Optional<Users> findByIgnoreCaseUserId(String userId);

}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,11 @@

import com.neorang.neims.users.dto.LoginForm;
import com.neorang.neims.users.dto.SignupForm;
import com.neorang.neims.users.service.UserSerivce;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
Expand All @@ -11,15 +15,21 @@
@Slf4j
@RestController
@RequestMapping("/api/user")
@RequiredArgsConstructor
public class UserController {

private final UserSerivce userSerivce;

@PostMapping("/login")
public void login(@RequestBody LoginForm loginForm) {
log.info("loginForm = {}", loginForm);
}

@PostMapping("/signup")
public void login(@RequestBody SignupForm signupForm) {
public ResponseEntity<String> login(@RequestBody SignupForm signupForm) {
log.info("signupForm = {}", signupForm);
userSerivce.save(signupForm);

return ResponseEntity.status(HttpStatus.OK).body("welecome");
}
}
8 changes: 8 additions & 0 deletions src/main/java/com/neorang/neims/users/domain/Users.java
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,14 @@ public class Users extends BaseEntity {
@Size(max = 100)
private String email;

public void setPassword(String password) {
this.password = password;
}

public void setRole(Role role) {
this.role = role;
}

@Builder
public Users(String userId, String userName, String password, Role role, String email) {
this.userId = userId;
Expand Down
8 changes: 8 additions & 0 deletions src/main/java/com/neorang/neims/users/dto/SignupForm.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.neorang.neims.users.dto;

import com.neorang.neims.users.domain.Users;
import lombok.Getter;
import lombok.ToString;

Expand All @@ -12,4 +13,11 @@ public class SignupForm {
private String password;
private String email;

public Users toEntity(){
return Users.builder().userId(userId)
.userName(userName)
.email(email)
.build();
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.neorang.neims.users.exception;


import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ResponseStatus;



@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public class DuplicatedException extends RuntimeException {

public DuplicatedException(String message) {
super(message + " is Duplicated");
}

}
53 changes: 53 additions & 0 deletions src/main/java/com/neorang/neims/users/service/UserSerivce.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package com.neorang.neims.users.service;


import com.neorang.neims.users.exception.DuplicatedException;
import com.neorang.neims.users.UserRepository;
import com.neorang.neims.users.domain.Role;
import com.neorang.neims.users.domain.Users;
import com.neorang.neims.users.dto.SignupForm;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
import org.springframework.util.Assert;
import org.springframework.util.ObjectUtils;

@Service
@Slf4j
@RequiredArgsConstructor
public class UserSerivce {

private final UserRepository userRepository;

private final PasswordEncoder passwordEncoder;

public void save(SignupForm signupForm){
Assert.notNull(signupForm.getUserId(), "ID must be provided");
Assert.notNull(signupForm.getEmail(), "Email must be provided");
Assert.notNull(signupForm.getPassword(), "Password must be provided");

Users duplicatedUserId = findByIgnoreCaseId(signupForm.getUserId());
Users duplicatedUserEmail = findByEmail(signupForm.getEmail());
String encodePassword = passwordEncoder.encode(signupForm.getPassword());

if(!ObjectUtils.isEmpty(duplicatedUserId)) throw new DuplicatedException(signupForm.getUserId());
if(!ObjectUtils.isEmpty(duplicatedUserEmail)) throw new DuplicatedException(signupForm.getEmail());

Users user = signupForm.toEntity();
user.setPassword(encodePassword);
user.setRole(Role.USER);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

필수 값 Assert 및 사용자 권한 기본값은 도메인의 책임이 더 크므로 SignupForm으로 이동, 혹은 Validation 적용


userRepository.save(user);
}

public Users findById(String userId){
return userRepository.findById(userId).orElse(null);
}

public Users findByIgnoreCaseId(String userId){ return userRepository.findByIgnoreCaseUserId(userId).orElse(null); }

public Users findByEmail(String userId){ return userRepository.findByEmail(userId).orElse(null); }


}