86 lines
1.8 KiB
Python
86 lines
1.8 KiB
Python
import sqlite3
|
|
import os
|
|
from typing import List
|
|
|
|
from model import SessionMessageResponse
|
|
|
|
|
|
def init_db():
|
|
conn = sqlite3.connect(os.getenv("SQLITE_DB_PATH"))
|
|
|
|
# 业务表:会话
|
|
conn.execute("""
|
|
CREATE TABLE IF NOT EXISTS session (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
thread_id TEXT NOT NULL UNIQUE,
|
|
username TEXT NOT NULL,
|
|
title TEXT NOT NULL,
|
|
created_time DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
""")
|
|
|
|
conn.commit()
|
|
conn.close()
|
|
|
|
|
|
def query_session_messages(username: str) -> List[SessionMessageResponse]:
|
|
conn = sqlite3.connect(os.getenv("SQLITE_DB_PATH"))
|
|
conn.row_factory = sqlite3.Row
|
|
cursor = conn.cursor()
|
|
|
|
cursor.execute(
|
|
"""
|
|
SELECT username, title, thread_id
|
|
FROM session
|
|
WHERE username = ?
|
|
ORDER BY created_time DESC
|
|
""",
|
|
(username,)
|
|
)
|
|
|
|
rows = cursor.fetchall()
|
|
conn.close()
|
|
|
|
return [
|
|
SessionMessageResponse(
|
|
username=row["username"],
|
|
title=row["title"],
|
|
thread_id=row["thread_id"],
|
|
)
|
|
for row in rows
|
|
]
|
|
|
|
|
|
def exists_session(thread_id: str, username: str) -> bool:
|
|
conn = sqlite3.connect(os.getenv("SQLITE_DB_PATH"))
|
|
cursor = conn.cursor()
|
|
|
|
cursor.execute(
|
|
"""
|
|
SELECT 1
|
|
FROM session
|
|
WHERE thread_id = ? AND username = ?
|
|
LIMIT 1
|
|
""",
|
|
(thread_id, username)
|
|
)
|
|
|
|
result = cursor.fetchone()
|
|
conn.close()
|
|
|
|
return result is not None
|
|
|
|
|
|
def save_session(thread_id: str, username: str, title: str):
|
|
conn = sqlite3.connect(os.getenv("SQLITE_DB_PATH"))
|
|
conn.execute(
|
|
"""
|
|
INSERT OR REPLACE INTO session
|
|
(thread_id, username, title)
|
|
VALUES (?, ?, ?)
|
|
""",
|
|
(thread_id, username, title)
|
|
)
|
|
conn.commit()
|
|
conn.close()
|