Skip to content

Commit

Permalink
Merge pull request #20 from HyuckJuneHong/member_error
Browse files Browse the repository at this point in the history
feature/19
  • Loading branch information
hongdosan authored Jun 26, 2022
2 parents c045050 + 6a35530 commit cff93e7
Show file tree
Hide file tree
Showing 21 changed files with 247 additions and 35 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,6 @@
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/kr/co/corporates")
@RequestMapping("/api/member/corporate")
public class CorporateController {
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,6 @@
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/kr/co/members")
@RequestMapping("/api/member/normal")
public class MemberController {
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,29 +2,30 @@

import io.swagger.annotations.ApiOperation;
import kr.co.memberservice.domain.dto.MemberMstDto;
import kr.co.memberservice.error.model.ResponseFormat;
import kr.co.memberservice.service.MemberMstServiceImpl;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;

@RestController
@RequestMapping("/kr/co/memberMst")//복수화 (RestAPI 설계) 구글링
@RequestMapping("/api/member")
@RequiredArgsConstructor
public class MemberMstController {

private final MemberMstServiceImpl memberMstService;

@ApiOperation("회원가입")
@PostMapping("/signUp")
public void signUp(@RequestBody @Valid MemberMstDto.CREATE create){
//To do...
public ResponseFormat signUp(@RequestBody @Valid MemberMstDto.CREATE create){
memberMstService.signUp(create);
return ResponseFormat.ok();
}

@ApiOperation("아이디 중복 체크")
@PostMapping("/signUp/check")
public void checkIdentity(@RequestParam("identity") String identity){
//To do...
public ResponseFormat<Boolean> checkIdentity(@RequestParam("identity") String identity){
return ResponseFormat.ok(memberMstService.checkIdentity(identity));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ public static class CREATE{
@ApiModelProperty(example = "MALE or FEMALE")
@NotBlank(message = "성별을 입력해주세요.")
private String gender;
@ApiModelProperty(example = "ROLE_MEMBER or ROLE_ADMIN")
@ApiModelProperty(example = "ROLE_MEMBER")
@NotBlank(message = "권한을 입력해주세요.")
private String memberRole;
@ApiModelProperty(example = "RANK_NORMAL or RANK_CORPORATE")
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package kr.co.memberservice.error.exception;

public class BadRequestException extends BusinessLogicException{
public BadRequestException(String message) {
super(String.format("Bad Request : %s", message));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package kr.co.memberservice.error.exception;

import kr.co.memberservice.error.model.ErrorCode;
import lombok.Getter;

@Getter
public class BusinessLogicException extends RuntimeException{

private ErrorCode errorCode;

public BusinessLogicException(ErrorCode errorCode){
super(errorCode.getMessage());
this.errorCode = errorCode;
}

public BusinessLogicException(String message){
super(message);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package kr.co.memberservice.error.exception;

import kr.co.memberservice.error.model.ErrorCode;

public class DuplicatedException extends BusinessLogicException {
public DuplicatedException(ErrorCode errorCode) {
super(errorCode);
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package kr.co.memberservice.error.exception;

import kr.co.memberservice.error.model.ErrorCode;

public class UnauthorizedException extends BusinessLogicException{

public UnauthorizedException() {
super(ErrorCode.UNAUTHORIZED_USER);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package kr.co.memberservice.error.handler;

import kr.co.memberservice.error.exception.BusinessLogicException;
import kr.co.memberservice.error.model.ResponseFormat;
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(value = {BusinessLogicException.class, RuntimeException.class})
public ResponseEntity handleRuntimeException(RuntimeException e){
ResponseFormat responseFormat = ResponseFormat.fail(e.getMessage());
return new ResponseEntity(responseFormat, HttpStatus.OK);
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package kr.co.memberservice.error.model;

import lombok.Getter;

@Getter
public enum ErrorCode {

//common
UNAUTHORIZED_USER("권한이 없습니다.", 403),

//member
WRONG_PASSWORD("아이디나 비밀번호를 다시 확인해주세요", 400),
DUPLICATED_ID("중복된 아이디를 사용할 수 없습니다.", 400);

private String message;
private int status;

ErrorCode(String message, int status) {
this.message = message;
this.status = status;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package kr.co.memberservice.error.model;

import lombok.*;

@Builder
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
public class ErrorResponse {

private int status;
private String message;

public static ErrorResponse of(ErrorCode errorCode){
return ErrorResponse.builder()
.status(errorCode.getStatus())
.message(errorCode.getMessage())
.build();
}

public static ErrorResponse of(String errorMessage){
return ErrorResponse.builder()
.status(400)
.message(errorMessage)
.build();
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package kr.co.memberservice.error.model;

import kr.co.memberservice.error.exception.BadRequestException;
import lombok.AllArgsConstructor;
import lombok.Getter;

import java.util.Arrays;

@Getter
@AllArgsConstructor
public enum ResponseCode {

SUCCESS(1), FAIL(2), TOKEN_EXPIRED(3);

int code;

public static ResponseCode of(int num){
return Arrays.stream(ResponseCode.values())
.filter(responseCode -> responseCode.getCode() == num)
.findFirst().orElseThrow(() -> new BadRequestException("응답 코드를 찾을 수 없습니다."));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package kr.co.memberservice.error.model;

import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;

@Getter
@Builder
@AllArgsConstructor
public class ResponseFormat<T> {

@ApiModelProperty(example = "성공은 1 or 실패는 2 or 토큰 만료는 3")
private int code;
@ApiModelProperty(example = "true or false")
private boolean result;
private T data;
@ApiModelProperty(example = "성공 or 에러 메세지 or 토큰이 만료되었습니다.")
private String description;

public static ResponseFormat fail(String message){
return ResponseFormat.builder()
.code(ResponseCode.FAIL.getCode())
.result(false)
.data(null)
.description(message)
.build();
}

public static <T> ResponseFormat ok(T data){
return ResponseFormat.builder()
.code(ResponseCode.SUCCESS.getCode())
.result(true)
.data(data)
.description("성공")
.build();
}

public static ResponseFormat ok(){
return ResponseFormat.builder()
.code(ResponseCode.SUCCESS.getCode())
.result(true)
.data(null)
.description("성공")
.build();
}

public static ResponseFormat expire(){
return ResponseFormat.builder()
.code(ResponseCode.TOKEN_EXPIRED.getCode())
.result(false)
.data(null)
.description("토큰이 만료되었습니다.")
.build();
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,24 @@
package kr.co.memberservice.infra.config;


import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

@Configuration
@EnableSwagger2
public class SwaggerConfig {

@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.any())
.paths(PathSelectors.any())
.build();
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,21 @@
package kr.co.memberservice.infra.config;

public class WebConfig {
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class WebConfig implements WebMvcConfigurer {

private static final long MAX_AGE_SECOND = 3600;

@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOriginPatterns("*")
.allowedMethods("GET", "POST", "PUT", "DELETE")
.allowedHeaders("*")
.allowCredentials(true)
.maxAge(MAX_AGE_SECOND);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@
@RequiredArgsConstructor
public class SecurityConfig extends WebSecurityConfigurerAdapter {


@Bean
public PasswordEncoder passwordEncoder(){
return new BCryptPasswordEncoder();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,5 @@ public interface MemberMstService {

//common service
Boolean checkIdentity(String identity);
Boolean checkPhone(String phone);

}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@
import kr.co.memberservice.domain.shared.enums.Gender;
import kr.co.memberservice.domain.shared.enums.MemberRank;
import kr.co.memberservice.domain.shared.enums.MemberRole;
import kr.co.memberservice.error.exception.BadRequestException;
import kr.co.memberservice.error.exception.DuplicatedException;
import kr.co.memberservice.error.model.ErrorCode;
import kr.co.memberservice.infra.security.jwt.JwtTokenProvider;
import kr.co.memberservice.repository.MemberMstRepository;
import lombok.RequiredArgsConstructor;
Expand All @@ -21,19 +24,21 @@ public class MemberMstServiceImpl implements MemberMstService{
private final PasswordEncoder passwordEncoder;

/**
*
* @param create
* 회원가입
* @param create 회원가입하기 위한 회원의 정보
*/
@Override
public void signUp(MemberMstDto.CREATE create) {

if(checkIdentity(create.getIdentity())){
//To do... 예외 처리
throw new DuplicatedException(ErrorCode.DUPLICATED_ID);
}
if(!create.getPassword().equals(create.getCheckPassword())){
//To do... 예외 처리
throw new BadRequestException("비밀번호와 확인 비밀번호가 일치하지 않습니다.");
}

//To do... 전화번호 중복 확인 ?

MemberMstEntity memberMstEntity = MemberMstEntity.builder()
.identity(create.getIdentity())
.password(passwordEncoder.encode(create.getPassword()))
Expand All @@ -50,14 +55,7 @@ public void signUp(MemberMstDto.CREATE create) {

@Override
public Boolean checkIdentity(String identity) {
//To do...
return null;
}

@Override
public Boolean checkPhone(String phone) {
//To do...
return null;
return memberMstRepository.existsByIdentity(identity);
}

}

0 comments on commit cff93e7

Please sign in to comment.