where('organisation_id', $organisation->id) ->orderBy('sort_order') ->orderBy('name') ->get(); return GenreResource::collection($genres); } public function store(CreateGenreRequest $request, Organisation $organisation): JsonResponse { Gate::authorize('create', [Genre::class, $organisation]); $genre = $this->service->create($organisation, $request->validated()); return $this->created(GenreResource::make($genre)); } public function update(UpdateGenreRequest $request, Organisation $organisation, Genre $genre): JsonResponse { Gate::authorize('update', $genre); $genre = $this->service->update($genre, $request->validated()); return $this->success(GenreResource::make($genre)); } public function destroy(Organisation $organisation, Genre $genre): JsonResponse { Gate::authorize('delete', $genre); try { $this->service->delete($genre); } catch (GenreInUseException $e) { return $this->error($e->getMessage(), 409, [ 'referencing_artists_count' => $e->referencingArtistsCount, ]); } return response()->json(null, 204); } }