from datetime import datetime from typing import Optional from database.base import DatabaseConnection from database.models import UserMessage class MessageRepository(DatabaseConnection): """Репозиторий для работы с сообщениями пользователей.""" async def create_tables(self): """Создание таблицы сообщений пользователей.""" query = ''' CREATE TABLE IF NOT EXISTS user_messages ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, message_text TEXT, user_id INTEGER, telegram_message_id INTEGER NOT NULL, date INTEGER NOT NULL, FOREIGN KEY (user_id) REFERENCES our_users (user_id) ON DELETE CASCADE ) ''' await self._execute_query(query) self.logger.info("Таблица сообщений пользователей создана") async def add_message(self, message: UserMessage) -> None: """Добавление сообщения пользователя.""" if message.date is None: message.date = int(datetime.now().timestamp()) query = """ INSERT INTO user_messages (message_text, user_id, telegram_message_id, date) VALUES (?, ?, ?, ?) """ params = (message.message_text, message.user_id, message.telegram_message_id, message.date) await self._execute_query(query, params) self.logger.info(f"Новое сообщение добавлено: telegram_message_id={message.telegram_message_id}") async def get_user_by_message_id(self, message_id: int) -> Optional[int]: """Получение пользователя по message_id.""" query = "SELECT user_id FROM user_messages WHERE telegram_message_id = ?" rows = await self._execute_query_with_result(query, (message_id,)) row = rows[0] if rows else None return row[0] if row else None