From 3ef0b3c14472bee9ff8b04ece2fa25ff3c0abc46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9my=20Munsch?= Date: Thu, 14 Dec 2023 13:04:24 +0100 Subject: [PATCH] DossierController refactor with typehint --- app/Http/Controllers/DossierController.php | 101 ++++++++++++--------- 1 file changed, 59 insertions(+), 42 deletions(-) diff --git a/app/Http/Controllers/DossierController.php b/app/Http/Controllers/DossierController.php index bb1c2cd..26d1e26 100644 --- a/app/Http/Controllers/DossierController.php +++ b/app/Http/Controllers/DossierController.php @@ -15,6 +15,7 @@ use App\Models\Marque; use App\Models\Media; use App\Models\Variante; use App\Models\Format; +use Illuminate\Contracts\Database\Eloquent\Builder; use Illuminate\Http\JsonResponse; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; @@ -38,37 +39,42 @@ class DossierController extends Controller $select = ['id', 'libelle', 'system']; /** @var \Illuminate\Database\Eloquent\Collection<\App\Models\Dossier> Dossiers publiques */ - $publicFolders = Dossier::whereHas('sujet', function ($q) use ($request) { - $q->where('codeSujet', $request->sujet_id); - })->whereIsPrivate(false)->whereNull('parent_id')->select($select)->get(); + $publicFolders = Dossier::query() + ->whereHas('sujet', fn (Builder $q) => $q->where('codeSujet', $request->input('sujet_id'))) + ->where('is_private', false) + ->whereDoesntHave('dossierParent') + ->select($select)->get(); - // On récupère les dossiers privés. + // * On récupère les dossiers privés. /** @var \Illuminate\Database\Eloquent\Builder */ - $privateQuery = Dossier::whereHas('sujet', function ($q) use ($request) { - $q->where('codeSujet', $request->sujet_id); - })->select($select)->whereIsPrivate(true); + $privateQuery = Dossier::query() + ->whereHas('sujet', fn (Builder $q) => $q->where('codeSujet', $request->input('sujet_id'))) + ->where('is_private', true) + ->select($select); - // If not admin, get using brands. + // ? Is admin ? if (!$user->hasRole(config('roles.const.ADMIN'))) { + // * If not admin, get using brands. /** @var \Illuminate\Database\Eloquent\Collection Codes marques */ $marques = $user->marques()->pluck('codMarq'); - $privateQuery->whereHas('marques', function ($q) use ($marques) { - $q->whereIn('codMarq', $marques); - }); + $privateQuery->whereHas('marques', fn (Builder $q) => $q->whereIn('codMarq', $marques)); } /** @var \Illuminate\Database\Eloquent\Collection<\App\Models\Dossier> Dossiers privés */ $privateFolders = $privateQuery->get(); $foldersCollection = $publicFolders->merge($privateFolders); - $foldersCollection = $foldersCollection->sortBy('libelle', SORT_NATURAL | SORT_FLAG_CASE) + $foldersCollection = $foldersCollection + ->sortBy('libelle', SORT_NATURAL | SORT_FLAG_CASE) ->sortBy('favoris')->values(); - // Ajout du dépôt de fichier pour les admin. + // ? Is admin ? if ($user->hasRole(config('roles.const.ADMIN'))) { + // * Ajout du dépôt de fichier pour les admin. /** @var \Illuminate\Database\Eloquent\Collection<\App\Models\Dossier> Dossiers depots */ - $depotQuery = Dossier::whereNull('parent_id') + $depotQuery = Dossier::query() + ->whereDoesntHave('dossierParent') ->where('system', true) ->orderBy('libelle', 'ASC') ->get(); @@ -76,13 +82,15 @@ class DossierController extends Controller } $folders['data'] = new NestedDossiersListResource($foldersCollection); - $folders['racineCount'] = Media::whereSujetId($request->sujet_id) - ->whereNull('dossier_id') - ->where(function ($query) use ($user) { - $query->where('statut', MediaStatut::public_etendu) + $folders['racineCount'] = Media::query() + ->whereHas('sujet', fn (Builder $q) => $q->where('id', $request->input('sujet_id'))) + ->whereDoesntHave('dossier') + ->where( + fn (Builder $q) => + $q->where('statut', MediaStatut::public_etendu) ->orWhere('statut', MediaStatut::public) - ->orWhere('created_by', $user->id); - })->count(); + ->orWhere('created_by', $user->id) + )->count(); return response()->json($folders); } @@ -99,13 +107,16 @@ class DossierController extends Controller $user = auth()->user(); $response = []; - $response['variantes'] = Variante::where('sujet_id', $request->sujetId)->get(); + $response['variantes'] = Variante::query() + ->whereHas('sujet', fn (Builder $q) => $q->where('id', $request->input('sujetId'))) + ->get(); /** @var \Illuminate\Database\Eloquent\Collection<\App\Models\Format> */ - $FormatsSujet = Format::whereHas('sujets', function ($query) use ($request) { - $query->where('sujet_id', $request->sujetId); - })->get(); + $FormatsSujet = Format::query() + ->whereHas('sujets', fn (Builder $q) => $q->where('sujet_id', $request->input('sujetId'))) + ->get(); /** @var \Illuminate\Database\Eloquent\Collection<\App\Models\Format> */ - $FormatsSystem = Format::withoutGlobalScope('App\Scopes\SystemScope') + $FormatsSystem = Format::query() + ->withoutGlobalScope('App\Scopes\SystemScope') ->where('system', true)->get(); $response['formats'] = $FormatsSujet->merge($FormatsSystem); @@ -131,14 +142,15 @@ class DossierController extends Controller $user->authorizeRoles(config('roles.const.ADMIN')); /** @var \Illuminate\Database\Eloquent\Collection<\App\Models\Dossier> */ - $dossiers = Dossier::whereNull('parent_id') - ->where('system', false) + $dossiers = Dossier::query() + ->whereDoesntHave('dossierParent') + ->where('system', false) ->orderBy('libelle', 'asc') ->get(); /** @var \Illuminate\Database\Eloquent\Collection<\App\Models\Sujet> */ - $sujets = Sujet::where('sujet_dam', true)->get(); + $sujets = Sujet::query()->where('sujet_dam', true)->get(); - return view('dossiers.index')->with([ + return view('dossiers.index', [ 'dossiers' => $dossiers, 'sujets' => $sujets, ]); @@ -154,9 +166,13 @@ class DossierController extends Controller { if ($request->sub) { /** @var \Illuminate\Database\Eloquent\Collection<\App\Models\Dossier> */ - $dossiers = Dossier::whereNull('parent_id')->where('system', false) + $dossiers = Dossier::query() + ->whereDoesntHave('dossierParent') + ->where('system', false) ->orderBy('libelle', 'asc')->get(); - return view('dossiers.create-sub')->with(['dossiers' => $dossiers]); + return view('dossiers.create-sub', [ + 'dossiers' => $dossiers + ]); } /** @var \App\Models\User */ @@ -166,10 +182,11 @@ class DossierController extends Controller $marques = Marque::all(); /** @var \Illuminate\Database\Eloquent\Collection<\App\Models\Sujet> */ - $sujets = Sujet::where('sujet_dam', true)->get(); + $sujets = Sujet::query()->where('sujet_dam', true)->get(); return view('dossiers.create')->with([ - 'marques' => $marques, 'sujets' => $sujets + 'marques' => $marques, + 'sujets' => $sujets ]); } @@ -192,19 +209,19 @@ class DossierController extends Controller if ($request->sub) { /** @var \App\Models\Dossier */ - $parent_dossier = Dossier::findOrFail($request->parent_id); + $parent_dossier = Dossier::query()->findOrFail($request->input('parent_id')); $dossier->sujet()->associate($parent_dossier->sujet); } else { - $dossier->sujet()->associate($request->sujet); + $dossier->sujet()->associate($request->input('sujet')); } if ($dossier->saveOrFail()) { // ---- Les marques - if ($request->marques) { - $dossier->marques()->sync($request->marques); + if ($request->input('marques')) { + $dossier->marques()->sync($request->input('marques')); } return redirect()->route('dossier.edit', ['dossier' => $dossier]) - ->with('success', 'Le dossier a été enregistré'); + ->with('success', 'Le dossier a été enregistré'); } }); return back(); @@ -228,9 +245,9 @@ class DossierController extends Controller /** @var \Illuminate\Database\Eloquent\Collection<\App\Models\Sujet> */ $dossierSujets = $dossier->sujets; /** @var \Illuminate\Database\Eloquent\Collection<\App\Models\Sujet> */ - $sujets = Sujet::where('sujet_dam', true)->get(); + $sujets = Sujet::query()->where('sujet_dam', true)->get(); - return view('dossiers.edit')->with([ + return view('dossiers.edit', [ 'dossier' => $dossier, 'dossierMarques' => $dossierMarques, 'marques' => $marques, @@ -261,7 +278,7 @@ class DossierController extends Controller $dossier->marques()->sync($request->marques); } return redirect()->route('dossier.edit', ['dossier' => $dossier]) - ->with('success', 'Le dossier a été mis à jour'); + ->with('success', trans('Le dossier a été mis à jour')); } }); return back(); @@ -280,7 +297,7 @@ class DossierController extends Controller $user->authorizeRoles(config('roles.const.ADMIN')); if ($dossier->deleteOrFail()) { return \response()->redirectToRoute('dossier.index') - ->with('warning', trans('Le dossier à été supprimé')); + ->with('warning', trans('Le dossier à été supprimé')); } return back(); }