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