invite = request()->query('invite'); if ($this->invite) { $invite = HouseholdInvite::where('token', $this->invite)->first(); if ($invite && ! $invite->isExpired() && ! $invite->isAccepted()) { $this->email = $invite->email; } } } /** * Handle an incoming registration request. */ public function register(): void { $validated = $this->validate([ 'name' => ['required', 'string', 'max:255'], 'email' => ['required', 'string', 'lowercase', 'email', 'max:255', 'unique:'.User::class], 'password' => ['required', 'string', 'confirmed', Rules\Password::defaults()], ]); $validated['password'] = Hash::make($validated['password']); $invite = $this->invite ? HouseholdInvite::where('token', $this->invite) ->where('email', $validated['email']) ->whereNull('accepted_at') ->first() : null; $user = DB::transaction(function () use ($validated, $invite) { $user = User::create($validated); if ($invite && ! $invite->isExpired()) { $user->households()->attach($invite->household_id, ['role' => $invite->role]); $invite->update(['accepted_at' => now()]); $user->forceFill(['current_household_id' => $invite->household_id])->save(); } else { $household = Household::create([ 'name' => $user->name."'s Household", 'owner_id' => $user->id, ]); $user->households()->attach($household->id, ['role' => 'owner']); $user->forceFill(['current_household_id' => $household->id])->save(); } return $user; }); event(new Registered($user)); Auth::login($user); $this->redirect(route('dashboard', absolute: false), navigate: true); } }; ?>