feat: add admin panel

This commit is contained in:
2026-06-15 20:54:05 +03:30
parent 7dadb23fbe
commit 02060a4dc0
16 changed files with 698 additions and 108 deletions
+13
View File
@@ -109,6 +109,19 @@ POST /api/rewards/ad { token } سکه رایگان پس
### تسویه‌ی داخل بازی
`join_queue` یک `tier` می‌گیرد (مثل `beginner`/`pro`). هاب هنگام ورود به صف **ورودی** را کسر می‌کند؛ در پایان بازی **جایزه/XP/جام** به برندگانِ انسان واریز و بازی در `game_history` ثبت می‌شود. اگر بازی پیش از پایان لغو شود، ورودی **بازگردانده** می‌شود (به‌جز کسی که داوطلبانه `leave` کرده). تسویه پشت اینترفیس `ws.Settler` است (لایه ws از سکه بی‌خبر می‌ماند).
## دیتابیس
**SQLite** (درایور خالص Go، بدون cgo) — مناسبِ سرور کوچک (۱GB RAM / ۱ هسته): پروسه‌ی جدا و رمِ اضافه ندارد، حالتِ بازی در حافظه است و نوشتن فقط هنگام تسویه/خرید/پاداش رخ می‌دهد. برای بکاپ روی یک سرور تک، **Litestream** پیشنهاد می‌شود. کد با `database/sql` نوشته شده تا مهاجرت به Postgres در آینده کم‌دردسر باشد. migrationها با جدول `schema_migrations` فقط یک‌بار اجرا می‌شوند.
## پنل ادمین (HTML سرور‌ساید)
در مسیر **`/admin`**، داخل همان باینری Go (بدون پروسه/بیلدِ جدا)، پشت **Basic Auth** (`ADMIN_PANEL_USER`/`ADMIN_PANEL_PASS`):
- **داشبورد**: تعداد کاربران، خریدها، بازی‌ها، مجموع سکه.
- **فروشگاه**: ویرایش زنده‌ی کاتالوگ (بسته‌های سکه/بلیط، اسکین کارت، بوستر، انواع میز). با ذخیره، کشِ کاتالوگ تازه می‌شود و **هم API و هم تسویه‌ی بازی فوراً** مقادیر جدید را می‌گیرند.
- **کاربران**: جستجو، مشاهده‌ی موجودی/سطح، و کم/زیادکردن سکه (ثبت در `wallet_tx`).
کاتالوگ فروشگاه از جدول‌های دیتابیس خوانده می‌شود (مهاجرت `003_catalog.sql` با مقادیر اولیه seed می‌کند) و در حافظه کش می‌شود.
## ساخت باینری / Docker
```bash