diff --git a/app/router/v2/room.py b/app/router/v2/room.py index 9a66e8a..1a05fe0 100644 --- a/app/router/v2/room.py +++ b/app/router/v2/room.py @@ -158,6 +158,8 @@ async def create_room( user_id = current_user.id db_room = await create_playlist_room_from_api(db, room, user_id) await _participate_room(db_room.id, user_id, db_room, db, redis) + await db.commit() + await db.refresh(db_room) created_room = APICreatedRoom.model_validate(await RoomResp.from_db(db_room, db)) created_room.error = "" return created_room @@ -261,7 +263,8 @@ async def remove_user_from_room( ).first() if participated_user is not None: participated_user.left_at = datetime.now(UTC) - db_room.participant_count -= 1 + if db_room.participant_count > 0: + db_room.participant_count -= 1 await redis.publish("chat:room:left", f"{db_room.channel_id}:{user_id}") await db.commit() return None diff --git a/app/signalr/hub/multiplayer.py b/app/signalr/hub/multiplayer.py index 2fbc028..81b2bdb 100644 --- a/app/signalr/hub/multiplayer.py +++ b/app/signalr/hub/multiplayer.py @@ -413,6 +413,7 @@ class MultiplayerHub(Hub[MultiplayerClientState]): host_id=room.room.host.user_id, ) ) + await session.commit() async def setting_changed(self, room: ServerMultiplayerRoom, beatmap_changed: bool): await self.change_db_settings(room) @@ -925,7 +926,8 @@ class MultiplayerHub(Hub[MultiplayerClientState]): db_room = await session.get(Room, room.room.room_id) if db_room is None: raise InvokeException("Room does not exist in database") - db_room.participant_count -= 1 + if db_room.participant_count > 0: + db_room.participant_count -= 1 if len(room.room.users) == 0: await self.end_room(room)