feat(chat): 聊天列表新增未读消息总数
This commit is contained in:
@@ -24,7 +24,8 @@ from core.base.exceptions import WebsocketTooManyRequests
|
|||||||
|
|
||||||
from . import schema
|
from . import schema
|
||||||
from .handlers import socket_manager
|
from .handlers import socket_manager
|
||||||
from .services import websocket_callback, get_user_active_direct_chats, get_unread_messages_per_chat, get_chat
|
from .services import websocket_callback, get_user_active_direct_chats, get_unread_messages_per_chat, get_chat, \
|
||||||
|
get_total_unread_messages_count
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
@@ -34,7 +35,7 @@ chat_router = APIRouter(prefix='/chat', tags=['聊天模块'])
|
|||||||
@chat_router.get(
|
@chat_router.get(
|
||||||
'/all/', summary='获取所有聊天',
|
'/all/', summary='获取所有聊天',
|
||||||
response_model=base_schema.BaseResponse[
|
response_model=base_schema.BaseResponse[
|
||||||
base_schema.Paginated[
|
schema.ChatPaginated[
|
||||||
List[schema.ChatUnreadOut]
|
List[schema.ChatUnreadOut]
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
@@ -67,11 +68,13 @@ async def get_all_chats(
|
|||||||
result = await db_session.execute(query)
|
result = await db_session.execute(query)
|
||||||
chats = result.scalars().all()
|
chats = result.scalars().all()
|
||||||
|
|
||||||
unread_messages_chats_count = await get_unread_messages_per_chat(db_session, chats, login_user)
|
unread_messages_chats = await get_unread_messages_per_chat(db_session, chats, login_user)
|
||||||
|
unread_messages_total = await get_total_unread_messages_count(db_session, login_user)
|
||||||
|
|
||||||
return {
|
return {
|
||||||
'data': {
|
'data': {
|
||||||
'list': unread_messages_chats_count,
|
'list': unread_messages_chats,
|
||||||
|
'unread_messages_total': unread_messages_total,
|
||||||
'next_page': (page * page_size) < total,
|
'next_page': (page * page_size) < total,
|
||||||
'total': total,
|
'total': total,
|
||||||
'page': page,
|
'page': page,
|
||||||
|
|||||||
@@ -4,12 +4,11 @@
|
|||||||
# @Software : PyCharm
|
# @Software : PyCharm
|
||||||
# @Author : xingc
|
# @Author : xingc
|
||||||
# @Desc :
|
# @Desc :
|
||||||
from datetime import datetime
|
|
||||||
from typing import Literal, Optional, List
|
from typing import Literal, Optional, List
|
||||||
|
|
||||||
from pydantic import BaseModel, conint, UUID4
|
from pydantic import BaseModel, conint, UUID4
|
||||||
|
|
||||||
from core.base.schema import MessageType
|
from core.base.schema import MessageType, Paginated
|
||||||
from core.routers.user.schema import LiteUser
|
from core.routers.user.schema import LiteUser
|
||||||
|
|
||||||
|
|
||||||
@@ -32,6 +31,10 @@ class PreviewMessage(BaseModel):
|
|||||||
content: str
|
content: str
|
||||||
|
|
||||||
|
|
||||||
|
class ChatPaginated(Paginated):
|
||||||
|
unread_messages_total: int
|
||||||
|
|
||||||
|
|
||||||
class ChatUnreadOut(BaseModel):
|
class ChatUnreadOut(BaseModel):
|
||||||
chat_guid: UUID4
|
chat_guid: UUID4
|
||||||
created_at: str
|
created_at: str
|
||||||
|
|||||||
@@ -40,6 +40,25 @@ async def get_user_active_direct_chats(
|
|||||||
|
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
async def get_total_unread_messages_count(db_session: AsyncSession, login_user: LoginUser) -> int:
|
||||||
|
"""获取未读消息总数"""
|
||||||
|
query = (
|
||||||
|
select(func.count(Message.id))
|
||||||
|
.join(
|
||||||
|
ChatParticipant,
|
||||||
|
and_(
|
||||||
|
Message.chat_id == ChatParticipant.chat_id,
|
||||||
|
ChatParticipant.user_id == login_user.user_id
|
||||||
|
)
|
||||||
|
)
|
||||||
|
.filter(
|
||||||
|
Message.id > ChatParticipant.last_read_message_id,
|
||||||
|
Message.user_id != login_user.user_id,
|
||||||
|
ChatParticipant.is_deleted == False
|
||||||
|
)
|
||||||
|
)
|
||||||
|
result = await db_session.execute(query)
|
||||||
|
return result.scalar()
|
||||||
|
|
||||||
async def get_chat_unread_messages_count(db_session: AsyncSession, login_user: LoginUser, chats):
|
async def get_chat_unread_messages_count(db_session: AsyncSession, login_user: LoginUser, chats):
|
||||||
"""查询未读消息的预览"""
|
"""查询未读消息的预览"""
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
alembic
|
alembic
|
||||||
alembic-async
|
alembic[async]
|
||||||
Brotli
|
Brotli
|
||||||
curl_cffi
|
curl_cffi
|
||||||
httpx
|
httpx
|
||||||
|
|||||||
Reference in New Issue
Block a user