Files
WMS/app/Actions/Fortify/CreateNewUser.php
2026-09-21 10:14:57 +01:00

52 lines
1.6 KiB
PHP
Executable File

<?php
namespace App\Actions\Fortify;
use App\Concerns\PasswordValidationRules;
use App\Concerns\ProfileValidationRules;
use App\Models\User;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Str;
use Laravel\Fortify\Contracts\CreatesNewUsers;
use Modules\Company\Models\Company;
class CreateNewUser implements CreatesNewUsers
{
use PasswordValidationRules, ProfileValidationRules;
/**
* Validate and create a newly registered user with an isolated company tenant.
*
* @param array<string, string> $input
*/
public function create(array $input): User
{
Validator::make($input, [
...$this->profileRules(),
'password' => $this->passwordRules(),
'company_name' => ['nullable', 'string', 'max:255'],
])->validate();
return DB::transaction(function () use ($input): User {
$companyName = $input['company_name'] ?? ($input['name'] . ' Company');
$company = Company::create([
'name' => $companyName,
'slug' => Str::slug($companyName . '-' . Str::random(6)),
'status' => 'active',
'timezone' => 'Europe/London',
]);
return User::create([
'company_id' => $company->id,
'name' => $input['name'],
'email' => $input['email'],
'password' => $input['password'],
'is_company_admin' => true,
'status' => 'active',
]);
});
}
}