init commit

This commit is contained in:
2025-11-12 20:57:36 +09:00
commit e0075d91b6
40 changed files with 8544 additions and 0 deletions

191
demo_admin.py Normal file
View File

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