173 lines
6.7 KiB
Python
173 lines
6.7 KiB
Python
"""
|
||
Примеры использования репозиториев и основной функциональности
|
||
|
||
Запустите этот скрипт для быстрого тестирования базовой функциональности
|
||
"""
|
||
|
||
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="<b>Привет!</b> Это тестовое сообщение",
|
||
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())
|