$input * * @throws ValidationException */ public function create(array $input): User { Validator::make($input, [ 'name' => [ 'required', 'string', 'max:255', ], 'email' => [ 'required', 'string', 'email', 'max:255', new UniqueEloquent(User::class, 'email', function (Builder $builder): Builder { /** @var Builder $builder */ return $builder->where('is_placeholder', '=', false); }), ], 'password' => $this->passwordRules(), 'terms' => Jetstream::hasTermsAndPrivacyPolicyFeature() ? ['accepted', 'required'] : '', ])->validate(); $timezone = 'UTC'; if (array_key_exists('timezone', $input) && is_string($input['timezone']) && app(TimezoneService::class)->isValid($input['timezone'])) { $timezone = $input['timezone']; } return DB::transaction(function () use ($input, $timezone) { return tap(User::create([ 'name' => $input['name'], 'email' => $input['email'], 'password' => Hash::make($input['password']), 'timezone' => $timezone, 'week_start' => Weekday::Monday, ]), function (User $user) { $this->createTeam($user); }); }); } /** * Create a personal team for the user. */ protected function createTeam(User $user): void { $organization = new Organization(); $organization->name = explode(' ', $user->name, 2)[0]."'s Organization"; $organization->personal_team = true; $organization->owner()->associate($user); $organization->save(); $organization->users()->attach( $user, [ 'role' => 'owner', ] ); $user->ownedTeams()->save($organization); } }