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();
 | 
						|
    }
 | 
						|
}
 |