latest() ->paginate(25) ->withQueryString(); $archiveEntities = ArchiveEntity::query() ->where('enabled', true) ->orderBy('focus') ->get(['id', 'focus', 'name', 'related']); return Inertia::render('Settings/Archive/Index', [ 'settings' => $settings, 'archiveEntities' => $archiveEntities, 'actions' => Action::query()->with('decisions:id,name')->orderBy('name')->get(['id', 'name', 'segment_id']), 'segments' => Segment::query()->orderBy('name')->get(['id', 'name']), 'chainPatterns' => config('archiving.chains'), ]); } public function store(ArchiveSettingRequest $request): RedirectResponse { $data = $request->validated(); $data['created_by'] = $request->user()?->id; ArchiveSetting::create($data); return redirect()->back()->with('flash.banner', 'Archive rule created'); } public function update(ArchiveSettingRequest $request, ArchiveSetting $archiveSetting): RedirectResponse { $data = $request->validated(); $data['updated_by'] = $request->user()?->id; $archiveSetting->update($data); return redirect()->back()->with('flash.banner', 'Archive rule updated'); } public function destroy(ArchiveSetting $archiveSetting): RedirectResponse { $archiveSetting->delete(); return redirect()->back()->with('flash.banner', 'Archive rule deleted'); } public function run(ArchiveSetting $archiveSetting, Request $request): RedirectResponse { // Allow manual triggering even if strategy is manual or disabled? We'll require enabled. if (! $archiveSetting->enabled) { return back()->with('flash.banner', 'Rule is disabled'); } $executor = app(ArchiveExecutor::class); $results = $executor->executeSetting($archiveSetting, context: null, userId: $request->user()?->id); $summary = empty($results) ? 'No rows matched.' : collect($results)->map(fn ($c, $t) => "$t:$c")->implode(', '); return back()->with('flash.banner', 'Archive run complete: '.$summary); } }