diff --git a/roadmap/MAGIC-WALLET-PLAN.md b/roadmap/MAGIC-WALLET-PLAN.md index 5a0bf44..57b457c 100644 --- a/roadmap/MAGIC-WALLET-PLAN.md +++ b/roadmap/MAGIC-WALLET-PLAN.md @@ -46,9 +46,11 @@ **تست:** - سناریو ۱: Balance=0 بعد از خرید → WalletMode=Magic ✅ - سناریو ۲: بدون پکیج + Balance=0 → نباید Magic بشه ❌ -- سناریو ۳: Magic + Balance=0 + TotalDeposited>0 → خروج ✅ -- سناریو ۴: خروج از Magic → خرید مجدد پکیج → Balance=0 → Magic مجدد با **سقف ریست‌شده** ✅ -- سناریو ۵: دور دوم → TotalDeposited, TotalCredited = 0 (ریست) ✅ +- سناریو ۳: Magic + Balance=0 + **TotalDeposited=50M** (سقف پر نشده) → **هنوز Magic!** نباید خارج بشه ❌ +- سناریو ۴: Magic + Balance=0 + **TotalDeposited=100M** (سقف پر) → خروج ✅ +- سناریو ۵: Magic + Balance=30M + TotalDeposited=100M → **هنوز Magic!** (بالانس داره) ❌ +- سناریو ۶: خروج از Magic → خرید مجدد پکیج → Balance=0 → Magic مجدد با **سقف ریست‌شده** ✅ +- سناریو ۷: دور دوم → TotalDeposited, TotalCredited = 0 (ریست) ✅ --- diff --git a/roadmap/MAGIC-WALLET-SPEC.md b/roadmap/MAGIC-WALLET-SPEC.md index 7188caf..b428e35 100644 --- a/roadmap/MAGIC-WALLET-SPEC.md +++ b/roadmap/MAGIC-WALLET-SPEC.md @@ -172,14 +172,28 @@ stateDiagram-v2 ### ۴.۲ خروج از Magic Mode ``` -شرط‌ها (هرکدام کافیه): - ├── wallet.Balance == 0 && MagicTotalDeposited > 0 (همه رو خرج کرد) - └── MagicTotalDeposited >= MagicWalletMaxDeposit (سقف پر شد) +شرط‌ها (هر دو باید همزمان true باشن): + ├── wallet.Balance == 0 (همه رو خرج کرده) + └── wallet.MagicTotalDeposited >= MagicWalletMaxDeposit (سقف 100M پر شده) نتیجه: ├── wallet.WalletMode = Normal ├── wallet.MagicCompletedAt = DateTime.UtcNow └── user.PurchaseCycleCount++ + +⚠️ توضیح مهم: + اگه Balance=0 بشه ولی هنوز سقف شارژ پر نشده → هنوز Magic هست! + کاربر میتونه دوباره شارژ کنه (تا سقف 100M). + + مثال: + TotalDeposited = 50M, Balance = 0 + → هنوز Magic → میتونه 50M دیگه شارژ کنه (125M اعتبار بگیره) + + TotalDeposited = 100M, Balance = 30M + → هنوز Magic → نمیتونه شارژ کنه ولی هنوز بالانس داره + + TotalDeposited = 100M, Balance = 0 + → ✅ خروج از Magic → Normal Mode ``` ### ۴.۳ ریست سقف در دور بعدی @@ -352,10 +366,13 @@ Migration: AddMagicWalletFields if (wallet.WalletMode == Magic && wallet.Balance == 0 - && wallet.MagicTotalDeposited > 0) + && wallet.MagicTotalDeposited >= SystemConstants.MagicWalletMaxDeposit) { → خروج از Magic Mode + // سقف 100M پر شده + همه رو خرج کرده } + // ⚠️ اگه Balance=0 ولی سقف پر نشده → هنوز Magic! + // کاربر میتونه دوباره شارژ کنه ``` ### ۸.۲ CalculateWeeklyBalancesCommandHandler (تغییر)