191 lines
9.1 KiB
Python
191 lines
9.1 KiB
Python
"""
|
||
Демонстрация возможностей админ-панели
|
||
"""
|
||
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()) |