mirror of
https://github.com/ericasch6/scrum-poker-internal.git
synced 2026-10-15 10:06:10 +00:00
feat: added settings in room to kick
This commit is contained in:
@@ -180,20 +180,41 @@ class RoomParticipationService
|
||||
return $player;
|
||||
}
|
||||
|
||||
public function kick(Room $room, Player $player, User $user): void
|
||||
{
|
||||
$stateVersion = DB::transaction(function () use ($room, $player, $user): ?int {
|
||||
public function kick(
|
||||
Room $room,
|
||||
Player $player,
|
||||
?User $user,
|
||||
?Player $currentPlayer,
|
||||
): void {
|
||||
$stateVersion = DB::transaction(function () use ($room, $player, $user, $currentPlayer): ?int {
|
||||
$lockedRoom = Room::query()
|
||||
->lockForUpdate()
|
||||
->findOrFail($room->id);
|
||||
|
||||
abort_unless($lockedRoom->owner_id === $user->id, 403);
|
||||
$lockedCurrentPlayer = $currentPlayer === null
|
||||
? null
|
||||
: $lockedRoom->activePlayers()
|
||||
->lockForUpdate()
|
||||
->find($currentPlayer->id);
|
||||
$isOwner = $user !== null && $lockedRoom->owner_id === $user->id;
|
||||
$participantCanManage = ! $lockedRoom->isClosed()
|
||||
&& $lockedCurrentPlayer !== null
|
||||
&& ($lockedCurrentPlayer->is_moderator
|
||||
|| $lockedRoom->allow_participants_to_manage_rounds);
|
||||
|
||||
abort_unless($isOwner || $participantCanManage, 403);
|
||||
|
||||
$lockedPlayer = $lockedRoom->players()
|
||||
->lockForUpdate()
|
||||
->findOrFail($player->id);
|
||||
|
||||
abort_if($lockedPlayer->user_id === $lockedRoom->owner_id, 403);
|
||||
abort_if(
|
||||
$lockedPlayer->is_moderator
|
||||
|| ($lockedRoom->owner_id !== null
|
||||
&& $lockedPlayer->user_id === $lockedRoom->owner_id)
|
||||
|| $lockedCurrentPlayer?->id === $lockedPlayer->id,
|
||||
403,
|
||||
);
|
||||
|
||||
if ($lockedPlayer->inactive_at !== null) {
|
||||
return null;
|
||||
|
||||
Reference in New Issue
Block a user