6.3 KiB
6.3 KiB
📋 Daily Quiz & Golden Card Lottery - راهنمای پیادهسازی
این فیچر شامل کوییز روزانه و قرعهکشی Golden Card برای بازی فانتزی فوتبال است.
🗂️ ساختار فایلها
Database Schema
prisma/schema.prisma- مدلهای جدید:DailyQuiz- کوییز روزانهQuizQuestion- سوالات کوییزQuizSubmission- پاسخهای کاربرانGoldenCard- کارتهای طلاییPlayer.isGoldenCardEligible- فیلد جدید
API Routes
Admin:
app/api/admin/quiz/route.ts- لیست و ایجاد کوییزapp/api/admin/quiz/[id]/lottery/route.ts- اجرای قرعهکشیapp/api/admin/players/[id]/golden-toggle/route.ts- فعال/غیرفعال کردن Golden Card
User:
app/api/quiz/route.ts- دریافت کوییز امروزapp/api/quiz/submit/route.ts- ارسال پاسخهاapp/api/quiz/my-results/route.ts- تاریخچه نتایجapp/api/golden-cards/route.ts- لیست کارتهای کاربرapp/api/golden-cards/[id]/reveal/route.ts- باز کردن کارت
Admin Panel
app/(admin)/admin/quiz/page.tsx- لیست کوییزهاapp/(admin)/admin/quiz/new/page.tsx- ایجاد کوییز جدیدapp/(admin)/admin/quiz/QuizForm.tsx- فرم ایجاد کوییزapp/(admin)/admin/quiz/LotteryButton.tsx- دکمه قرعهکشیapp/(admin)/admin/quiz/[id]/results/page.tsx- نتایج و برندگانapp/(admin)/admin/players/GoldenToggle.tsx- تاگل Golden Card
User Pages
app/(user)/quiz/page.tsx- صفحه کوییز روزانهapp/(user)/quiz/DailyQuizClient.tsx- UI کوییز با countdownapp/(user)/quiz/history/page.tsx- تاریخچه شرکت در کوییزهاapp/(user)/golden-cards/page.tsx- صفحه Golden Cardsapp/(user)/golden-cards/GoldenCardsClient.tsx- UI باز کردن کارتها
🚀 مراحل راهاندازی
1. Database Migration
# Generate Prisma Client
npm run db:generate
# Push schema to database
npm run db:push
2. تنظیم بازیکنان Golden Card
- به پنل ادمین برو:
/admin/players - برای بازیکنان برتر، تاگل Golden Card رو فعال کن
- حداقل 5-10 بازیکن رو فعال کن
3. ایجاد کوییز روزانه
- برو به
/admin/quiz - کلیک روی + کوییز جدید
- تاریخ، بازه زمانی (مثلاً 18:00 تا 21:00)، و تعداد برندگان رو وارد کن
- سوالات رو اضافه کن (حداقل 5 سوال)
- گزینه صحیح رو با دایره انتخاب کن
- ذخیره کن
4. شرکت کاربران
- کاربران به
/quizمیرن - در بازه زمانی مشخص شده، به سوالات پاسخ میدن
- countdown timer نمایش داده میشه
- بعد از ارسال، نمره نمایش داده میشه
5. اجرای قرعهکشی
- برو به
/admin/quiz - روی دکمه قرعهکشی کلیک کن
- سیستم:
- همه کاربران با نمره 100% رو پیدا میکنه
- به صورت تصادفی تعداد مشخص شده رو انتخاب میکنه
- به هر برنده یک Sealed Golden Card میده
- نتایج در
/admin/quiz/[id]/resultsنمایش داده میشه
6. باز کردن کارتها
- کاربران به
/golden-cardsمیرن - روی کارت مهر شده کلیک میکنن
- انیمیشن unboxing نمایش داده میشه
- بازیکن تصادفی reveal میشه
🎨 UI Features
Dark Mode + Glassmorphism
- پسزمینه:
bg-gray-950 - کارتها:
bg-white/5 backdrop-blur border border-white/10 - Gradient buttons:
bg-gradient-to-r from-yellow-500 to-amber-500 - Neon accents برای Golden Cards
Countdown Timer
- نمایش ساعت، دقیقه، ثانیه
- استایل glassmorphism
- Auto-refresh هر ثانیه
Unboxing Animation
- کارت مهر شده با icon 🎴
- Pulse animation
- Modal reveal با bounce effect
- Gradient border بر اساس پست بازیکن
📊 Business Logic
امتیازدهی
- هر سوال: 1 امتیاز
- نمره نهایی: درصد (0-100)
- فقط نمره 100% واجد شرایط قرعهکشی
قرعهکشی
- فیلتر:
score = 100 - انتخاب تصادفی:
winnersCountنفر - هر برنده: 1 Golden Card (بازیکن تصادفی از لیست eligible)
Golden Card Status
SEALED: مهر شده، بازیکن مخفیOPENED: باز شده، بازیکن نمایش داده میشه
🔐 Security
Authorization
- Admin routes:
requireAdmin()middleware - User routes:
requireAuth()middleware - API routes:
getServerSession()check
Validation
- Time window check در submit
- Duplicate submission prevention
- Correct answer محافظت شده (فقط server-side)
🧪 Testing Checklist
- ایجاد کوییز توسط ادمین
- نمایش کوییز در بازه زمانی
- countdown timer صحیح کار میکنه
- ارسال پاسخها
- محاسبه نمره صحیح
- جلوگیری از ارسال مجدد
- اجرای قرعهکشی
- دریافت Golden Card
- باز کردن کارت
- نمایش تاریخچه
- toggle Golden Card در admin
🎯 Next Steps (Optional Enhancements)
- Cron Job: قرعهکشی خودکار هر شب
- Notifications: اطلاعرسانی به برندگان
- Leaderboard: جدول برترین شرکتکنندگان
- Streak System: پاداش برای شرکت مداوم
- Lottie Animations: انیمیشنهای پیشرفتهتر
- Sound Effects: صدا برای unboxing
- Social Share: اشتراکگذاری نتایج
- Quiz Categories: دستهبندی سوالات
📞 Support
در صورت بروز مشکل:
- لاگهای console رو چک کن
- Prisma Studio رو باز کن:
npm run db:studio - دیتابیس رو بررسی کن
- API routes رو با Postman تست کن
✅ فیچر آماده استفاده است!