-
app/Services/Users/UserCreationService.php
Open in GitHubuse App\Models\Role; use Ramsey\Uuid\Uuid; use App\Models\User; use Illuminate\Contracts\Hashing\Hasher; use Illuminate\Database\ConnectionInterface; use App\Notifications\AccountCreated; use Filament\Facades\Filament; use Illuminate\Auth\Passwords\PasswordBroker; use Illuminate\Support\Facades\Password; class UserCreationService { public function __construct( private readonly ConnectionInterface $connection, private readonly Hasher $hasher, ) {} public function handle(array $data): User { if (array_key_exists('password', $data) && !empty($data['password'])) { $data['password'] = $this->hasher->make($data['password']); } $this->connection->beginTransaction(); if (empty($data['password'])) { $generateResetToken = true; $data['password'] = $this->hasher->make(str_random(30)); } $isRootAdmin = array_key_exists('root_admin', $data) && $data['root_admin']; unset($data['root_admin']); /** @var User $user */ $user = User::query()->forceCreate(array_merge($data, [ 'uuid' => Uuid::uuid4()->toString(), ])); if ($isRootAdmin) { $user->syncRoles(Role::getRootAdmin()); } if (isset($generateResetToken)) { /** @var PasswordBroker $broker */ $broker = Password::broker(Filament::getPanel('app')->getAuthPasswordBroker()); $token = $broker->createToken($user); } $this->connection->commit(); $user->notify(new AccountCreated($token ?? null)); return $user; } }
-
app/Livewire/Installer/PanelInstaller.php
Open in GitHubuse App\Services\Users\UserCreationService; use Exception; use Filament\Forms\Contracts\HasForms; use Filament\Pages\SimplePage; use Illuminate\Support\HtmlString; class PanelInstaller extends SimplePage implements HasForms { // ... public function createAdminUser(UserCreationService $userCreationService): User { try { $userData = array_get($this->data, 'user'); $userData['root_admin'] = true; return $userCreationService->handle($userData); } catch (Exception $exception) { report($exception); Notification::make() ->title('Could not create admin user') ->body($exception->getMessage()) ->danger() ->persistent() ->send(); throw new Halt('Error while creating admin user'); } } }
-
app/Http/Controllers/Api/Application/Users/UserController.php
Open in GitHubuse App\Services\Users\UserCreationService; use App\Http\Requests\Api\Application\Users\StoreUserRequest; class UserController extends ApplicationApiController { public function __construct( private UserCreationService $creationService, private UserUpdateService $updateService ) { parent::__construct(); } // ... public function store(StoreUserRequest $request): JsonResponse { $user = $this->creationService->handle($request->validated()); return $this->fractal->item($user) ->transformWith($this->getTransformer(UserTransformer::class)) ->addMeta([ 'resource' => route('api.application.users.view', [ 'user' => $user->id, ]), ]) ->respond(201); } // ... }