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:
@@ -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 (ریست) ✅
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -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 (تغییر)
|
||||
|
||||
Reference in New Issue
Block a user