63 lines
1.5 KiB
PHP
63 lines
1.5 KiB
PHP
<?php declare(strict_types=1);
|
|
|
|
namespace App\Services\User;
|
|
|
|
use App\Dto\User\ManyRoleDto;
|
|
use App\Models\User;
|
|
use Illuminate\Support\Carbon;
|
|
use Illuminate\Support\Facades\Hash;
|
|
use Illuminate\Support\Str;
|
|
|
|
final readonly class UserCommandHandler
|
|
{
|
|
public function handleStore(array $data, int|string $password): User
|
|
{
|
|
$data['email'] = Str::lower($data['email']);
|
|
$data['password'] = $this->hashPassword($password);
|
|
$user = User::create($data);
|
|
|
|
return $user;
|
|
}
|
|
|
|
public function handleUpdate(User $user, array $data): User
|
|
{
|
|
if (isset($data['email'])) {
|
|
$data['email'] = Str::lower($data['email']);
|
|
}
|
|
|
|
if (isset($data['password'])) {
|
|
unset($data['password']);
|
|
}
|
|
|
|
$user->update($data);
|
|
$user->touch();
|
|
|
|
return $user;
|
|
}
|
|
|
|
public function handleConfirmationByEmail(User $user): void
|
|
{
|
|
$user->update(['email_verified_at' => new Carbon('NOW')]);
|
|
}
|
|
|
|
public function handleUpdatePassword(User $user, int|string $password): void
|
|
{
|
|
$user->update(['password' => $this->hashPassword($password)]);
|
|
}
|
|
|
|
public function handleSyncRoles(User $user, ManyRoleDto $roles): void
|
|
{
|
|
$user->roles()->sync($roles->toArray());
|
|
}
|
|
|
|
private function hashPassword(int|string $password): string
|
|
{
|
|
return Hash::make($password);
|
|
}
|
|
|
|
public function handleDestroy(User $user): void
|
|
{
|
|
$user->delete();
|
|
}
|
|
}
|