fix(realtime,ui): sync message deletes and channel delete/leave behavior
All checks were successful
CI / test (push) Successful in 23s

This commit is contained in:
2026-03-08 12:52:31 +03:00
parent 613edbecfe
commit 82322c4d42
4 changed files with 64 additions and 15 deletions

View File

@@ -13,6 +13,7 @@ from app.messages.schemas import (
MessageStatusUpdateRequest,
MessageUpdateRequest,
)
from app.messages.repository import get_message_by_id
from app.messages.service import (
create_chat_message,
delete_message,
@@ -87,7 +88,10 @@ async def remove_message(
current_user: User = Depends(get_current_user),
) -> None:
if for_all:
message = await get_message_by_id(db, message_id)
await delete_message_for_all(db, message_id=message_id, user_id=current_user.id)
if message:
await realtime_gateway.publish_chat_updated(chat_id=message.chat_id)
return
await delete_message(db, message_id=message_id, user_id=current_user.id)

View File

@@ -206,6 +206,11 @@ async def delete_message(db: AsyncSession, *, message_id: int, user_id: int) ->
membership = await chats_repository.get_chat_member(db, chat_id=message.chat_id, user_id=user_id)
if not membership:
raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail="You are not a member of this chat")
if chat.type == ChatType.CHANNEL and not chat.is_saved:
raise HTTPException(
status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
detail="Channel messages can only be deleted for everyone",
)
# Telegram-like default: delete only for current user.
hidden = await repository.get_hidden_message(db, message_id=message.id, user_id=user_id)
if not hidden: