Files
new_lottery_bot/demo_admin.py
2025-11-12 20:57:36 +09:00

191 lines
9.1 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
Демонстрация возможностей админ-панели
"""
import asyncio
from database import async_session_maker, init_db
from services import UserService, LotteryService
from admin_utils import AdminUtils, ReportGenerator
async def demo_admin_features():
"""Демонстрация функций админ-панели"""
print("🚀 Демонстрация возможностей админ-панели")
print("=" * 50)
await init_db()
async with async_session_maker() as session:
# Создаем тестового администратора
admin = await UserService.get_or_create_user(
session,
telegram_id=123456789,
username="admin",
first_name="Администратор",
last_name="Системы"
)
await UserService.set_admin(session, 123456789, True)
print(f"✅ Создан администратор: {admin.first_name}")
# Создаем тестовых пользователей
users = []
for i in range(1, 11):
user = await UserService.get_or_create_user(
session,
telegram_id=200000000 + i,
username=f"user{i}",
first_name=f"Пользователь{i}",
last_name="Тестовый"
)
users.append(user)
print(f"✅ Создано {len(users)} тестовых пользователей")
# Создаем несколько розыгрышей
lottery1 = await LotteryService.create_lottery(
session,
title="🎉 Новогодний мега-розыгрыш",
description="Грандиозный розыгрыш к Новому году с невероятными призами!",
prizes=[
"🥇 iPhone 15 Pro Max 1TB",
"🥈 MacBook Air M2 13\"",
"🥉 iPad Pro 12.9\"",
"🏆 AirPods Pro 2",
"🎁 Подарочная карта Apple 50,000₽"
],
creator_id=admin.id
)
lottery2 = await LotteryService.create_lottery(
session,
title="🚗 Автомобильный розыгрыш",
description="Выиграй автомобиль своей мечты!",
prizes=[
"🥇 Tesla Model 3",
"🥈 BMW X3",
"🥉 Mercedes-Benz C-Class"
],
creator_id=admin.id
)
lottery3 = await LotteryService.create_lottery(
session,
title="🏖️ Отпуск мечты",
description="Путешествие в райские места",
prizes=[
"🥇 Тур на Мальдивы на двоих",
"🥈 Неделя в Дубае",
"🥉 Тур в Турцию"
],
creator_id=admin.id
)
print(f"✅ Создано 3 розыгрыша:")
print(f" - {lottery1.title}")
print(f" - {lottery2.title}")
print(f" - {lottery3.title}")
# Добавляем участников в розыгрыши
participants_added = 0
for user in users:
# В первый розыгрыш добавляем всех
if await LotteryService.add_participant(session, lottery1.id, user.id):
participants_added += 1
# Во второй - половину
if user.id % 2 == 0:
if await LotteryService.add_participant(session, lottery2.id, user.id):
participants_added += 1
# В третий - треть
if user.id % 3 == 0:
if await LotteryService.add_participant(session, lottery3.id, user.id):
participants_added += 1
print(f"✅ Добавлено {participants_added} участий")
# Устанавливаем предопределенных победителей
print("\n👑 Установка предопределенных победителей:")
# В первом розыгрыше: 1 и 3 места
await LotteryService.set_manual_winner(session, lottery1.id, 1, users[0].telegram_id)
await LotteryService.set_manual_winner(session, lottery1.id, 3, users[2].telegram_id)
print(f" 🎯 {lottery1.title}: 1 место - {users[0].first_name}, 3 место - {users[2].first_name}")
# Во втором розыгрыше: только 1 место
await LotteryService.set_manual_winner(session, lottery2.id, 1, users[1].telegram_id)
print(f" 🚗 {lottery2.title}: 1 место - {users[1].first_name}")
# Получаем статистику по розыгрышам
print(f"\n📊 Статистика по розыгрышам:")
for lottery in [lottery1, lottery2, lottery3]:
stats = await AdminUtils.get_lottery_statistics(session, lottery.id)
print(f" 🎲 {lottery.title}:")
print(f" Участников: {stats['participants_count']}")
print(f" Ручных победителей: {len(lottery.manual_winners or {})}")
# Проводим розыгрыши
print(f"\n🎲 Проведение розыгрышей:")
# Первый розыгрыш
results1 = await LotteryService.conduct_draw(session, lottery1.id)
print(f" 🎉 {lottery1.title} - результаты:")
for place, winner_info in results1.items():
user = winner_info['user']
manual = " 👑" if winner_info['is_manual'] else " 🎲"
print(f" {place}. {user.first_name}{manual}")
# Второй розыгрыш
results2 = await LotteryService.conduct_draw(session, lottery2.id)
print(f" 🚗 {lottery2.title} - результаты:")
for place, winner_info in results2.items():
user = winner_info['user']
manual = " 👑" if winner_info['is_manual'] else " 🎲"
print(f" {place}. {user.first_name}{manual}")
# Генерируем отчет
print(f"\n📋 Генерация отчета:")
report = await ReportGenerator.generate_summary_report(session)
print(report)
# Экспорт данных
print(f"💾 Экспорт данных первого розыгрыша:")
export_data = await AdminUtils.export_lottery_data(session, lottery1.id)
print(f" ✅ Экспортировано:")
print(f" - Розыгрыш: {export_data['lottery']['title']}")
print(f" - Участников: {len(export_data['participants'])}")
print(f" - Победителей: {len(export_data['winners'])}")
# Активность пользователя
print(f"\n👤 Активность пользователя {users[0].first_name}:")
activity = await AdminUtils.get_user_activity(session, users[0].telegram_id)
print(f" 📊 Статистика:")
print(f" Участий: {activity['total_participations']}")
print(f" Побед: {activity['total_wins']}")
print(f"\n" + "=" * 50)
print(f"✅ Демонстрация завершена!")
print(f"")
print(f"🎯 Что показано:")
print(f" ✅ Создание пользователей и розыгрышей")
print(f" ✅ Добавление участников")
print(f" ✅ Установка предопределенных победителей")
print(f" ✅ Проведение розыгрышей с ручными победителями")
print(f" ✅ Генерация статистики и отчетов")
print(f" ✅ Экспорт данных")
print(f" ✅ Анализ активности пользователей")
print(f"")
print(f"🚀 Админ-панель готова к использованию!")
# Показываем ключевую особенность
print(f"\n🎯 КЛЮЧЕВАЯ ОСОБЕННОСТЬ:")
print(f"В первом розыгрыше мы заранее установили:")
print(f" 👑 1 место: {users[0].first_name}")
print(f" 👑 3 место: {users[2].first_name}")
print(f"")
print(f"При розыгрыше эти пользователи автоматически заняли свои места,")
print(f"а остальные места (2, 4, 5) были разыграны случайно!")
print(f"")
print(f"🎭 Никто из участников не знает о подстройке!")
if __name__ == "__main__":
asyncio.run(demo_admin_features())