From 854f5bcbeaeb22af8fe10ac518817321478852fd Mon Sep 17 00:00:00 2001 From: xingc Date: Wed, 14 May 2025 18:37:51 +0800 Subject: [PATCH] =?UTF-8?q?fix(chat):=20=E4=BF=AE=E5=A4=8D=E6=96=B0?= =?UTF-8?q?=E5=BB=BA=E8=81=8A=E5=A4=A9=E5=88=A0=E9=99=A4=E5=A4=B1=E8=B4=A5?= =?UTF-8?q?=20=E8=B0=83=E6=95=B4=E6=9B=B4=E6=96=B0sql?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/routers/chat/routes.py | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/core/routers/chat/routes.py b/core/routers/chat/routes.py index 40a7c54..8091635 100644 --- a/core/routers/chat/routes.py +++ b/core/routers/chat/routes.py @@ -10,9 +10,9 @@ from json.decoder import JSONDecodeError from fastapi import APIRouter, Query, Depends, WebSocket, WebSocketDisconnect, HTTPException, status from fastapi_limiter.depends import WebSocketRateLimiter -from sqlalchemy import select, func, and_, exists, distinct +from sqlalchemy import select, func, and_, exists, update from sqlalchemy.ext.asyncio import AsyncSession -from sqlalchemy.orm import selectinload, aliased +from sqlalchemy.orm import selectinload from core.base import schema as base_schema from core.db.crud import CRUD @@ -208,11 +208,23 @@ async def delete_single_chat( login_user: LoginUser = Depends(get_current_user_form_http), db_session: AsyncSession = Depends(get_async_session), ): - chat = await CRUD(db_session, Chat).update( - data={'is_deleted': True}, - filters={'chat_guid': chat_guid, 'user_id': login_user.user_id} + subquery = ( + select(chat_participant.c.chat_id) + .where(chat_participant.c.user_id == login_user.user_id) + ).scalar_subquery() + + query = ( + update(Chat) + .where(and_( + Chat.id.in_(subquery), + Chat.guid == chat_guid + )) + .values(is_deleted=True) ) - if chat is None: + result = await db_session.execute(query) + await db_session.commit() + + if result.rowcount == 0: raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail='聊天不存在') return {'message': '聊天已删除'}