feat(chats): add per-user pinned chats and pinned sorting

This commit is contained in:
2026-03-08 09:54:43 +03:00
parent fdf973eeab
commit 8cdcd9531d
9 changed files with 139 additions and 4 deletions

View File

@@ -64,6 +64,7 @@ async def serialize_chat_for_user(db: AsyncSession, *, user_id: int, chat: Chat)
unread_count = await repository.get_unread_count_for_chat(db, chat_id=chat.id, user_id=user_id)
user_setting = await repository.get_chat_user_setting(db, chat_id=chat.id, user_id=user_id)
archived = bool(user_setting and user_setting.archived)
pinned = bool(user_setting and user_setting.pinned)
return ChatRead.model_validate(
{
@@ -77,6 +78,7 @@ async def serialize_chat_for_user(db: AsyncSession, *, user_id: int, chat: Chat)
"is_public": chat.is_public,
"is_saved": chat.is_saved,
"archived": archived,
"pinned": pinned,
"unread_count": unread_count,
"pinned_message_id": chat.pinned_message_id,
"members_count": members_count,
@@ -501,3 +503,17 @@ async def set_chat_archived_for_user(
await db.commit()
await db.refresh(chat)
return chat
async def set_chat_pinned_for_user(
db: AsyncSession,
*,
chat_id: int,
user_id: int,
pinned: bool,
) -> Chat:
chat, _membership = await _get_chat_and_membership(db, chat_id=chat_id, user_id=user_id)
await repository.upsert_chat_pinned_setting(db, chat_id=chat_id, user_id=user_id, pinned=pinned)
await db.commit()
await db.refresh(chat)
return chat