init commit

This commit is contained in:
2025-12-18 05:55:32 +09:00
commit a6817e487e
72 changed files with 13847 additions and 0 deletions

172
examples.py Normal file
View File

@@ -0,0 +1,172 @@
"""
Примеры использования репозиториев и основной функциональности
Запустите этот скрипт для быстрого тестирования базовой функциональности
"""
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())