enh (#21362)
This commit is contained in:
@@ -8,7 +8,7 @@ from sqlalchemy.orm import Session
|
|||||||
from open_webui.internal.db import Base, JSONField, get_db, get_db_context
|
from open_webui.internal.db import Base, JSONField, get_db, get_db_context
|
||||||
from open_webui.models.tags import TagModel, Tag, Tags
|
from open_webui.models.tags import TagModel, Tag, Tags
|
||||||
from open_webui.models.folders import Folders
|
from open_webui.models.folders import Folders
|
||||||
from open_webui.models.chat_messages import ChatMessages
|
from open_webui.models.chat_messages import ChatMessage, ChatMessages
|
||||||
from open_webui.utils.misc import sanitize_data_for_db, sanitize_text_for_db
|
from open_webui.utils.misc import sanitize_data_for_db, sanitize_text_for_db
|
||||||
|
|
||||||
from pydantic import BaseModel, ConfigDict
|
from pydantic import BaseModel, ConfigDict
|
||||||
@@ -621,6 +621,9 @@ class ChatTable:
|
|||||||
) -> bool:
|
) -> bool:
|
||||||
try:
|
try:
|
||||||
with get_db_context(db) as db:
|
with get_db_context(db) as db:
|
||||||
|
# Use subquery to delete chat_messages for shared chats
|
||||||
|
shared_chat_subq = db.query(Chat.id).filter_by(user_id=f"shared-{chat_id}").subquery()
|
||||||
|
db.query(ChatMessage).filter(ChatMessage.chat_id.in_(shared_chat_subq)).delete(synchronize_session=False)
|
||||||
db.query(Chat).filter_by(user_id=f"shared-{chat_id}").delete()
|
db.query(Chat).filter_by(user_id=f"shared-{chat_id}").delete()
|
||||||
db.commit()
|
db.commit()
|
||||||
|
|
||||||
@@ -1410,6 +1413,7 @@ class ChatTable:
|
|||||||
def delete_chat_by_id(self, id: str, db: Optional[Session] = None) -> bool:
|
def delete_chat_by_id(self, id: str, db: Optional[Session] = None) -> bool:
|
||||||
try:
|
try:
|
||||||
with get_db_context(db) as db:
|
with get_db_context(db) as db:
|
||||||
|
db.query(ChatMessage).filter_by(chat_id=id).delete()
|
||||||
db.query(Chat).filter_by(id=id).delete()
|
db.query(Chat).filter_by(id=id).delete()
|
||||||
db.commit()
|
db.commit()
|
||||||
|
|
||||||
@@ -1422,6 +1426,7 @@ class ChatTable:
|
|||||||
) -> bool:
|
) -> bool:
|
||||||
try:
|
try:
|
||||||
with get_db_context(db) as db:
|
with get_db_context(db) as db:
|
||||||
|
db.query(ChatMessage).filter_by(chat_id=id).delete()
|
||||||
db.query(Chat).filter_by(id=id, user_id=user_id).delete()
|
db.query(Chat).filter_by(id=id, user_id=user_id).delete()
|
||||||
db.commit()
|
db.commit()
|
||||||
|
|
||||||
@@ -1436,6 +1441,8 @@ class ChatTable:
|
|||||||
with get_db_context(db) as db:
|
with get_db_context(db) as db:
|
||||||
self.delete_shared_chats_by_user_id(user_id, db=db)
|
self.delete_shared_chats_by_user_id(user_id, db=db)
|
||||||
|
|
||||||
|
chat_id_subq = db.query(Chat.id).filter_by(user_id=user_id).subquery()
|
||||||
|
db.query(ChatMessage).filter(ChatMessage.chat_id.in_(chat_id_subq)).delete(synchronize_session=False)
|
||||||
db.query(Chat).filter_by(user_id=user_id).delete()
|
db.query(Chat).filter_by(user_id=user_id).delete()
|
||||||
db.commit()
|
db.commit()
|
||||||
|
|
||||||
@@ -1448,6 +1455,8 @@ class ChatTable:
|
|||||||
) -> bool:
|
) -> bool:
|
||||||
try:
|
try:
|
||||||
with get_db_context(db) as db:
|
with get_db_context(db) as db:
|
||||||
|
chat_id_subq = db.query(Chat.id).filter_by(user_id=user_id, folder_id=folder_id).subquery()
|
||||||
|
db.query(ChatMessage).filter(ChatMessage.chat_id.in_(chat_id_subq)).delete(synchronize_session=False)
|
||||||
db.query(Chat).filter_by(user_id=user_id, folder_id=folder_id).delete()
|
db.query(Chat).filter_by(user_id=user_id, folder_id=folder_id).delete()
|
||||||
db.commit()
|
db.commit()
|
||||||
|
|
||||||
@@ -1481,6 +1490,9 @@ class ChatTable:
|
|||||||
chats_by_user = db.query(Chat).filter_by(user_id=user_id).all()
|
chats_by_user = db.query(Chat).filter_by(user_id=user_id).all()
|
||||||
shared_chat_ids = [f"shared-{chat.id}" for chat in chats_by_user]
|
shared_chat_ids = [f"shared-{chat.id}" for chat in chats_by_user]
|
||||||
|
|
||||||
|
# Use subquery to delete chat_messages for shared chats
|
||||||
|
shared_id_subq = db.query(Chat.id).filter(Chat.user_id.in_(shared_chat_ids)).subquery()
|
||||||
|
db.query(ChatMessage).filter(ChatMessage.chat_id.in_(shared_id_subq)).delete(synchronize_session=False)
|
||||||
db.query(Chat).filter(Chat.user_id.in_(shared_chat_ids)).delete()
|
db.query(Chat).filter(Chat.user_id.in_(shared_chat_ids)).delete()
|
||||||
db.commit()
|
db.commit()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user