desktop_app/app/core/database.py
2025-09-26 03:32:00 +03:00

82 lines
2.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import sqlite3
import os
from datetime import datetime
DB_PATH = "messenger.db"
def get_connection():
"""Получает соединение с базой данных."""
conn = sqlite3.connect(DB_PATH)
conn.row_factory = sqlite3.Row # Для доступа к колонкам по имени
return conn
def init_db():
"""Инициализирует базу данных и создает таблицы, если они не существуют."""
conn = get_connection()
cursor = conn.cursor()
# Создаем таблицу для чатов (если ее нет)
cursor.execute('''
CREATE TABLE IF NOT EXISTS chats (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT NOT NULL
)
''')
# Создаем таблицу для сессий
cursor.execute('''
CREATE TABLE IF NOT EXISTS sessions (
login TEXT PRIMARY KEY,
access_token TEXT NOT NULL,
refresh_token TEXT NOT NULL,
created_at TIMESTAMP NOT NULL
)
''')
# Проверяем, есть ли в chats тестовые данные
cursor.execute("SELECT COUNT(*) FROM chats")
if cursor.fetchone()[0] == 0:
cursor.execute('INSERT INTO chats (title) VALUES (?)', ("Чат с Alice",))
conn.commit()
conn.close()
def add_session(login, access_token, refresh_token):
"""Добавляет новую сессию или обновляет существующую."""
conn = get_connection()
cursor = conn.cursor()
# Сначала удаляем, потом вставляем, чтобы гарантировать обновление.
cursor.execute('DELETE FROM sessions WHERE login = ?', (login,))
cursor.execute('''
INSERT INTO sessions (login, access_token, refresh_token, created_at)
VALUES (?, ?, ?, ?)
''', (login, access_token, refresh_token, datetime.now()))
conn.commit()
conn.close()
def get_session(login: str):
"""Получает сессию по логину."""
conn = get_connection()
cursor = conn.cursor()
cursor.execute('SELECT * FROM sessions WHERE login = ?', (login,))
session = cursor.fetchone()
conn.close()
return session
def get_all_sessions():
"""Получает все сессии, отсортированные по дате создания (сначала новые)."""
conn = get_connection()
cursor = conn.cursor()
cursor.execute('SELECT * FROM sessions ORDER BY created_at DESC')
sessions = cursor.fetchall()
conn.close()
return sessions
def delete_session(login: str):
"""Удаляет сессию по логину."""
conn = get_connection()
cursor = conn.cursor()
cursor.execute('DELETE FROM sessions WHERE login = ?', (login,))
conn.commit()
conn.close()