diff --git a/front/src/components/SignupPage.vue b/front/src/components/SignupPage.vue index 24179bc..b81da37 100644 --- a/front/src/components/SignupPage.vue +++ b/front/src/components/SignupPage.vue @@ -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); }) } } diff --git a/src/main/java/com/neorang/neims/globals/exceptionhandler/CustomExceptionHandler.java b/src/main/java/com/neorang/neims/globals/exceptionhandler/CustomExceptionHandler.java new file mode 100644 index 0000000..559b1c2 --- /dev/null +++ b/src/main/java/com/neorang/neims/globals/exceptionhandler/CustomExceptionHandler.java @@ -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 handleCustomException(DuplicatedException e) { + ErrorResult errorResult = getErrorResult("BAD_REQUEST", e.getMessage()); + return new ResponseEntity<>(errorResult, HttpStatus.BAD_REQUEST); + } +} diff --git a/src/main/java/com/neorang/neims/globals/exceptionhandler/ErrorResult.java b/src/main/java/com/neorang/neims/globals/exceptionhandler/ErrorResult.java new file mode 100644 index 0000000..99ea850 --- /dev/null +++ b/src/main/java/com/neorang/neims/globals/exceptionhandler/ErrorResult.java @@ -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; +} diff --git a/src/main/java/com/neorang/neims/users/UserRepository.java b/src/main/java/com/neorang/neims/users/UserRepository.java new file mode 100644 index 0000000..8b3a222 --- /dev/null +++ b/src/main/java/com/neorang/neims/users/UserRepository.java @@ -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 { + + Optional findByEmail(String email); + + Optional findByIgnoreCaseUserId(String userId); + +} diff --git a/src/main/java/com/neorang/neims/users/controller/UserController.java b/src/main/java/com/neorang/neims/users/controller/UserController.java index ed05ca2..7d196f8 100644 --- a/src/main/java/com/neorang/neims/users/controller/UserController.java +++ b/src/main/java/com/neorang/neims/users/controller/UserController.java @@ -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; @@ -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 login(@RequestBody SignupForm signupForm) { log.info("signupForm = {}", signupForm); + userSerivce.save(signupForm); + + return ResponseEntity.status(HttpStatus.OK).body("welecome"); } } diff --git a/src/main/java/com/neorang/neims/users/domain/Users.java b/src/main/java/com/neorang/neims/users/domain/Users.java index fab9247..9943664 100644 --- a/src/main/java/com/neorang/neims/users/domain/Users.java +++ b/src/main/java/com/neorang/neims/users/domain/Users.java @@ -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; diff --git a/src/main/java/com/neorang/neims/users/dto/SignupForm.java b/src/main/java/com/neorang/neims/users/dto/SignupForm.java index 4e8e7d5..179aa8c 100644 --- a/src/main/java/com/neorang/neims/users/dto/SignupForm.java +++ b/src/main/java/com/neorang/neims/users/dto/SignupForm.java @@ -1,5 +1,6 @@ package com.neorang.neims.users.dto; +import com.neorang.neims.users.domain.Users; import lombok.Getter; import lombok.ToString; @@ -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(); + } + } diff --git a/src/main/java/com/neorang/neims/users/exception/DuplicatedException.java b/src/main/java/com/neorang/neims/users/exception/DuplicatedException.java new file mode 100644 index 0000000..5137243 --- /dev/null +++ b/src/main/java/com/neorang/neims/users/exception/DuplicatedException.java @@ -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"); + } + +} diff --git a/src/main/java/com/neorang/neims/users/service/UserSerivce.java b/src/main/java/com/neorang/neims/users/service/UserSerivce.java new file mode 100644 index 0000000..cee3a29 --- /dev/null +++ b/src/main/java/com/neorang/neims/users/service/UserSerivce.java @@ -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); + + 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); } + + +}