validated(), fn ($value) => $value !== null); $perPage = (int) ($request->validated('per_page') ?? 20); $templates = $this->mailTemplateService->getTemplates($filters, $perPage); $collection = new MailTemplateCollection($templates); return $this->success('mail_template.fetch_success', $collection->toArray($request)); } catch (\Exception $e) { Log::error('메일 템플릿 목록 조회 실패', ['error' => $e->getMessage()]); return $this->error('mail_template.fetch_failed', 500); } } /** * 메일 템플릿을 수정합니다. * * @param UpdateMailTemplateRequest $request 수정 요청 * @param MailTemplate $mailTemplate 수정 대상 * @return JsonResponse 수정 결과 */ public function update(UpdateMailTemplateRequest $request, MailTemplate $mailTemplate): JsonResponse { try { $userId = $request->user()?->id; $template = $this->mailTemplateService->updateTemplate( $mailTemplate, $request->validated(), $userId ); return $this->success( 'mail_template.save_success', new MailTemplateResource($template) ); } catch (\Exception $e) { Log::error('메일 템플릿 수정 실패', ['error' => $e->getMessage()]); return $this->error('mail_template.save_error', 500); } } /** * 메일 템플릿의 활성 상태를 토글합니다. * * @param MailTemplate $mailTemplate 토글 대상 * @return JsonResponse 토글 결과 */ public function toggleActive(MailTemplate $mailTemplate): JsonResponse { try { $template = $this->mailTemplateService->toggleActive($mailTemplate); return $this->success( 'mail_template.toggle_success', new MailTemplateResource($template) ); } catch (\Exception $e) { Log::error('메일 템플릿 활성 상태 토글 실패', ['error' => $e->getMessage()]); return $this->error('mail_template.toggle_failed', 500); } } /** * 메일 템플릿 미리보기를 반환합니다. * * @param MailTemplatePreviewRequest $request 검증된 미리보기 요청 * @return JsonResponse 미리보기 결과 */ public function preview(MailTemplatePreviewRequest $request): JsonResponse { try { $result = $this->mailTemplateService->getPreview($request->validated()); return $this->success('mail_template.preview_success', $result); } catch (\Exception $e) { Log::error('메일 템플릿 미리보기 실패', ['error' => $e->getMessage()]); return $this->error('mail_template.preview_failed', 500); } } /** * 메일 템플릿을 시더 기본값으로 복원합니다. * * @param MailTemplate $mailTemplate 복원 대상 * @return JsonResponse 복원 결과 */ public function reset(MailTemplate $mailTemplate): JsonResponse { try { $defaultData = $this->mailTemplateService->getDefaultTemplateData($mailTemplate->type); if (! $defaultData) { return $this->error('mail_template.reset_no_default', 404); } $template = $this->mailTemplateService->resetToDefault($mailTemplate, $defaultData); return $this->success( 'mail_template.reset_success', new MailTemplateResource($template) ); } catch (\Exception $e) { Log::error('메일 템플릿 기본값 복원 실패', ['error' => $e->getMessage()]); return $this->error('mail_template.reset_failed', 500); } } }