docs: fix Magic Mode exit condition — BOTH Balance=0 AND cap reached

- Exit requires BOTH simultaneously: Balance==0 AND TotalDeposited>=100M
- If Balance=0 but cap not reached → still Magic (can charge more)
- If cap reached but Balance>0 → still Magic (can spend more)
- Added examples: partial deposit (50M/100M) stays in Magic
- Fixed handler 8.1 pseudo-code
- Updated test scenarios in PLAN (7 scenarios covering edge cases)
This commit is contained in:
masoodafar-web
2026-02-19 02:32:04 +03:30
parent 2f0d43aa81
commit b1dd69b31f
2 changed files with 26 additions and 7 deletions
+5 -3
View File
@@ -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 (ریست) ✅
---
+21 -4
View File
@@ -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 (تغییر)