$input */ public function create(array $input): User { $validated = Validator::make($input, [ ...$this->profileRules(), 'password' => $this->passwordRules(), 'invite_token' => ['nullable', 'string', 'size:128'], ])->validate(); return DB::transaction(function () use ($validated): User { $invite = null; if (! empty($validated['invite_token'])) { $invite = TeamInvite::findByPlainToken($validated['invite_token']) ->lockForUpdate() ->first(); if ( $invite === null || mb_strtolower($invite->invited_email) !== mb_strtolower($validated['email']) ) { throw ValidationException::withMessages([ 'invite_token' => 'Die Einladung ist ungültig oder gehört zu einer anderen E-Mail-Adresse.', ]); } } $user = User::create([ 'name' => $validated['name'], 'email' => $validated['email'], 'password' => $validated['password'], ]); if ($invite !== null) { ($this->acceptTeamInvite)($invite, $user); } return $user; }); } }