mirror of
https://github.com/ericasch6/scrum-poker-internal.git
synced 2026-10-13 14:52:09 +00:00
44 lines
1.2 KiB
PHP
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,
|
|
];
|
|
}
|
|
}
|