extraFeeTemplateService->getList($request->validated()); $statistics = $this->extraFeeTemplateService->getStatistics(); $collection = new ExtraFeeTemplateCollection($templates); return ResponseHelper::moduleSuccess( 'sirsoft-ecommerce', 'messages.extra_fee_template.list_retrieved', $collection->withStatistics($statistics) ); } /** * 추가배송비 템플릿 상세 조회 * * @param int $id * @return JsonResponse */ public function show(int $id): JsonResponse { $template = $this->extraFeeTemplateService->getDetail($id); if (! $template) { return ResponseHelper::notFound( 'messages.extra_fee_template.not_found', [], 'sirsoft-ecommerce' ); } return ResponseHelper::moduleSuccess( 'sirsoft-ecommerce', 'messages.extra_fee_template.retrieved', new ExtraFeeTemplateResource($template) ); } /** * 추가배송비 템플릿 생성 * * @param ExtraFeeTemplateStoreRequest $request * @return JsonResponse */ public function store(ExtraFeeTemplateStoreRequest $request): JsonResponse { try { $template = $this->extraFeeTemplateService->create($request->validated()); return ResponseHelper::moduleSuccess( 'sirsoft-ecommerce', 'messages.extra_fee_template.created', new ExtraFeeTemplateResource($template), 201 ); } catch (\Exception $e) { // 서버 결함/인프라 장애 — 4xx 로 뭉개면 장애가 입력 오류로 위장된다 return ResponseHelper::moduleError( 'sirsoft-ecommerce', 'exceptions.operation_failed', 500 ); } } /** * 추가배송비 템플릿 수정 * * @param ExtraFeeTemplateUpdateRequest $request * @param int $id * @return JsonResponse */ public function update(ExtraFeeTemplateUpdateRequest $request, int $id): JsonResponse { $template = $this->extraFeeTemplateService->getDetail($id); if (! $template) { return ResponseHelper::notFound( 'messages.extra_fee_template.not_found', [], 'sirsoft-ecommerce' ); } try { $updatedTemplate = $this->extraFeeTemplateService->update($template, $request->validated()); return ResponseHelper::moduleSuccess( 'sirsoft-ecommerce', 'messages.extra_fee_template.updated', new ExtraFeeTemplateResource($updatedTemplate) ); } catch (\Exception $e) { // 서버 결함/인프라 장애 — 4xx 로 뭉개면 장애가 입력 오류로 위장된다 return ResponseHelper::moduleError( 'sirsoft-ecommerce', 'exceptions.operation_failed', 500 ); } } /** * 추가배송비 템플릿 삭제 * * @param int $id * @return JsonResponse */ public function destroy(int $id): JsonResponse { $template = $this->extraFeeTemplateService->getDetail($id); if (! $template) { return ResponseHelper::notFound( 'messages.extra_fee_template.not_found', [], 'sirsoft-ecommerce' ); } try { $this->extraFeeTemplateService->delete($template); return ResponseHelper::moduleSuccess( 'sirsoft-ecommerce', 'messages.extra_fee_template.deleted' ); } catch (\Exception $e) { // 서버 결함/인프라 장애 — 4xx 로 뭉개면 장애가 입력 오류로 위장된다 return ResponseHelper::moduleError( 'sirsoft-ecommerce', 'exceptions.operation_failed', 500 ); } } /** * 추가배송비 템플릿 사용여부 토글 * * @param int $id * @return JsonResponse */ public function toggleActive(int $id): JsonResponse { $template = $this->extraFeeTemplateService->getDetail($id); if (! $template) { return ResponseHelper::notFound( 'messages.extra_fee_template.not_found', [], 'sirsoft-ecommerce' ); } try { $updatedTemplate = $this->extraFeeTemplateService->toggleActive($template); return ResponseHelper::moduleSuccess( 'sirsoft-ecommerce', 'messages.extra_fee_template.toggled', new ExtraFeeTemplateResource($updatedTemplate) ); } catch (\Exception $e) { // 서버 결함/인프라 장애 — 4xx 로 뭉개면 장애가 입력 오류로 위장된다 return ResponseHelper::moduleError( 'sirsoft-ecommerce', 'exceptions.operation_failed', 500 ); } } /** * 추가배송비 템플릿 일괄 삭제 * * @param ExtraFeeTemplateBulkDeleteRequest $request * @return JsonResponse */ public function bulkDestroy(ExtraFeeTemplateBulkDeleteRequest $request): JsonResponse { try { $count = $this->extraFeeTemplateService->bulkDelete($request->validated()['ids']); return ResponseHelper::moduleSuccess( 'sirsoft-ecommerce', 'messages.extra_fee_template.bulk_deleted', ['deleted_count' => $count] ); } catch (\Exception $e) { // 서버 결함/인프라 장애 — 4xx 로 뭉개면 장애가 입력 오류로 위장된다 return ResponseHelper::moduleError( 'sirsoft-ecommerce', 'exceptions.operation_failed', 500 ); } } /** * 추가배송비 템플릿 일괄 사용여부 변경 * * @param ExtraFeeTemplateBulkToggleActiveRequest $request * @return JsonResponse */ public function bulkToggleActive(ExtraFeeTemplateBulkToggleActiveRequest $request): JsonResponse { try { $validated = $request->validated(); $count = $this->extraFeeTemplateService->bulkToggleActive( $validated['ids'], $validated['is_active'] ); return ResponseHelper::moduleSuccess( 'sirsoft-ecommerce', 'messages.extra_fee_template.bulk_toggled', ['updated_count' => $count] ); } catch (\Exception $e) { // 서버 결함/인프라 장애 — 4xx 로 뭉개면 장애가 입력 오류로 위장된다 return ResponseHelper::moduleError( 'sirsoft-ecommerce', 'exceptions.operation_failed', 500 ); } } /** * 일괄 등록 (CSV/엑셀 업로드용) * * @param ExtraFeeTemplateBulkCreateRequest $request * @return JsonResponse */ public function bulkStore(ExtraFeeTemplateBulkCreateRequest $request): JsonResponse { try { $count = $this->extraFeeTemplateService->bulkCreate($request->validated()['items']); return ResponseHelper::moduleSuccess( 'sirsoft-ecommerce', 'messages.extra_fee_template.bulk_created', ['created_count' => $count], 201 ); } catch (\Exception $e) { // 서버 결함/인프라 장애 — 4xx 로 뭉개면 장애가 입력 오류로 위장된다 return ResponseHelper::moduleError( 'sirsoft-ecommerce', 'exceptions.operation_failed', 500 ); } } /** * 활성화된 템플릿을 배송정책용 JSON 배열로 반환 * * @return JsonResponse */ public function activeSettings(): JsonResponse { $settings = $this->extraFeeTemplateService->getAllAsExtraFeeSettings(); return ResponseHelper::moduleSuccess( 'sirsoft-ecommerce', 'messages.extra_fee_template.settings_retrieved', $settings ); } }