From 8c4cea5f187b1c4220022a6d1809f31167849ecb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=EC=84=9C=EC=A4=80?= <104981505+xeoxxn@users.noreply.github.com> Date: Thu, 20 Aug 2026 15:50:54 +0900 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20=EA=B3=B5=ED=86=B5=20API=20?= =?UTF-8?q?=EC=9D=91=EB=8B=B5=20=EB=9E=98=ED=8D=BC=20ApiResponse=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kr/ac/kookmin/stream/ApiResponse.java | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 api/common-api/src/main/java/kr/ac/kookmin/stream/ApiResponse.java diff --git a/api/common-api/src/main/java/kr/ac/kookmin/stream/ApiResponse.java b/api/common-api/src/main/java/kr/ac/kookmin/stream/ApiResponse.java new file mode 100644 index 0000000..4664abe --- /dev/null +++ b/api/common-api/src/main/java/kr/ac/kookmin/stream/ApiResponse.java @@ -0,0 +1,41 @@ +package kr.ac.kookmin.stream; + +import kr.ac.kookmin.stream.common.BusinessException; +import kr.ac.kookmin.stream.common.ErrorCode; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor(access = AccessLevel.PRIVATE) +public final class ApiResponse { + + private static final String SUCCESS_CODE = "SUCCESS"; + private static final String SUCCESS_MESSAGE = "요청에 성공했습니다."; + + private final boolean success; + private final String code; + private final String message; + private final T data; + + public static ApiResponse success(T data) { + return new ApiResponse<>(true, SUCCESS_CODE, SUCCESS_MESSAGE, data); + } + + public static ApiResponse success() { + return success(null); + } + + public static ApiResponse error(BusinessException exception) { + ErrorCode errorCode = exception.getErrorCode(); + return new ApiResponse<>(false, errorCode.name(), exception.getMessage(), null); + } + + public static ApiResponse error(ErrorCode errorCode) { + return new ApiResponse<>(false, errorCode.name(), errorCode.message(), null); + } + + public static ApiResponse error(String code, String message) { + return new ApiResponse<>(false, code, message, null); + } +} From b2af7be7bb0f4c641adde992897f133166a64a9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=EC=84=9C=EC=A4=80?= <104981505+xeoxxn@users.noreply.github.com> Date: Thu, 20 Aug 2026 15:50:54 +0900 Subject: [PATCH 2/2] =?UTF-8?q?feat:=20=EC=BB=A4=EC=84=9C=20=EA=B8=B0?= =?UTF-8?q?=EB=B0=98=20=EB=AA=A9=EB=A1=9D=20=EC=A1=B0=ED=9A=8C=20=EC=9D=91?= =?UTF-8?q?=EB=8B=B5=20CursorSliceResponse=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kr/ac/kookmin/stream/CursorSliceResponse.java | 15 +++++++++++++++ .../kookmin/stream/common/CursorSliceResult.java | 5 +++++ 2 files changed, 20 insertions(+) create mode 100644 api/common-api/src/main/java/kr/ac/kookmin/stream/CursorSliceResponse.java create mode 100644 core/common/src/main/java/kr/ac/kookmin/stream/common/CursorSliceResult.java diff --git a/api/common-api/src/main/java/kr/ac/kookmin/stream/CursorSliceResponse.java b/api/common-api/src/main/java/kr/ac/kookmin/stream/CursorSliceResponse.java new file mode 100644 index 0000000..21e6277 --- /dev/null +++ b/api/common-api/src/main/java/kr/ac/kookmin/stream/CursorSliceResponse.java @@ -0,0 +1,15 @@ +package kr.ac.kookmin.stream; + +import java.util.List; +import kr.ac.kookmin.stream.common.CursorSliceResult; + +public record CursorSliceResponse(List content, boolean hasNext, Long nextCursor) { + + public static CursorSliceResponse from(CursorSliceResult result) { + return new CursorSliceResponse<>( + result.content(), + result.hasNext(), + result.nextCursor() + ); + } +} diff --git a/core/common/src/main/java/kr/ac/kookmin/stream/common/CursorSliceResult.java b/core/common/src/main/java/kr/ac/kookmin/stream/common/CursorSliceResult.java new file mode 100644 index 0000000..4bd0d3d --- /dev/null +++ b/core/common/src/main/java/kr/ac/kookmin/stream/common/CursorSliceResult.java @@ -0,0 +1,5 @@ +package kr.ac.kookmin.stream.common; + +import java.util.List; + +public record CursorSliceResult(List content, boolean hasNext, Long nextCursor) {}