verifyEventBelongsToOrganisation($organisation, $event); Gate::authorize('viewAny', [Performance::class, $event]); $query = Performance::query() ->whereHas('engagement', fn ($q) => $q->where('event_id', $event->id)) ->with(['engagement.artist.defaultGenre', 'stage']); if ($request->filled('day')) { $query->where('event_id', $request->string('day')); } if ($request->query('stage_id') === 'null') { $query->whereNull('stage_id'); } elseif ($request->filled('stage_id')) { $query->where('stage_id', $request->string('stage_id')); } return PerformanceResource::collection($query->orderBy('start_at')->get()); } public function show(Organisation $organisation, Event $event, Performance $performance): JsonResponse { $this->verifyEventBelongsToOrganisation($organisation, $event); Gate::authorize('view', [$performance, $event]); $performance->loadMissing(['engagement.artist.defaultGenre', 'stage']); return $this->success(PerformanceResource::make($performance)); } public function store(CreatePerformanceRequest $request, Organisation $organisation, Event $event): JsonResponse { $this->verifyEventBelongsToOrganisation($organisation, $event); Gate::authorize('create', [Performance::class, $event]); $data = $request->validated(); $engagement = ArtistEngagement::query()->findOrFail($data['engagement_id']); $performance = $this->service->create($engagement, $data); return $this->created( PerformanceResource::make($performance->load(['engagement.artist.defaultGenre', 'stage'])), ); } public function update( UpdatePerformanceRequest $request, Organisation $organisation, Event $event, Performance $performance, ): JsonResponse { $this->verifyEventBelongsToOrganisation($organisation, $event); Gate::authorize('update', [$performance, $event]); $performance = $this->service->update($performance, $request->validated()); return $this->success(PerformanceResource::make($performance)); } public function destroy( Organisation $organisation, Event $event, Performance $performance, ): JsonResponse { $this->verifyEventBelongsToOrganisation($organisation, $event); Gate::authorize('delete', [$performance, $event]); $this->service->delete($performance); return response()->json(null, 204); } }