fix : 결과 전달시 두번 래핑되는 부분 수정
- 컨트롤러와 서비스에서 각각 래핑 후 결과 전달됨으로 이중 래핑되고 있음 -> 서비스에서 래핑하는 부분을 컨트롤러로 옮겨서 컨트롤러에서만 한번 래핑하는 걸로 수정
This commit is contained in:
@@ -117,19 +117,49 @@ public static function response($type = '', $query = '', $key = ''): array
|
||||
public static function handle(
|
||||
callable $callback,
|
||||
string $responseTitle = '요청'
|
||||
): JsonResponse {
|
||||
): JsonResponse
|
||||
{
|
||||
try {
|
||||
$result = $callback();
|
||||
|
||||
// 이미 JsonResponse면 그대로 반환
|
||||
if ($result instanceof JsonResponse) {
|
||||
return $result;
|
||||
}
|
||||
|
||||
return self::success(
|
||||
$result['data'] ?? null, $responseTitle." 성공", $result['query'] ?? []
|
||||
);
|
||||
// [신규] 서비스가 에러 ‘신호 배열’을 반환한 경우 감지
|
||||
// 허용 포맷 예:
|
||||
// ['error' => 'NO_TENANT', 'code' => 400]
|
||||
// ['code' => 404, 'message' => '데이터 없음']
|
||||
if (is_array($result) && (
|
||||
array_key_exists('error', $result) ||
|
||||
(array_key_exists('code', $result) && is_numeric($result['code']) && (int)$result['code'] >= 400)
|
||||
)
|
||||
) {
|
||||
$code = (int)($result['code'] ?? 400);
|
||||
$message = (string)($result['message'] ?? ($result['error'] ?? ($responseTitle.' 실패')));
|
||||
$details = $result['details'] ?? null;
|
||||
|
||||
// 에러에도 쿼리 로그 포함되도록 error()가 처리하게 맡김
|
||||
return self::error($message, $code, ['details' => $details]);
|
||||
}
|
||||
|
||||
// 표준 박스( ['data'=>..., 'query'=>...] ) 하위호환
|
||||
if (is_array($result) && array_key_exists('data', $result)) {
|
||||
$data = $result['data'];
|
||||
$debug = $result['query'] ?? [];
|
||||
} else {
|
||||
// 그냥 도메인 결과만 반환한 경우
|
||||
$data = $result;
|
||||
$debug = (app()->environment('local') && request()->is('api/*'))
|
||||
? self::debugQueryLog()
|
||||
: [];
|
||||
}
|
||||
|
||||
return self::success($data, $responseTitle.' 성공', $debug);
|
||||
|
||||
} catch (\Throwable $e) {
|
||||
return self::error($responseTitle." 실패", 500, [
|
||||
return self::error($responseTitle.' 실패', 500, [
|
||||
'details' => $e->getMessage(),
|
||||
]);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user