feat: add admin panel
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user