select('id', 'name') ->orderBy('name') ->when( $request->search, fn (Builder $query) => $query ->where('name', 'ilike', "%{$request->search}%") ) ->when( $request->exists('selected'), fn (Builder $query) => $query->whereIn('id', $this->numericIds($request)), fn (Builder $query) => $query->limit(10) ) ->get() ->map(function (Lecturer $lecturer) { $lecturer->image = $lecturer->getFirstMediaUrl('avatar', 'thumb'); return $lecturer; }); } /** * Referent anlegen * * Erlaubt einem authentifizierten Nutzer, einen Referenten programmatisch anzulegen. * Der Ersteller (created_by) wird automatisch gesetzt. */ #[ResponseAttribute(status: 401, description: 'Nicht authentifiziert.')] #[ResponseAttribute(status: 422, description: 'Validierungsfehler.')] public function store(StoreLecturerRequest $request): JsonResponse { $lecturer = Lecturer::create($request->validated()); return LecturerResource::make($lecturer->fresh()) ->response() ->setStatusCode(Response::HTTP_CREATED); } /** * Referent aktualisieren * * Aktualisiert einen Referenten; nur fuer den Ersteller oder einen Super-Admin. */ #[ResponseAttribute(status: 403, description: 'Nur der Ersteller oder ein Super-Admin darf den Referenten aendern.')] #[ResponseAttribute(status: 422, description: 'Validierungsfehler.')] public function update(UpdateLecturerRequest $request, Lecturer $lecturer): LecturerResource { $lecturer->update($request->validated()); return LecturerResource::make($lecturer->fresh()); } /** * Eigene Referenten auflisten * * Liefert alle vom authentifizierten Nutzer erstellten Referenten, alphabetisch sortiert. */ public function mine(Request $request): AnonymousResourceCollection { Gate::authorize('viewAny', Lecturer::class); $lecturers = Lecturer::query() ->where('created_by', $request->user()->id) ->orderBy('name') ->get(); return LecturerResource::collection($lecturers); } /** * Eigenen Referenten anzeigen * * Zeigt einen einzelnen, vom authentifizierten Nutzer erstellten Referenten. */ #[ResponseAttribute(status: 403, description: 'Nur der Ersteller oder ein Super-Admin darf den Referenten sehen.')] public function mineShow(Lecturer $lecturer): LecturerResource { Gate::authorize('view', $lecturer); return LecturerResource::make($lecturer); } }