singleloginsystem/app/Services/RoleService.php
= c680c1ae6e Feat: implement role and app management
- Added services (`RoleService`, `AppRoleService`, `AppsPermissionService`) to handle role creation, app assignments, and permissions.
- Introduced new Livewire forms for creating roles and assigning apps (`CreateRoleForm`, `AssignAppToRoleForm`).
- Built dynamic Blade views for role and app management, including modals and reusable components.
- Removed outdated `fluxui-development` skill documentation.
2026-05-19 11:13:35 +00:00

65 lines
1.5 KiB
PHP

<?php
declare(strict_types=1);
namespace App\Services;
use App\Data\Role\{CreateRoleData, RoleData};
use App\Models\Role;
use Illuminate\Support\Facades\DB;
use InvalidArgumentException;
use NoDiscard;
use Spatie\LaravelData\PaginatedDataCollection;
use Throwable;
final class RoleService
{
/**
* Create a new role.
* Returns the created role DTO
*
* @throws Throwable when an error occurs during the creation.
*/
#[NoDiscard]
public function create(CreateRoleData $data): RoleData
{
$role = DB::transaction(fn () => Role::query()->create([
'name' => $data->name,
'guard_name' => 'web',
]));
return RoleData::from($role);
}
/**
* @throws InvalidArgumentException when id is invalid.
* @throws Throwable when an error occurs during the deletion.
*/
public function delete(int $id): void
{
if ($id <= 0) {
throw new InvalidArgumentException('Invalid id');
}
DB::transaction(function () use ($id): void {
Role::query()->findOrFail($id)->delete();
});
}
/**
* Returns a Paginated Collection of roles with their connected apps DTO
*
* @return PaginatedDataCollection<int, RoleData>
*/
#[NoDiscard]
public function getAll(): PaginatedDataCollection
{
$roles = Role::query()
->with('apps')
->orderBy('id')
->paginate();
return RoleData::collect($roles, PaginatedDataCollection::class);
}
}