<?php namespace App\Http\Controllers\Settings; use App\Actions\Projects\CreateProject; use App\Actions\Projects\DeleteProject; use App\Actions\Projects\UpdateProject; use App\Facades\Toast; use App\Helpers\HtmxResponse; use App\Http\Controllers\Controller; use App\Models\Project; use App\Models\User; use Illuminate\Contracts\View\View; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; use Illuminate\Validation\ValidationException; class ProjectController extends Controller { public function index(): View { $this->authorize('viewAny', Project::class); return view('settings.projects.index', [ 'projects' => Project::all(), ]); } public function create(Request $request): HtmxResponse { $this->authorize('create', Project::class); app(CreateProject::class)->create($request->user(), $request->input()); Toast::success('Project created.'); return htmx()->redirect(route('settings.projects')); } public function update(Request $request, Project $project): HtmxResponse { $this->authorize('update', $project); app(UpdateProject::class)->update($project, $request->input()); Toast::success('Project updated.'); return htmx()->redirect(route('settings.projects')); } public function delete(Project $project): RedirectResponse { $this->authorize('delete', $project); /** @var User $user */ $user = auth()->user(); try { app(DeleteProject::class)->delete($user, $project); } catch (ValidationException $e) { Toast::error($e->getMessage()); return back(); } Toast::success('Project deleted.'); return back(); } public function switch(Request $request, $projectId): RedirectResponse { /** @var User $user */ $user = auth()->user(); /** @var Project $project */ $project = $user->projects()->findOrFail($projectId); $this->authorize('view', $project); $user->current_project_id = $project->id; $user->save(); // check if the referer is settings/* if (str_contains($request->headers->get('referer'), 'settings')) { return redirect()->to($request->headers->get('referer')); } return redirect()->route('servers'); } }