""" Примеры использования репозиториев и основной функциональности Запустите этот скрипт для быстрого тестирования базовой функциональности """ import asyncio from app.database import AsyncSessionLocal, init_db from app.database.repository import ( GroupRepository, MessageRepository, MessageGroupRepository ) async def example_basic_workflow(): """Базовый workflow: создание сообщения и группы""" print("=" * 60) print("БАЗОВЫЙ WORKFLOW") print("=" * 60) # Инициализируем БД await init_db() print("✅ База данных инициализирована\n") async with AsyncSessionLocal() as session: # 1. Создаем группу group_repo = GroupRepository(session) group = await group_repo.add_group( chat_id="-1001234567890", title="Тестовая группа", slow_mode_delay=5 ) print(f"✅ Группа создана: {group}") print(f" ID: {group.id}, Chat ID: {group.chat_id}, Slow Mode: {group.slow_mode_delay}s\n") # 2. Создаем сообщение msg_repo = MessageRepository(session) message = await msg_repo.add_message( text="Привет! Это тестовое сообщение", title="Приветствие", parse_mode="HTML" ) print(f"✅ Сообщение создано: {message}") print(f" ID: {message.id}, Title: {message.title}\n") # 3. Связываем сообщение с группой mg_repo = MessageGroupRepository(session) link = await mg_repo.add_message_to_group(message.id, group.id) print(f"✅ Связь создана: {link}") print(f" Message ID: {link.message_id}, Group ID: {link.group_id}\n") # 4. Получаем сообщения для отправки to_send = await mg_repo.get_message_groups_to_send(message.id) print(f"✅ Сообщений к отправке: {len(to_send)}") for msg_group in to_send: print(f" - Группа: {msg_group.group.title}, Статус: {'✅ Отправлено' if msg_group.is_sent else '❌ Не отправлено'}") print() async def example_multiple_messages(): """Пример с несколькими сообщениями в одну группу""" print("=" * 60) print("НЕСКОЛЬКО СООБЩЕНИЙ В ОДНУ ГРУППУ") print("=" * 60) async with AsyncSessionLocal() as session: # Получаем существующую группу group_repo = GroupRepository(session) groups = await group_repo.get_all_active_groups() if groups: group = groups[0] print(f"Используем группу: {group.title}\n") # Создаем несколько сообщений msg_repo = MessageRepository(session) mg_repo = MessageGroupRepository(session) messages_text = [ ("Сообщение 1", "Это первое сообщение 📨"), ("Сообщение 2", "Это второе сообщение 📧"), ("Сообщение 3", "Это третье сообщение 📬"), ] for title, text in messages_text: msg = await msg_repo.add_message(text, title) await mg_repo.add_message_to_group(msg.id, group.id) print(f"✅ Добавлено: {title}") # Получаем все сообщения для группы print(f"\n📋 Все сообщения для группы '{group.title}':") group_messages = await mg_repo.get_messages_for_group(group.id) for mg in group_messages: status = "✅ Отправлено" if mg.is_sent else "❌ Не отправлено" print(f" {status} - {mg.message.title}") else: print("❌ Нет групп в базе данных") async def example_slow_mode_check(): """Пример проверки slow mode""" print("\n" + "=" * 60) print("ПРОВЕРКА SLOW MODE") print("=" * 60) async with AsyncSessionLocal() as session: group_repo = GroupRepository(session) groups = await group_repo.get_all_active_groups() if groups: group = groups[0] print(f"\nГруппа: {group.title}") print(f"Slow Mode: {group.slow_mode_delay} секунд") print(f"Последнее сообщение: {group.last_message_time}") # Проверяем возможность отправки from app.utils import can_send_message can_send, wait_time = await can_send_message(group) if can_send: print("✅ Можно отправлять сейчас") else: print(f"⏳ Нужно ждать {wait_time} секунд") async def example_get_all_data(): """Пример получения всех данных""" print("\n" + "=" * 60) print("ВСЕ ДАННЫЕ В БД") print("=" * 60) async with AsyncSessionLocal() as session: # Все группы group_repo = GroupRepository(session) groups = await group_repo.get_all_active_groups() print(f"\n👥 Всего групп: {len(groups)}") for group in groups: print(f" • {group.title} (ID: {group.chat_id}, Slow: {group.slow_mode_delay}s)") # Все сообщения msg_repo = MessageRepository(session) messages = await msg_repo.get_all_messages() print(f"\n📨 Всего сообщений: {len(messages)}") for msg in messages: print(f" • {msg.title} (ID: {msg.id})") async def main(): """Запуск всех примеров""" try: await example_basic_workflow() await example_multiple_messages() await example_slow_mode_check() await example_get_all_data() print("\n" + "=" * 60) print("✅ ВСЕ ПРИМЕРЫ ВЫПОЛНЕНЫ УСПЕШНО") print("=" * 60) except Exception as e: print(f"\n❌ ОШИБКА: {e}") import traceback traceback.print_exc() if __name__ == "__main__": asyncio.run(main())