99 lines
3.5 KiB
Python
99 lines
3.5 KiB
Python
import sqlite3
|
|
from datetime import datetime
|
|
|
|
|
|
class DBManager:
|
|
def __init__(self, db_name='chat.db'):
|
|
self.conn = sqlite3.connect(db_name)
|
|
self.cursor = self.conn.cursor()
|
|
self._initialize_database()
|
|
|
|
def _initialize_database(self):
|
|
self.execute_query('''
|
|
CREATE TABLE IF NOT EXISTS chats (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
title TEXT NOT NULL DEFAULT 'New Chat',
|
|
created_at DATETIME NOT NULL,
|
|
updated_at DATETIME NOT NULL
|
|
)
|
|
''')
|
|
self.execute_query('''
|
|
CREATE TABLE IF NOT EXISTS chat_messages (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
chat_id INTEGER,
|
|
category TEXT,
|
|
content TEXT,
|
|
created_at DATETIME NOT NULL,
|
|
updated_at DATETIME NOT NULL,
|
|
FOREIGN KEY(chat_id) REFERENCES chats(id)
|
|
)
|
|
''')
|
|
self.execute_query('''
|
|
CREATE TABLE IF NOT EXISTS generated_files (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
chat_message_id INTEGER,
|
|
name TEXT,
|
|
content BLOB,
|
|
created_at DATETIME NOT NULL,
|
|
updated_at DATETIME NOT NULL,
|
|
FOREIGN KEY(chat_message_id) REFERENCES chat_messages(id)
|
|
)
|
|
''')
|
|
|
|
def execute_query(self, query, params=()):
|
|
self.cursor.execute(query, params)
|
|
self.conn.commit()
|
|
|
|
def fetch_query(self, query, params=()):
|
|
self.cursor.execute(query, params)
|
|
return self.cursor.fetchall()
|
|
|
|
# Chat Operations
|
|
def save_chat(self, title):
|
|
now = datetime.now()
|
|
self.execute_query('''
|
|
INSERT INTO chats (title, created_at, updated_at)
|
|
VALUES (?, ?, ?)
|
|
''', (title, now, now))
|
|
return self.cursor.lastrowid
|
|
|
|
def update_chat_title(self, chat_id, title):
|
|
now = datetime.now()
|
|
self.execute_query('''
|
|
UPDATE chats
|
|
SET title = ?, updated_at = ?
|
|
WHERE id = ?
|
|
''', (title, now, chat_id))
|
|
|
|
def get_chats(self):
|
|
return self.fetch_query("SELECT * FROM chats ORDER BY updated_at DESC")
|
|
|
|
def get_chat(self, chat_id):
|
|
return self.fetch_query("SELECT * FROM chats WHERE id = ?", (chat_id,))[0]
|
|
|
|
# Chat Message Operations
|
|
def save_message(self, chat_id, category, content):
|
|
now = datetime.now()
|
|
self.execute_query('''
|
|
INSERT INTO chat_messages (chat_id, category, content, created_at, updated_at)
|
|
VALUES (?, ?, ?, ?, ?)
|
|
''', (chat_id, category, content, now, now))
|
|
return self.cursor.lastrowid
|
|
|
|
def get_chat_messages(self, chat_id):
|
|
return self.fetch_query("SELECT * FROM chat_messages WHERE chat_id = ?", (chat_id,))
|
|
|
|
def get_chat_message(self, chat_message_id):
|
|
return self.fetch_query("SELECT * FROM chat_messages WHERE id = ?", (chat_message_id,))[0]
|
|
|
|
# File Operations
|
|
def save_file(self, chat_message_id, name, content):
|
|
now = datetime.now()
|
|
self.execute_query('''
|
|
INSERT INTO generated_files (chat_message_id, name, content, created_at, updated_at)
|
|
VALUES (?, ?, ?, ?, ?)
|
|
''', (chat_message_id, name, content, now, now))
|
|
|
|
def get_generated_files(self, chat_message_id):
|
|
return self.fetch_query("SELECT * FROM generated_files WHERE chat_message_id = ?", (chat_message_id,))
|