count(); $activeRoles = Role::query()->count(); $servicesCount = ConnectedApp::query()->count(); $revokedTodayCount = RestrictedUserPermission::query() ->whereDate('created_at', today()) ->count(); return new DashboardStatsData( totalUsers: $totalUsers, activeRoles: $activeRoles, servicesCount: $servicesCount, revokedTodayCount: $revokedTodayCount, ); } /** * Get all roles mapped to DTOs for the roles manager. * * @return DataCollection */ public function getRoles(): DataCollection { $roles = Role::query() ->visible() ->with(['users', 'apps']) ->get(); $mappedRoles = $roles->map(function ($role) { /** @var Role $role */ /** @var \Illuminate\Database\Eloquent\Collection $users */ $users = $role->users; /** @var \Illuminate\Database\Eloquent\Collection $apps */ $apps = $role->apps; return new RoleData( name: $role->name, users: UserData::collect($users->map(fn ($user) => new UserData( name: $user->name, email: $user->email, active: true, )), DataCollection::class), services: ServiceData::collect($apps->map(fn ($app) => new ServiceData( name: $app->name, )), DataCollection::class), status: RolesStatusEnum::Active, ); }); return RoleData::collect($mappedRoles, DataCollection::class); } /** * Get the latest registered users. * * @return DataCollection */ public function getLatestUsers(): DataCollection { $users = User::query() ->with(['roles']) ->orderBy('created_at', 'desc') ->take(5) ->get(); $mappedUsers = $users->map(function ($user) { /** @var User $user */ /** @var \Illuminate\Database\Eloquent\Collection $roles */ $roles = $user->roles; return new LatestUserData( name: $user->name, email: $user->email, initials: $user->initials(), registeredAt: $user->created_at ? $user->created_at->diffForHumans() : 'unknown', roles: RoleData::collect($roles->map(fn ($role) => new RoleData( name: $role->name, users: UserData::collect([], DataCollection::class), services: ServiceData::collect([], DataCollection::class), status: RolesStatusEnum::Active, )), DataCollection::class), ); }); return LatestUserData::collect($mappedUsers, DataCollection::class); } /** * Get all user role and service assignments. * * @return DataCollection */ public function getUserAssignments(): DataCollection { $users = User::query() ->with(['roles.apps']) ->orderBy('id') ->get(); $mappedUsers = $users->map(function ($user) { /** @var User $user */ /** @var \Illuminate\Database\Eloquent\Collection $roles */ $roles = $user->roles; return new UserData( name: $user->name, email: $user->email, active: true, roles: RoleData::collect($roles->map(function ($role) { /** @var Role $role */ /** @var \Illuminate\Database\Eloquent\Collection $apps */ $apps = $role->apps; return new RoleData( name: $role->name, users: UserData::collect([], DataCollection::class), services: ServiceData::collect($apps->map(fn ($app) => new ServiceData( name: $app->name, )), DataCollection::class), status: RolesStatusEnum::Active, ); }), DataCollection::class), ); }); return UserData::collect($mappedUsers, DataCollection::class); } }