60 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			60 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php declare(strict_types=1);
 | 
						|
 | 
						|
namespace App\Repositories;
 | 
						|
 | 
						|
use App\Contracts\Search;
 | 
						|
use App\Models\Role;
 | 
						|
use App\Dto\Builder\Role as RoleBuilderDto;
 | 
						|
use App\Services\Role\BuilderCommand;
 | 
						|
use App\Services\Search\CreateSearchInstanceCommand;
 | 
						|
use Illuminate\Database\Eloquent\Builder;
 | 
						|
 | 
						|
final readonly class RoleRepository
 | 
						|
{
 | 
						|
    public function __construct(
 | 
						|
        private CreateSearchInstanceCommand $createSearchInstanceCommand,
 | 
						|
        private BuilderCommand $builderCommand
 | 
						|
    ) { }
 | 
						|
 | 
						|
    public function getRoleById(int $id): ?Role
 | 
						|
    {
 | 
						|
        return Role::query()->where('id', $id)->first();
 | 
						|
    }
 | 
						|
 | 
						|
    public function getRoleByCode(string $code): ?Role
 | 
						|
    {
 | 
						|
        return Role::query()->where('code', $code)->first();
 | 
						|
    }
 | 
						|
 | 
						|
    public function getRoles(RoleBuilderDto $roleBuilderDto, array $with = []): Search
 | 
						|
    {
 | 
						|
        $query = $this->builderCommand->execute(
 | 
						|
            query: Role::query()->with($with),
 | 
						|
            roleBuilderDto: $roleBuilderDto
 | 
						|
        );
 | 
						|
 | 
						|
        return $this->createSearchInstanceCommand->execute($query);
 | 
						|
    }
 | 
						|
 | 
						|
    public function getRolesForSelect(array $withExcepts = []): array
 | 
						|
    {
 | 
						|
        return Role::query()
 | 
						|
            ->when($withExcepts, function (Builder $query, array $withExcepts) {
 | 
						|
                $query->withTrashed()->whereNull('deleted_at')->orWhereIn('id', $withExcepts);
 | 
						|
            })
 | 
						|
            ->pluck('name', 'id')
 | 
						|
            ->toArray();
 | 
						|
    }
 | 
						|
 | 
						|
    public function isExistsCode(string $code, ?int $exceptId = null): bool
 | 
						|
    {
 | 
						|
        return Role::query()
 | 
						|
            ->where('code', $code)
 | 
						|
            ->when($exceptId, function (Builder $query, int $exceptId) {
 | 
						|
                $query->where('id', '!=', $exceptId);
 | 
						|
            })
 | 
						|
            ->withTrashed()
 | 
						|
            ->exists();
 | 
						|
    }
 | 
						|
}
 |