feat(room): очередь поднятых рук видна всем + отключаемый модуль
Раньше HandQueueMenu.tsx рендерился только организатору — теперь очередь видит любой участник, но опустить чужую руку по-прежнему может только организатор (сервер это уже проверял, менял только фронт). Кнопка «Опустить» показывается у записи, только если это своя рука или пользователь — организатор. Модуль «поднятие руки» (кнопка «Рука» + очередь целиком) — отключаемый в админке (instance_settings.hand_queue, дефолт enabled=true, как у chat_enabled). Настройка едет участнику в JoinOut ещё до входа в комнату; выключенный модуль гасит кнопки и на фронте, и на бэке — raise_hand/lower_hand отклоняются кодом hand_queue_disabled, если модуль выключен, даже если у клиента на руках старый JoinOut.
This commit is contained in:
@@ -148,6 +148,15 @@ class ChatService:
|
||||
raise WrongRoomError
|
||||
return conference
|
||||
|
||||
async def hand_queue_enabled(self) -> bool:
|
||||
"""Тоггл инстанса `hand_queue.enabled` — снимается один раз при подключении WS
|
||||
(см. `api/chat.py::chat_websocket`), а не на каждое сообщение: та же
|
||||
осознанная «застылость» на время жизни соединения, что и у
|
||||
`is_organizer` в `_pump_websocket_to_service` — переключение модуля
|
||||
администратором применяется со следующего подключения."""
|
||||
cfg = await InstanceSettingsService(self._session).get()
|
||||
return cfg.hand_queue.enabled
|
||||
|
||||
async def history(self, conference: Conference) -> list[ChatMessageOut]:
|
||||
"""Последние сообщения открытой сессии конференции (пусто, если сессии ещё нет)."""
|
||||
session_record = await self._sessions.get_open_by_conference(conference.id)
|
||||
|
||||
Reference in New Issue
Block a user