verifyEventBelongsToOrganisation($organisation, $event); Gate::authorize('viewAny', [RegistrationFormField::class, $event]); $fields = $this->service->listForEvent($event); return RegistrationFormFieldResource::collection($fields); } public function store(StoreRegistrationFormFieldRequest $request, Organisation $organisation, Event $event): JsonResponse { $this->verifyEventBelongsToOrganisation($organisation, $event); Gate::authorize('create', [RegistrationFormField::class, $event]); $field = $this->service->createField($event, $request->validated()); return $this->created(new RegistrationFormFieldResource($field)); } public function update( UpdateRegistrationFormFieldRequest $request, Organisation $organisation, Event $event, RegistrationFormField $registrationField, ): JsonResponse { $this->verifyEventBelongsToOrganisation($organisation, $event); Gate::authorize('update', [$registrationField, $event]); $field = $this->service->updateField($registrationField, $request->validated()); return $this->success(new RegistrationFormFieldResource($field)); } public function destroy(Organisation $organisation, Event $event, RegistrationFormField $registrationField): JsonResponse { $this->verifyEventBelongsToOrganisation($organisation, $event); Gate::authorize('delete', [$registrationField, $event]); $this->service->deleteField($registrationField); return response()->json(null, 204); } public function reorder(ReorderRegistrationFormFieldsRequest $request, Organisation $organisation, Event $event): JsonResponse { $this->verifyEventBelongsToOrganisation($organisation, $event); Gate::authorize('reorder', [RegistrationFormField::class, $event]); $this->service->reorderFields($event, $request->validated()['ids']); return response()->json(null, 204); } public function fromTemplate(Request $request, Organisation $organisation, Event $event): JsonResponse { $this->verifyEventBelongsToOrganisation($organisation, $event); Gate::authorize('create', [RegistrationFormField::class, $event]); $request->validate([ 'template_id' => ['required', 'ulid', 'exists:registration_field_templates,id'], ]); $template = RegistrationFieldTemplate::findOrFail($request->input('template_id')); if ($template->organisation_id !== $event->organisation_id) { return $this->error('Template does not belong to this organisation.', 422); } $field = $this->templateService->createFieldFromTemplate($event, $template); return $this->created(new RegistrationFormFieldResource($field)); } public function importFromEvent(ImportFromEventRequest $request, Organisation $organisation, Event $event): JsonResponse { $this->verifyEventBelongsToOrganisation($organisation, $event); Gate::authorize('create', [RegistrationFormField::class, $event]); $sourceEvent = Event::findOrFail($request->validated()['source_event_id']); $fields = $this->service->importFromEvent($event, $sourceEvent); return $this->success(RegistrationFormFieldResource::collection($fields)); } }