- Создана система отслеживания миграций (MigrationRepository, таблица migrations) - Добавлен скрипт apply_migrations.py для автоматического применения миграций - Созданы CI/CD пайплайны (.github/workflows/ci.yml, deploy.yml) - Обновлена документация по миграциям в database-patterns.md - Миграции применяются автоматически при деплое в продакшн
46 lines
2.0 KiB
Python
46 lines
2.0 KiB
Python
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
|