fix : 결과 전달시 두번 래핑되는 부분 수정

- 컨트롤러와 서비스에서 각각 래핑 후 결과 전달됨으로 이중 래핑되고 있음
  -> 서비스에서 래핑하는 부분을 컨트롤러로 옮겨서 컨트롤러에서만 한번 래핑하는 걸로 수정
This commit is contained in:
2025-08-19 12:41:17 +09:00
parent aa190bf48d
commit 43e4c507a7
18 changed files with 299 additions and 277 deletions

View File

@@ -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(),
]);
}