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 ) ''') # Создаем таблицу для хранения состояния приложения (ключ-значение) cursor.execute(''' CREATE TABLE IF NOT EXISTS app_state ( key TEXT PRIMARY KEY, value TEXT 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() # REPLACE INTO - удобный способ для вставки или обновления cursor.execute(''' INSERT OR REPLACE 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() def get_last_login(): """Получает логин последнего вошедшего пользователя.""" conn = get_connection() cursor = conn.cursor() cursor.execute("SELECT value FROM app_state WHERE key = 'last_login'") result = cursor.fetchone() conn.close() return result['value'] if result else None def set_last_login(login: str): """Сохраняет логин последнего вошедшего пользователя.""" conn = get_connection() cursor = conn.cursor() cursor.execute("INSERT OR REPLACE INTO app_state (key, value) VALUES ('last_login', ?)", (login,)) conn.commit() conn.close()