"docs/_removed/Tuner/PBTTuner.rst" did not exist on "abd164c2598d4cf19a081b4e5c1070de7bea8386"
chats.py 2.59 KB
Newer Older
Timothy J. Baek's avatar
Timothy J. Baek committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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

from apps.web.internal.db import DB


####################
# Chat DB Schema
####################


class Chat(Model):
    id = CharField(unique=True)
Timothy J. Baek's avatar
Timothy J. Baek committed
21
    user_id = CharField()
Timothy J. Baek's avatar
Timothy J. Baek committed
22
23
24
25
26
27
28
29
30
31
32
33
    title = CharField()
    chat = TextField()  # Save Chat JSON as Text
    timestamp = DateField()

    class Meta:
        database = DB


class ChatModel(BaseModel):
    id: str
    user_id: str
    title: str
Timothy J. Baek's avatar
Timothy J. Baek committed
34
    chat: str
Timothy J. Baek's avatar
Timothy J. Baek committed
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
    timestamp: int  # timestamp in epoch


####################
# Forms
####################


class ChatForm(BaseModel):
    chat: dict


class ChatUpdateForm(ChatForm):
    id: str


class ChatTitleIdResponse(BaseModel):
    id: str
    title: str


class ChatTable:
    def __init__(self, db):
        self.db = db
        db.create_tables([Chat])

    def insert_new_chat(self, user_id: str, form_data: ChatForm) -> Optional[ChatModel]:
        id = str(uuid.uuid4())
        chat = ChatModel(
            **{
                "id": id,
                "user_id": user_id,
Timothy J. Baek's avatar
Timothy J. Baek committed
67
68
69
70
                "title": form_data.chat["title"]
                if "title" in form_data.chat
                else "New Chat",
                "chat": json.dumps(form_data.chat),
Timothy J. Baek's avatar
Timothy J. Baek committed
71
72
73
74
75
76
77
78
79
                "timestamp": int(time.time()),
            }
        )

        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:
Timothy J. Baek's avatar
Timothy J. Baek committed
80
            query = Chat.update(chat=json.dumps(chat)).where(Chat.id == id)
Timothy J. Baek's avatar
Timothy J. Baek committed
81
82
83
84
85
86
87
88
89
90
91
92
            query.execute()

            chat = Chat.get(Chat.id == id)
            return ChatModel(**model_to_dict(chat))
        except:
            return None

    def get_chat_lists_by_user_id(
        self, user_id: str, skip: int = 0, limit: int = 50
    ) -> List[ChatModel]:
        return [
            ChatModel(**model_to_dict(chat))
Timothy J. Baek's avatar
Timothy J. Baek committed
93
            for chat in Chat.select()
Timothy J. Baek's avatar
Timothy J. Baek committed
94
95
96
            .where(Chat.user_id == user_id)
            .limit(limit)
            .offset(skip)
Timothy J. Baek's avatar
Timothy J. Baek committed
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
        ]

    def get_chat_by_id_and_user_id(self, id: str, user_id: str) -> Optional[ChatModel]:
        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))
            for chat in Chat.select().limit(limit).offset(skip)
        ]


Chats = ChatTable(DB)