$input */ public function handle(Form $form, array $input): Participant { $memberQuery = FieldCollection::fromRequest($form, $input) ->withNamiType() ->reduce(fn ($query, $field) => $field->namiType->performQuery($query, $field->value), (new Member())->newQuery()); $member = $form->getFields()->withNamiType()->count() && $memberQuery->count() === 1 ? $memberQuery->first() : null; $participant = $form->participants()->create([ 'data' => $input, 'member_id' => $member?->id, ]); $form->getFields()->each(fn ($field) => $field->afterRegistration($form, $participant, $input)); $participant->sendConfirmationMail(); ExportSyncAction::dispatch($form->id); return $participant; } /** * @return array */ public function rules(): array { /** @var Form */ $form = request()->route('form'); return $form->getRegistrationRules(); } /** * @return array */ public function getValidationAttributes(): array { /** @var Form */ $form = request()->route('form'); return $form->getRegistrationAttributes(); } /** * @return array */ public function getValidationMessages(): array { /** @var Form */ $form = request()->route('form'); return $form->getRegistrationMessages(); } public function asController(ActionRequest $request, Form $form): JsonResponse { $participant = $this->handle($form, $request->validated()); return response()->json($participant); } }