fix(core,board,ecommerce,page,pay): 예외→응답 매핑 정비와 저장 배송지 승계 결함 수정
generic catch 가 4xx 를 돌려주면 인프라 장애가 입력 오류로 위장돼 장애 인지가 늦어지고, 이미 번역된 예외 메시지를 응답의 메시지 키 자리에 넘기면 키 해석에 실패해 원문이 그대로 화면에 나간다. 두 형태를 코어와 전 번들 확장에서 함께 정리하고, 판정기를 한 확장이 아닌 코어 모집단에 두어 확장 밖 동형 결함도 red 가 되게 했다 — 그 사각에 실제로 15건이 있었다. 주소록에서 해외 배송지를 고르면 국내 6필드만 옮겨 담아 해외 주소가 통째로 사라지던 결함도 함께 고쳤다. 저장은 200 으로 성공 처리돼 주문 상세를 다시 열기 전에는 드러나지 않았다.
This commit is contained in:
1 parent
b33559e462
commit
b16c5c38a5
166 files changed
+6533
-627
No files matched your search
@@ -3,15 +3,16 @@
|
||||
namespace App\Http\Controllers\Api\Admin;
|
||||
|
||||
use App\Exceptions\LanguagePackSlotConflictException;
|
||||
use App\Extension\Helpers\ChangelogParser;
|
||||
use App\Http\Controllers\Api\Base\AdminBaseController;
|
||||
use App\Http\Requests\LanguagePack\InstallFromBundledRequest;
|
||||
use App\Http\Requests\LanguagePack\BulkActivateRequest;
|
||||
use App\Http\Requests\LanguagePack\IndexLanguagePackRequest;
|
||||
use App\Http\Requests\LanguagePack\InstallFromBundledRequest;
|
||||
use App\Http\Requests\LanguagePack\InstallFromFileRequest;
|
||||
use App\Http\Requests\LanguagePack\InstallFromGithubRequest;
|
||||
use App\Http\Requests\LanguagePack\InstallFromUrlRequest;
|
||||
use App\Http\Requests\LanguagePack\ManifestPreviewRequest;
|
||||
use App\Http\Requests\LanguagePack\UninstallLanguagePackRequest;
|
||||
use App\Extension\Helpers\ChangelogParser;
|
||||
use App\Http\Resources\LanguagePackCollection;
|
||||
use App\Http\Resources\LanguagePackResource;
|
||||
use App\Services\LanguagePackService;
|
||||
@@ -66,7 +67,7 @@ class LanguagePackController extends AdminBaseController
|
||||
|
||||
return $this->success('language_packs.fetch_success', $payload);
|
||||
} catch (\Throwable $e) {
|
||||
return $this->error('language_packs.fetch_failed', 500, $e->getMessage(), ['error' => $e->getMessage()]);
|
||||
return $this->error('language_packs.fetch_failed', 500, $e);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -117,7 +118,7 @@ class LanguagePackController extends AdminBaseController
|
||||
} catch (ValidationException $e) {
|
||||
return $this->error('language_packs.manifest_invalid', 422, $e->errors());
|
||||
} catch (\Throwable $e) {
|
||||
return $this->error('language_packs.install_failed', 500, $e->getMessage(), ['error' => $e->getMessage()]);
|
||||
return $this->error('language_packs.install_failed', 500, $e);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -145,7 +146,7 @@ class LanguagePackController extends AdminBaseController
|
||||
} catch (ValidationException $e) {
|
||||
return $this->error('language_packs.manifest_invalid', 422, $e->errors());
|
||||
} catch (\Throwable $e) {
|
||||
return $this->error('language_packs.install_failed', 500, $e->getMessage(), ['error' => $e->getMessage()]);
|
||||
return $this->error('language_packs.install_failed', 500, $e);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -173,7 +174,7 @@ class LanguagePackController extends AdminBaseController
|
||||
} catch (ValidationException $e) {
|
||||
return $this->error('language_packs.manifest_invalid', 422, $e->errors());
|
||||
} catch (\Throwable $e) {
|
||||
return $this->error('language_packs.install_failed', 500, $e->getMessage(), ['error' => $e->getMessage()]);
|
||||
return $this->error('language_packs.install_failed', 500, $e);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -202,7 +203,7 @@ class LanguagePackController extends AdminBaseController
|
||||
} catch (ValidationException $e) {
|
||||
return $this->error('language_packs.manifest_invalid', 422, $e->errors());
|
||||
} catch (\Throwable $e) {
|
||||
return $this->error('language_packs.install_failed', 500, $e->getMessage(), ['error' => $e->getMessage()]);
|
||||
return $this->error('language_packs.install_failed', 500, $e);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -237,17 +238,17 @@ class LanguagePackController extends AdminBaseController
|
||||
'target' => (new LanguagePackResource($e->target))->toArray($request),
|
||||
]);
|
||||
} catch (\Throwable $e) {
|
||||
return $this->error('language_packs.activate_failed', 500, $e->getMessage(), ['error' => $e->getMessage()]);
|
||||
return $this->error('language_packs.activate_failed', 500, $e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 여러 언어팩을 일괄 활성화합니다 (요구사항 #7 reactivate 모달 → "활성화" 버튼).
|
||||
*
|
||||
* @param \App\Http\Requests\LanguagePack\BulkActivateRequest $request 요청
|
||||
* @param BulkActivateRequest $request 요청
|
||||
* @return JsonResponse 결과 (succeeded/failed 분리)
|
||||
*/
|
||||
public function bulkActivate(\App\Http\Requests\LanguagePack\BulkActivateRequest $request): JsonResponse
|
||||
public function bulkActivate(BulkActivateRequest $request): JsonResponse
|
||||
{
|
||||
$ids = $request->validated('ids');
|
||||
$result = $this->service->bulkActivate($ids);
|
||||
@@ -278,7 +279,7 @@ class LanguagePackController extends AdminBaseController
|
||||
(new LanguagePackResource($pack))->toArray($request)
|
||||
);
|
||||
} catch (\Throwable $e) {
|
||||
return $this->error('language_packs.deactivate_failed', 500, $e->getMessage(), ['error' => $e->getMessage()]);
|
||||
return $this->error('language_packs.deactivate_failed', 500, $e);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -302,7 +303,7 @@ class LanguagePackController extends AdminBaseController
|
||||
|
||||
return $this->success('language_packs.uninstall_success');
|
||||
} catch (\Throwable $e) {
|
||||
return $this->error('language_packs.uninstall_failed', 500, $e->getMessage(), ['error' => $e->getMessage()]);
|
||||
return $this->error('language_packs.uninstall_failed', 500, $e);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -318,7 +319,7 @@ class LanguagePackController extends AdminBaseController
|
||||
|
||||
return $this->success('language_packs.check_updates_success', $result);
|
||||
} catch (\Throwable $e) {
|
||||
return $this->error('language_packs.check_updates_failed', 500, $e->getMessage(), ['error' => $e->getMessage()]);
|
||||
return $this->error('language_packs.check_updates_failed', 500, $e);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -345,7 +346,7 @@ class LanguagePackController extends AdminBaseController
|
||||
(new LanguagePackResource($updated))->toArray($request)
|
||||
);
|
||||
} catch (\Throwable $e) {
|
||||
return $this->error('language_packs.update_failed', 500, $e->getMessage(), ['error' => $e->getMessage()]);
|
||||
return $this->error('language_packs.update_failed', 500, $e);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -361,7 +362,9 @@ class LanguagePackController extends AdminBaseController
|
||||
|
||||
return $this->success('language_packs.refresh_cache_success', $result);
|
||||
} catch (\Throwable $e) {
|
||||
return $this->error('language_packs.refresh_cache_failed', 500, $e->getMessage(), ['error' => $e->getMessage()]);
|
||||
// 예외 원문을 응답에 싣지 않는다 — 디버그 노출은 ResponseHelper 가
|
||||
// app.debug 에서만 Throwable 을 펼치는 기존 메커니즘에 위임한다.
|
||||
return $this->error('language_packs.refresh_cache_failed', 500, $e);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -378,7 +381,9 @@ class LanguagePackController extends AdminBaseController
|
||||
|
||||
return $this->success('language_packs.preview_success', $result);
|
||||
} catch (\Throwable $e) {
|
||||
return $this->error('language_packs.preview_failed', 422, $e->getMessage(), ['error' => $e->getMessage()]);
|
||||
// 업로드 ZIP 검증 실패는 의도적 422 로 존치하되, 예외 원문은 싣지 않는다
|
||||
// (다른 manifestPreview 컨트롤러 3종과 동형).
|
||||
return $this->error('language_packs.preview_failed', 422, $e);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -410,7 +415,7 @@ class LanguagePackController extends AdminBaseController
|
||||
'has_changelog' => $entries !== [] || $rawContent !== '',
|
||||
]);
|
||||
} catch (\Throwable $e) {
|
||||
return $this->error('language_packs.fetch_failed', 500, $e->getMessage(), ['error' => $e->getMessage()]);
|
||||
return $this->error('language_packs.fetch_failed', 500, $e);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user