diff --git a/src/main/java/com/klaroworks/runtime/dto/ApiResponse.java b/src/main/java/com/klaroworks/runtime/dto/ApiResponse.java new file mode 100644 index 0000000..e10bb94 --- /dev/null +++ b/src/main/java/com/klaroworks/runtime/dto/ApiResponse.java @@ -0,0 +1,39 @@ +package com.klaroworks.runtime.dto; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.klaroworks.runtime.exception.ErrorCode; +import lombok.*; +import java.time.Instant; + +@Data @Builder @NoArgsConstructor @AllArgsConstructor +@JsonInclude(JsonInclude.Include.NON_NULL) +public class ApiResponse { + private boolean success; + private T data; + private ErrorInfo error; + private String timestamp; + + @Data @Builder @NoArgsConstructor @AllArgsConstructor + public static class ErrorInfo { + private String code; + private String message; + private Object details; + } + + public static ApiResponse success(T data) { + return ApiResponse.builder().success(true).data(data) + .timestamp(Instant.now().toString()).build(); + } + + public static ApiResponse error(ErrorCode code) { + return ApiResponse.builder().success(false) + .error(ErrorInfo.builder().code(code.getCode()).message(code.getMessage()).build()) + .timestamp(Instant.now().toString()).build(); + } + + public static ApiResponse error(ErrorCode code, Object details) { + return ApiResponse.builder().success(false) + .error(ErrorInfo.builder().code(code.getCode()).message(code.getMessage()).details(details).build()) + .timestamp(Instant.now().toString()).build(); + } +}