Files
scrum-poker-internal/app/Services/Rooms/DashboardRoomService.php
T
2026-09-03 11:35:05 +02:00

44 lines
1.2 KiB
PHP

<?php
namespace App\Services\Rooms;
use App\Models\Room;
use App\Models\User;
use Illuminate\Database\Eloquent\Collection;
class DashboardRoomService
{
/**
* @return array{owned: Collection<int, Room>, favorites: Collection<int, Room>}
*/
public function forUser(User $user): array
{
$ownedRooms = $user
->ownedRooms()
->with([
'activePlayers' => fn ($query) => $query
->select(['id', 'room_id', 'user_id', 'name', 'is_moderator', 'created_at'])
->orderByDesc('is_moderator')
->orderBy('created_at'),
])
->withCount('players')
->withCount(['activePlayers as active_player_count'])
->orderByRaw('closed_at IS NOT NULL')
->orderByDesc('last_activity_at')
->get();
$favoriteRooms = $user
->favoriteRooms()
->withCount('players')
->withCount(['activePlayers as active_player_count'])
->orderByRaw('closed_at IS NOT NULL')
->orderByDesc('last_activity_at')
->get();
return [
'owned' => $ownedRooms,
'favorites' => $favoriteRooms,
];
}
}