authorize('viewAny', \App\Models\PromptTemplate::class); $result = $this->promptTemplateService->index(); $templates = $result['data'] ?? []; return view('prompt-templates.index', compact('templates')); } /** * Show the form for creating a new resource. */ public function create(): View { $this->authorize('create', \App\Models\PromptTemplate::class); return view('prompt-templates.create'); } /** * Store a newly created resource in storage. */ public function store(StorePromptTemplateRequest $request): RedirectResponse { $this->authorize('create', \App\Models\PromptTemplate::class); $data = $request->validated(); if (isset($data['template_data']) && is_string($data['template_data'])) { $data['template_data'] = json_decode($data['template_data'], true); } $this->promptTemplateService->store($data); return redirect()->route('prompt-templates.index') ->with('success', 'Template created successfully.'); } /** * Show the form for editing the specified resource. */ public function edit(\App\Models\PromptTemplate $promptTemplate): View { $this->authorize('update', $promptTemplate); return view('prompt-templates.edit', compact('promptTemplate')); } /** * Update the specified resource in storage. */ public function update(UpdatePromptTemplateRequest $request, \App\Models\PromptTemplate $promptTemplate): RedirectResponse { $this->authorize('update', $promptTemplate); $data = $request->validated(); if (isset($data['template_data']) && is_string($data['template_data'])) { $data['template_data'] = json_decode($data['template_data'], true); } $this->promptTemplateService->update($promptTemplate, $data); return redirect()->route('prompt-templates.index') ->with('success', 'Template updated successfully.'); } /** * Remove the specified resource from storage. */ public function destroy(\App\Models\PromptTemplate $promptTemplate): RedirectResponse { $this->authorize('delete', $promptTemplate); $this->promptTemplateService->destroy($promptTemplate); return redirect()->route('prompt-templates.index') ->with('success', 'Template deleted successfully.'); } /** * Get all templates as JSON for the dropdown. */ public function api(): JsonResponse { $templates = PromptTemplate::where('is_public', true) ->orWhere('user_id', auth()->id()) ->get(['name', 'template_data']); $result = []; foreach ($templates as $template) { $data = $template->template_data; $result[$template->name] = [ 'title' => $data['title'] ?? $template->name, 'objective' => $data['objective'] ?? '', 'context' => $data['context'] ?? '', 'persona' => $data['persona'] ?? '', 'tone' => $data['tone'] ?? '', 'constraints' => $data['constraints'] ?? '', 'output_format' => $data['output_format'] ?? '', 'examples' => $data['examples'] ?? '', 'variables' => $data['variables'] ?? '', 'temperature' => $data['temperature'] ?? 0.7, 'max_tokens' => $data['max_tokens'] ?? 1024, ]; } return response()->json($result); } }