| 
									
										
										
										
											2023-12-26 13:44:28 +08:00
										 |  |  | from pydantic import BaseModel | 
					
						
							|  |  |  | from typing import List, Union, Optional | 
					
						
							|  |  |  | from peewee import * | 
					
						
							|  |  |  | from playhouse.shortcuts import model_to_dict | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import json | 
					
						
							|  |  |  | import uuid | 
					
						
							|  |  |  | import time | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-05-26 16:15:48 +08:00
										 |  |  | from apps.webui.internal.db import DB | 
					
						
							| 
									
										
										
										
											2023-12-26 13:44:28 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | #################### | 
					
						
							|  |  |  | # Chat DB Schema | 
					
						
							|  |  |  | #################### | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class Chat(Model): | 
					
						
							|  |  |  |     id = CharField(unique=True) | 
					
						
							| 
									
										
										
										
											2023-12-26 15:43:21 +08:00
										 |  |  |     user_id = CharField() | 
					
						
							| 
									
										
										
										
											2024-04-25 01:10:18 +08:00
										 |  |  |     title = TextField() | 
					
						
							| 
									
										
										
										
											2023-12-26 13:44:28 +08:00
										 |  |  |     chat = TextField()  # Save Chat JSON as Text | 
					
						
							| 
									
										
										
										
											2024-04-21 07:24:18 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-04-25 01:10:18 +08:00
										 |  |  |     created_at = BigIntegerField() | 
					
						
							|  |  |  |     updated_at = BigIntegerField() | 
					
						
							| 
									
										
										
										
											2024-04-21 07:24:18 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-04-01 05:02:40 +08:00
										 |  |  |     share_id = CharField(null=True, unique=True) | 
					
						
							| 
									
										
										
										
											2024-04-21 06:03:39 +08:00
										 |  |  |     archived = BooleanField(default=False) | 
					
						
							| 
									
										
										
										
											2023-12-26 13:44:28 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     class Meta: | 
					
						
							|  |  |  |         database = DB | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class ChatModel(BaseModel): | 
					
						
							|  |  |  |     id: str | 
					
						
							|  |  |  |     user_id: str | 
					
						
							|  |  |  |     title: str | 
					
						
							| 
									
										
										
										
											2023-12-26 15:43:21 +08:00
										 |  |  |     chat: str | 
					
						
							| 
									
										
										
										
											2024-04-21 07:24:18 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     created_at: int  # timestamp in epoch | 
					
						
							|  |  |  |     updated_at: int  # timestamp in epoch | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-04-01 05:02:40 +08:00
										 |  |  |     share_id: Optional[str] = None | 
					
						
							| 
									
										
										
										
											2024-04-21 06:03:39 +08:00
										 |  |  |     archived: bool = False | 
					
						
							| 
									
										
										
										
											2023-12-26 13:44:28 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #################### | 
					
						
							|  |  |  | # Forms | 
					
						
							|  |  |  | #################### | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class ChatForm(BaseModel): | 
					
						
							|  |  |  |     chat: dict | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-12-27 02:41:55 +08:00
										 |  |  | class ChatTitleForm(BaseModel): | 
					
						
							|  |  |  |     title: str | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-12-26 17:27:43 +08:00
										 |  |  | class ChatResponse(BaseModel): | 
					
						
							| 
									
										
										
										
											2023-12-26 13:44:28 +08:00
										 |  |  |     id: str | 
					
						
							| 
									
										
										
										
											2023-12-26 17:27:43 +08:00
										 |  |  |     user_id: str | 
					
						
							|  |  |  |     title: str | 
					
						
							|  |  |  |     chat: dict | 
					
						
							| 
									
										
										
										
											2024-04-21 07:24:18 +08:00
										 |  |  |     updated_at: int  # timestamp in epoch | 
					
						
							|  |  |  |     created_at: int  # timestamp in epoch | 
					
						
							| 
									
										
										
										
											2024-04-01 05:02:40 +08:00
										 |  |  |     share_id: Optional[str] = None  # id of the chat to be shared | 
					
						
							| 
									
										
										
										
											2024-04-21 08:32:32 +08:00
										 |  |  |     archived: bool | 
					
						
							| 
									
										
										
										
											2023-12-26 13:44:28 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class ChatTitleIdResponse(BaseModel): | 
					
						
							|  |  |  |     id: str | 
					
						
							|  |  |  |     title: str | 
					
						
							| 
									
										
										
										
											2024-04-21 07:24:18 +08:00
										 |  |  |     updated_at: int | 
					
						
							|  |  |  |     created_at: int | 
					
						
							| 
									
										
										
										
											2023-12-26 13:44:28 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class ChatTable: | 
					
						
							|  |  |  |     def __init__(self, db): | 
					
						
							|  |  |  |         self.db = db | 
					
						
							|  |  |  |         db.create_tables([Chat]) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-01-18 18:55:25 +08:00
										 |  |  |     def insert_new_chat(self, user_id: str, form_data: ChatForm) -> Optional[ChatModel]: | 
					
						
							| 
									
										
										
										
											2023-12-26 13:44:28 +08:00
										 |  |  |         id = str(uuid.uuid4()) | 
					
						
							|  |  |  |         chat = ChatModel( | 
					
						
							|  |  |  |             **{ | 
					
						
							|  |  |  |                 "id": id, | 
					
						
							|  |  |  |                 "user_id": user_id, | 
					
						
							| 
									
										
										
										
											2024-02-04 17:07:18 +08:00
										 |  |  |                 "title": ( | 
					
						
							|  |  |  |                     form_data.chat["title"] if "title" in form_data.chat else "New Chat" | 
					
						
							|  |  |  |                 ), | 
					
						
							| 
									
										
										
										
											2023-12-26 15:43:21 +08:00
										 |  |  |                 "chat": json.dumps(form_data.chat), | 
					
						
							| 
									
										
										
										
											2024-04-21 07:24:18 +08:00
										 |  |  |                 "created_at": int(time.time()), | 
					
						
							|  |  |  |                 "updated_at": int(time.time()), | 
					
						
							| 
									
										
										
										
											2024-01-18 18:55:25 +08:00
										 |  |  |             } | 
					
						
							|  |  |  |         ) | 
					
						
							| 
									
										
										
										
											2023-12-26 13:44:28 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |         result = Chat.create(**chat.model_dump()) | 
					
						
							|  |  |  |         return chat if result else None | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def update_chat_by_id(self, id: str, chat: dict) -> Optional[ChatModel]: | 
					
						
							|  |  |  |         try: | 
					
						
							| 
									
										
										
										
											2023-12-26 17:27:43 +08:00
										 |  |  |             query = Chat.update( | 
					
						
							|  |  |  |                 chat=json.dumps(chat), | 
					
						
							|  |  |  |                 title=chat["title"] if "title" in chat else "New Chat", | 
					
						
							| 
									
										
										
										
											2024-04-21 07:24:18 +08:00
										 |  |  |                 updated_at=int(time.time()), | 
					
						
							| 
									
										
										
										
											2023-12-26 17:27:43 +08:00
										 |  |  |             ).where(Chat.id == id) | 
					
						
							| 
									
										
										
										
											2023-12-26 13:44:28 +08:00
										 |  |  |             query.execute() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             chat = Chat.get(Chat.id == id) | 
					
						
							|  |  |  |             return ChatModel(**model_to_dict(chat)) | 
					
						
							|  |  |  |         except: | 
					
						
							|  |  |  |             return None | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-04-02 22:42:37 +08:00
										 |  |  |     def insert_shared_chat_by_chat_id(self, chat_id: str) -> Optional[ChatModel]: | 
					
						
							| 
									
										
										
										
											2024-04-01 05:02:40 +08:00
										 |  |  |         # Get the existing chat to share | 
					
						
							|  |  |  |         chat = Chat.get(Chat.id == chat_id) | 
					
						
							|  |  |  |         # Check if the chat is already shared | 
					
						
							|  |  |  |         if chat.share_id: | 
					
						
							|  |  |  |             return self.get_chat_by_id_and_user_id(chat.share_id, "shared") | 
					
						
							|  |  |  |         # Create a new chat with the same data, but with a new ID | 
					
						
							|  |  |  |         shared_chat = ChatModel( | 
					
						
							|  |  |  |             **{ | 
					
						
							|  |  |  |                 "id": str(uuid.uuid4()), | 
					
						
							| 
									
										
										
										
											2024-04-02 21:33:59 +08:00
										 |  |  |                 "user_id": f"shared-{chat_id}", | 
					
						
							| 
									
										
										
										
											2024-04-01 05:02:40 +08:00
										 |  |  |                 "title": chat.title, | 
					
						
							|  |  |  |                 "chat": chat.chat, | 
					
						
							| 
									
										
										
										
											2024-04-21 07:29:14 +08:00
										 |  |  |                 "created_at": chat.created_at, | 
					
						
							|  |  |  |                 "updated_at": int(time.time()), | 
					
						
							| 
									
										
										
										
											2024-04-01 05:02:40 +08:00
										 |  |  |             } | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |         shared_result = Chat.create(**shared_chat.model_dump()) | 
					
						
							|  |  |  |         # Update the original chat with the share_id | 
					
						
							|  |  |  |         result = ( | 
					
						
							|  |  |  |             Chat.update(share_id=shared_chat.id).where(Chat.id == chat_id).execute() | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return shared_chat if (shared_result and result) else None | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-04-02 22:42:37 +08:00
										 |  |  |     def update_shared_chat_by_chat_id(self, chat_id: str) -> Optional[ChatModel]: | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  |             print("update_shared_chat_by_id") | 
					
						
							|  |  |  |             chat = Chat.get(Chat.id == chat_id) | 
					
						
							|  |  |  |             print(chat) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             query = Chat.update( | 
					
						
							|  |  |  |                 title=chat.title, | 
					
						
							|  |  |  |                 chat=chat.chat, | 
					
						
							|  |  |  |             ).where(Chat.id == chat.share_id) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             query.execute() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             chat = Chat.get(Chat.id == chat.share_id) | 
					
						
							|  |  |  |             return ChatModel(**model_to_dict(chat)) | 
					
						
							|  |  |  |         except: | 
					
						
							|  |  |  |             return None | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-04-02 21:33:59 +08:00
										 |  |  |     def delete_shared_chat_by_chat_id(self, chat_id: str) -> bool: | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  |             query = Chat.delete().where(Chat.user_id == f"shared-{chat_id}") | 
					
						
							|  |  |  |             query.execute()  # Remove the rows, return number of rows removed. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             return True | 
					
						
							|  |  |  |         except: | 
					
						
							|  |  |  |             return False | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-04-01 05:02:40 +08:00
										 |  |  |     def update_chat_share_id_by_id( | 
					
						
							| 
									
										
										
										
											2024-04-02 22:06:07 +08:00
										 |  |  |         self, id: str, share_id: Optional[str] | 
					
						
							| 
									
										
										
										
											2024-04-01 05:02:40 +08:00
										 |  |  |     ) -> Optional[ChatModel]: | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  |             query = Chat.update( | 
					
						
							|  |  |  |                 share_id=share_id, | 
					
						
							|  |  |  |             ).where(Chat.id == id) | 
					
						
							|  |  |  |             query.execute() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             chat = Chat.get(Chat.id == id) | 
					
						
							|  |  |  |             return ChatModel(**model_to_dict(chat)) | 
					
						
							|  |  |  |         except: | 
					
						
							|  |  |  |             return None | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-04-21 06:03:39 +08:00
										 |  |  |     def toggle_chat_archive_by_id(self, id: str) -> Optional[ChatModel]: | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  |             chat = self.get_chat_by_id(id) | 
					
						
							|  |  |  |             query = Chat.update( | 
					
						
							|  |  |  |                 archived=(not chat.archived), | 
					
						
							|  |  |  |             ).where(Chat.id == id) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             query.execute() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             chat = Chat.get(Chat.id == id) | 
					
						
							|  |  |  |             return ChatModel(**model_to_dict(chat)) | 
					
						
							|  |  |  |         except: | 
					
						
							|  |  |  |             return None | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-05-26 17:00:31 +08:00
										 |  |  |     def archive_all_chats_by_user_id(self, user_id: str) -> bool: | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  |             chats = self.get_chats_by_user_id(user_id) | 
					
						
							|  |  |  |             for chat in chats: | 
					
						
							|  |  |  |                 query = Chat.update( | 
					
						
							|  |  |  |                     archived=True, | 
					
						
							|  |  |  |                 ).where(Chat.id == chat.id) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 query.execute() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             return True | 
					
						
							|  |  |  |         except: | 
					
						
							|  |  |  |             return False | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-04-28 06:12:57 +08:00
										 |  |  |     def get_archived_chat_list_by_user_id( | 
					
						
							| 
									
										
										
										
											2024-04-21 07:24:18 +08:00
										 |  |  |         self, user_id: str, skip: int = 0, limit: int = 50 | 
					
						
							|  |  |  |     ) -> List[ChatModel]: | 
					
						
							|  |  |  |         return [ | 
					
						
							|  |  |  |             ChatModel(**model_to_dict(chat)) | 
					
						
							|  |  |  |             for chat in Chat.select() | 
					
						
							|  |  |  |             .where(Chat.archived == True) | 
					
						
							|  |  |  |             .where(Chat.user_id == user_id) | 
					
						
							|  |  |  |             .order_by(Chat.updated_at.desc()) | 
					
						
							|  |  |  |             # .limit(limit) | 
					
						
							|  |  |  |             # .offset(skip) | 
					
						
							|  |  |  |         ] | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-04-28 06:12:57 +08:00
										 |  |  |     def get_chat_list_by_user_id( | 
					
						
							| 
									
										
										
										
											2024-05-26 17:00:31 +08:00
										 |  |  |         self, | 
					
						
							|  |  |  |         user_id: str, | 
					
						
							|  |  |  |         include_archived: bool = False, | 
					
						
							|  |  |  |         skip: int = 0, | 
					
						
							|  |  |  |         limit: int = 50, | 
					
						
							| 
									
										
										
										
											2024-01-18 18:55:25 +08:00
										 |  |  |     ) -> List[ChatModel]: | 
					
						
							| 
									
										
										
										
											2024-05-26 17:00:31 +08:00
										 |  |  |         if include_archived: | 
					
						
							|  |  |  |             return [ | 
					
						
							|  |  |  |                 ChatModel(**model_to_dict(chat)) | 
					
						
							|  |  |  |                 for chat in Chat.select() | 
					
						
							|  |  |  |                 .where(Chat.user_id == user_id) | 
					
						
							|  |  |  |                 .order_by(Chat.updated_at.desc()) | 
					
						
							|  |  |  |                 # .limit(limit) | 
					
						
							|  |  |  |                 # .offset(skip) | 
					
						
							|  |  |  |             ] | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             return [ | 
					
						
							|  |  |  |                 ChatModel(**model_to_dict(chat)) | 
					
						
							|  |  |  |                 for chat in Chat.select() | 
					
						
							|  |  |  |                 .where(Chat.archived == False) | 
					
						
							|  |  |  |                 .where(Chat.user_id == user_id) | 
					
						
							|  |  |  |                 .order_by(Chat.updated_at.desc()) | 
					
						
							|  |  |  |                 # .limit(limit) | 
					
						
							|  |  |  |                 # .offset(skip) | 
					
						
							|  |  |  |             ] | 
					
						
							| 
									
										
										
										
											2023-12-26 13:44:28 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-04-28 06:12:57 +08:00
										 |  |  |     def get_chat_list_by_chat_ids( | 
					
						
							| 
									
										
										
										
											2024-01-18 18:55:25 +08:00
										 |  |  |         self, chat_ids: List[str], skip: int = 0, limit: int = 50 | 
					
						
							|  |  |  |     ) -> List[ChatModel]: | 
					
						
							|  |  |  |         return [ | 
					
						
							|  |  |  |             ChatModel(**model_to_dict(chat)) | 
					
						
							|  |  |  |             for chat in Chat.select() | 
					
						
							| 
									
										
										
										
											2024-04-21 06:03:39 +08:00
										 |  |  |             .where(Chat.archived == False) | 
					
						
							| 
									
										
										
										
											2024-01-18 18:55:25 +08:00
										 |  |  |             .where(Chat.id.in_(chat_ids)) | 
					
						
							| 
									
										
										
										
											2024-04-21 07:24:18 +08:00
										 |  |  |             .order_by(Chat.updated_at.desc()) | 
					
						
							| 
									
										
										
										
											2024-01-18 18:55:25 +08:00
										 |  |  |         ] | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-04-02 22:04:29 +08:00
										 |  |  |     def get_chat_by_id(self, id: str) -> Optional[ChatModel]: | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  |             chat = Chat.get(Chat.id == id) | 
					
						
							|  |  |  |             return ChatModel(**model_to_dict(chat)) | 
					
						
							|  |  |  |         except: | 
					
						
							|  |  |  |             return None | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-04-07 16:21:12 +08:00
										 |  |  |     def get_chat_by_share_id(self, id: str) -> Optional[ChatModel]: | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  |             chat = Chat.get(Chat.share_id == id) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             if chat: | 
					
						
							|  |  |  |                 chat = Chat.get(Chat.id == id) | 
					
						
							|  |  |  |                 return ChatModel(**model_to_dict(chat)) | 
					
						
							|  |  |  |             else: | 
					
						
							|  |  |  |                 return None | 
					
						
							|  |  |  |         except: | 
					
						
							|  |  |  |             return None | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-01-18 18:55:25 +08:00
										 |  |  |     def get_chat_by_id_and_user_id(self, id: str, user_id: str) -> Optional[ChatModel]: | 
					
						
							| 
									
										
										
										
											2023-12-26 13:44:28 +08:00
										 |  |  |         try: | 
					
						
							|  |  |  |             chat = Chat.get(Chat.id == id, Chat.user_id == user_id) | 
					
						
							|  |  |  |             return ChatModel(**model_to_dict(chat)) | 
					
						
							|  |  |  |         except: | 
					
						
							|  |  |  |             return None | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def get_chats(self, skip: int = 0, limit: int = 50) -> List[ChatModel]: | 
					
						
							|  |  |  |         return [ | 
					
						
							|  |  |  |             ChatModel(**model_to_dict(chat)) | 
					
						
							| 
									
										
										
										
											2024-04-28 06:12:57 +08:00
										 |  |  |             for chat in Chat.select().order_by(Chat.updated_at.desc()) | 
					
						
							|  |  |  |             # .limit(limit).offset(skip) | 
					
						
							|  |  |  |         ] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def get_chats_by_user_id(self, user_id: str) -> List[ChatModel]: | 
					
						
							|  |  |  |         return [ | 
					
						
							|  |  |  |             ChatModel(**model_to_dict(chat)) | 
					
						
							|  |  |  |             for chat in Chat.select() | 
					
						
							|  |  |  |             .where(Chat.user_id == user_id) | 
					
						
							|  |  |  |             .order_by(Chat.updated_at.desc()) | 
					
						
							|  |  |  |             # .limit(limit).offset(skip) | 
					
						
							| 
									
										
										
										
											2023-12-26 13:44:28 +08:00
										 |  |  |         ] | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-06-03 12:39:09 +08:00
										 |  |  |     def get_archived_chats_by_user_id(self, user_id: str) -> List[ChatModel]: | 
					
						
							|  |  |  |         return [ | 
					
						
							|  |  |  |             ChatModel(**model_to_dict(chat)) | 
					
						
							|  |  |  |             for chat in Chat.select() | 
					
						
							|  |  |  |             .where(Chat.archived == True) | 
					
						
							|  |  |  |             .where(Chat.user_id == user_id) | 
					
						
							|  |  |  |             .order_by(Chat.updated_at.desc()) | 
					
						
							|  |  |  |         ] | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-04-28 06:24:59 +08:00
										 |  |  |     def delete_chat_by_id(self, id: str) -> bool: | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  |             query = Chat.delete().where((Chat.id == id)) | 
					
						
							|  |  |  |             query.execute()  # Remove the rows, return number of rows removed. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             return True and self.delete_shared_chat_by_chat_id(id) | 
					
						
							|  |  |  |         except: | 
					
						
							|  |  |  |             return False | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-12-26 17:27:43 +08:00
										 |  |  |     def delete_chat_by_id_and_user_id(self, id: str, user_id: str) -> bool: | 
					
						
							|  |  |  |         try: | 
					
						
							| 
									
										
										
										
											2024-01-18 18:55:25 +08:00
										 |  |  |             query = Chat.delete().where((Chat.id == id) & (Chat.user_id == user_id)) | 
					
						
							| 
									
										
										
										
											2023-12-26 17:27:43 +08:00
										 |  |  |             query.execute()  # Remove the rows, return number of rows removed. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-04-02 22:55:56 +08:00
										 |  |  |             return True and self.delete_shared_chat_by_chat_id(id) | 
					
						
							| 
									
										
										
										
											2023-12-26 17:27:43 +08:00
										 |  |  |         except: | 
					
						
							|  |  |  |             return False | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-12-29 15:17:58 +08:00
										 |  |  |     def delete_chats_by_user_id(self, user_id: str) -> bool: | 
					
						
							|  |  |  |         try: | 
					
						
							| 
									
										
										
										
											2024-04-02 23:00:26 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |             self.delete_shared_chats_by_user_id(user_id) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-12-29 15:17:58 +08:00
										 |  |  |             query = Chat.delete().where(Chat.user_id == user_id) | 
					
						
							|  |  |  |             query.execute()  # Remove the rows, return number of rows removed. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-04-02 23:00:26 +08:00
										 |  |  |             return True | 
					
						
							| 
									
										
										
										
											2024-04-02 22:55:56 +08:00
										 |  |  |         except: | 
					
						
							|  |  |  |             return False | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def delete_shared_chats_by_user_id(self, user_id: str) -> bool: | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  |             shared_chat_ids = [ | 
					
						
							|  |  |  |                 f"shared-{chat.id}" | 
					
						
							|  |  |  |                 for chat in Chat.select().where(Chat.user_id == user_id) | 
					
						
							|  |  |  |             ] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             query = Chat.delete().where(Chat.user_id << shared_chat_ids) | 
					
						
							|  |  |  |             query.execute()  # Remove the rows, return number of rows removed. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-12-29 15:17:58 +08:00
										 |  |  |             return True | 
					
						
							|  |  |  |         except: | 
					
						
							|  |  |  |             return False | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-12-26 13:44:28 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | Chats = ChatTable(DB) |