Teren-app/app/Http/Controllers/ArchiveSettingController.php
2025-10-05 19:45:49 +02:00

77 lines
2.7 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Http\Requests\ArchiveSettingRequest;
use App\Models\Action;
use App\Models\ArchiveEntity;
use App\Models\ArchiveSetting;
use App\Models\Segment;
use App\Services\Archiving\ArchiveExecutor;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Inertia\Inertia;
use Inertia\Response;
class ArchiveSettingController extends Controller
{
public function index(Request $request): Response
{
$settings = ArchiveSetting::query()
->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);
}
}