Skip to content

Commit eb65851

Browse files
committed
week7
1 parent 127db46 commit eb65851

21 files changed

+438
-0
lines changed

.DS_Store

0 Bytes
Binary file not shown.

build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ configurations {
2626
dependencies {
2727
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
2828
implementation 'org.springframework.boot:spring-boot-starter-web'
29+
implementation 'org.springframework.boot:spring-boot-starter-validation'
2930
compileOnly 'org.projectlombok:lombok'
3031
runtimeOnly 'com.mysql:mysql-connector-j'
3132
annotationProcessor 'org.projectlombok:lombok'

src/.DS_Store

0 Bytes
Binary file not shown.
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package umc.study.apiPayload;
2+
3+
import com.fasterxml.jackson.annotation.JsonInclude;
4+
import com.fasterxml.jackson.annotation.JsonProperty;
5+
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
6+
import lombok.AllArgsConstructor;
7+
import lombok.Getter;
8+
import umc.study.apiPayload.code.BaseCode;
9+
import umc.study.apiPayload.code.status.SuccessStatus;
10+
11+
@Getter
12+
@AllArgsConstructor
13+
@JsonPropertyOrder({"isSuccess", "code", "message", "result"})
14+
public class ApiResponse<T> {
15+
16+
@JsonProperty("isSuccess")
17+
private final Boolean isSuccess;
18+
private final String code;
19+
private final String message;
20+
@JsonInclude(JsonInclude.Include.NON_NULL)
21+
private T result;
22+
23+
24+
// 성공한 경우 응답 생성
25+
26+
public static <T> ApiResponse<T> onSuccess(T result){
27+
return new ApiResponse<>(true, SuccessStatus._OK.getCode() , SuccessStatus._OK.getMessage(), result);
28+
}
29+
30+
public static <T> ApiResponse<T> of(BaseCode code, T result){
31+
return new ApiResponse<>(true, code.getReasonHttpStatus().getCode() , code.getReasonHttpStatus().getMessage(), result);
32+
}
33+
34+
35+
// 실패한 경우 응답 생성
36+
public static <T> ApiResponse<T> onFailure(String code, String message, T data){
37+
return new ApiResponse<>(false, code, message, data);
38+
}
39+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package umc.study.apiPayload.code;
2+
3+
public interface BaseCode {
4+
5+
ReasonDTO getReason();
6+
7+
ReasonDTO getReasonHttpStatus();
8+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package umc.study.apiPayload.code;
2+
3+
public interface BaseErrorCode {
4+
ErrorReasonDTO getReason();
5+
6+
ErrorReasonDTO getReasonHttpStatus();
7+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package umc.study.apiPayload.code;
2+
3+
import lombok.Builder;
4+
import lombok.Getter;
5+
import org.springframework.http.HttpStatus;
6+
7+
@Getter
8+
@Builder
9+
public class ErrorReasonDTO {
10+
private HttpStatus httpStatus;
11+
12+
private final boolean isSuccess;
13+
private final String code;
14+
private final String message;
15+
16+
public boolean getIsSuccess(){return isSuccess;}
17+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package umc.study.apiPayload.code;
2+
3+
import lombok.Builder;
4+
import lombok.Getter;
5+
import org.springframework.http.HttpStatus;
6+
7+
@Getter
8+
@Builder
9+
public class ReasonDTO {
10+
private HttpStatus httpStatus;
11+
12+
private final boolean isSuccess;
13+
private final String code;
14+
private final String message;
15+
16+
public boolean getIsSuccess(){return isSuccess;}
17+
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package umc.study.apiPayload.code.status;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Getter;
5+
import org.springframework.http.HttpStatus;
6+
import umc.study.apiPayload.code.BaseErrorCode;
7+
import umc.study.apiPayload.code.ErrorReasonDTO;
8+
9+
@Getter
10+
@AllArgsConstructor
11+
public enum ErrorStatus implements BaseErrorCode {
12+
// 가장 일반적인 응답
13+
_INTERNAL_SERVER_ERROR(HttpStatus.INTERNAL_SERVER_ERROR, "COMMON500", "서버 에러, 관리자에게 문의 바랍니다."),
14+
_BAD_REQUEST(HttpStatus.BAD_REQUEST,"COMMON400","잘못된 요청입니다."),
15+
_UNAUTHORIZED(HttpStatus.UNAUTHORIZED,"COMMON401","인증이 필요합니다."),
16+
_FORBIDDEN(HttpStatus.FORBIDDEN, "COMMON403", "금지된 요청입니다."),
17+
18+
19+
// 멤버 관려 에러
20+
MEMBER_NOT_FOUND(HttpStatus.BAD_REQUEST, "MEMBER4001", "사용자가 없습니다."),
21+
NICKNAME_NOT_EXIST(HttpStatus.BAD_REQUEST, "MEMBER4002", "닉네임은 필수 입니다."),
22+
23+
// 예시,,,
24+
TEMP_EXCEPTION(HttpStatus.BAD_REQUEST, "TEMP4001","이거는 테스트"),
25+
ARTICLE_NOT_FOUND(HttpStatus.NOT_FOUND, "ARTICLE4001", "게시글이 없습니다.");
26+
27+
private final HttpStatus httpStatus;
28+
private final String code;
29+
private final String message;
30+
31+
@Override
32+
public ErrorReasonDTO getReason() {
33+
return ErrorReasonDTO.builder()
34+
.message(message)
35+
.code(code)
36+
.isSuccess(false)
37+
.build();
38+
}
39+
40+
@Override
41+
public ErrorReasonDTO getReasonHttpStatus() {
42+
return ErrorReasonDTO.builder()
43+
.message(message)
44+
.code(code)
45+
.isSuccess(false)
46+
.httpStatus(httpStatus)
47+
.build();
48+
}
49+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package umc.study.apiPayload.code.status;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Getter;
5+
import org.springframework.http.HttpStatus;
6+
import umc.study.apiPayload.code.BaseCode;
7+
import umc.study.apiPayload.code.ReasonDTO;
8+
9+
@Getter
10+
@AllArgsConstructor
11+
public enum SuccessStatus implements BaseCode {
12+
13+
// 일반적인 응답
14+
_OK(HttpStatus.OK, "COMMON200", "성공입니다.");
15+
16+
private final HttpStatus httpStatus;
17+
private final String code;
18+
private final String message;
19+
20+
@Override
21+
public ReasonDTO getReason() {
22+
return ReasonDTO.builder()
23+
.message(message)
24+
.code(code)
25+
.isSuccess(true)
26+
.build();
27+
}
28+
29+
@Override
30+
public ReasonDTO getReasonHttpStatus() {
31+
return ReasonDTO.builder()
32+
.message(message)
33+
.code(code)
34+
.isSuccess(true)
35+
.httpStatus(httpStatus)
36+
.build()
37+
;
38+
}
39+
}

0 commit comments

Comments
 (0)