Warning: session_start(): Session cannot be started after headers have already been sent in /home/tvrreohg/public_html/manga.php on line 13
ensureAccess($request, $caseRecord);
$session = AssistantSession::firstOrCreate(
['case_record_id' => $caseRecord->id, 'user_id' => $request->user()->id, 'status' => 'active'],
['title' => 'CaseReady preparation chat', 'phase' => 'understand']
);
if (! $session->disclaimer_accepted_at) {
return redirect()
->route('cases.assistant.show', $caseRecord)
->withErrors(['packet' => 'Please accept the CaseReady preparation disclaimer before generating a packet.']);
}
try {
$result = $assistant->packet($caseRecord);
} catch (RuntimeException $exception) {
return back()->withErrors(['packet' => $exception->getMessage()]);
}
$packet = $caseRecord->generatedPackets()->create([
'user_id' => $request->user()->id,
'title' => 'CaseReady Packet - '.$caseRecord->title,
'content' => $result['content'],
'model' => $result['model'] ?? null,
'input_tokens' => $result['input_tokens'] ?? null,
'output_tokens' => $result['output_tokens'] ?? null,
]);
$pdf = Pdf::loadView('packets.pdf', [
'caseRecord' => $caseRecord->fresh(['user', 'documents']),
'packet' => $packet,
])->setPaper('letter');
$path = "cases/{$caseRecord->id}/packets/caseready-packet-{$packet->id}.pdf";
Storage::disk('local')->put($path, $pdf->output());
$packet->update(['path' => $path, 'disk' => 'local']);
return redirect()->route('cases.assistant.show', $caseRecord)->with('success', 'CaseReady Packet generated.');
}
public function download(Request $request, GeneratedPacket $packet)
{
$this->ensureAccess($request, $packet->caseRecord);
abort_unless($packet->path && Storage::disk($packet->disk)->exists($packet->path), 404);
return Storage::disk($packet->disk)->download($packet->path, str($packet->title)->slug().'.pdf');
}
private function ensureAccess(Request $request, CaseRecord $caseRecord): void
{
abort_unless($request->user()->isAdmin() || $caseRecord->user_id === $request->user()->id, 403);
}
}