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 بعد از خرید → WalletMode=Magic ✅
|
||||||
- سناریو ۲: بدون پکیج + Balance=0 → نباید Magic بشه ❌
|
- سناریو ۲: بدون پکیج + Balance=0 → نباید Magic بشه ❌
|
||||||
- سناریو ۳: Magic + Balance=0 + TotalDeposited>0 → خروج ✅
|
- سناریو ۳: Magic + Balance=0 + **TotalDeposited=50M** (سقف پر نشده) → **هنوز Magic!** نباید خارج بشه ❌
|
||||||
- سناریو ۴: خروج از Magic → خرید مجدد پکیج → Balance=0 → Magic مجدد با **سقف ریستشده** ✅
|
- سناریو ۴: Magic + Balance=0 + **TotalDeposited=100M** (سقف پر) → خروج ✅
|
||||||
- سناریو ۵: دور دوم → TotalDeposited, TotalCredited = 0 (ریست) ✅
|
- سناریو ۵: Magic + Balance=30M + TotalDeposited=100M → **هنوز Magic!** (بالانس داره) ❌
|
||||||
|
- سناریو ۶: خروج از Magic → خرید مجدد پکیج → Balance=0 → Magic مجدد با **سقف ریستشده** ✅
|
||||||
|
- سناریو ۷: دور دوم → TotalDeposited, TotalCredited = 0 (ریست) ✅
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@@ -172,14 +172,28 @@ stateDiagram-v2
|
|||||||
### ۴.۲ خروج از Magic Mode
|
### ۴.۲ خروج از Magic Mode
|
||||||
|
|
||||||
```
|
```
|
||||||
شرطها (هرکدام کافیه):
|
شرطها (هر دو باید همزمان true باشن):
|
||||||
├── wallet.Balance == 0 && MagicTotalDeposited > 0 (همه رو خرج کرد)
|
├── wallet.Balance == 0 (همه رو خرج کرده)
|
||||||
└── MagicTotalDeposited >= MagicWalletMaxDeposit (سقف پر شد)
|
└── wallet.MagicTotalDeposited >= MagicWalletMaxDeposit (سقف 100M پر شده)
|
||||||
|
|
||||||
نتیجه:
|
نتیجه:
|
||||||
├── wallet.WalletMode = Normal
|
├── wallet.WalletMode = Normal
|
||||||
├── wallet.MagicCompletedAt = DateTime.UtcNow
|
├── wallet.MagicCompletedAt = DateTime.UtcNow
|
||||||
└── user.PurchaseCycleCount++
|
└── 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
|
if (wallet.WalletMode == Magic
|
||||||
&& wallet.Balance == 0
|
&& wallet.Balance == 0
|
||||||
&& wallet.MagicTotalDeposited > 0)
|
&& wallet.MagicTotalDeposited >= SystemConstants.MagicWalletMaxDeposit)
|
||||||
{
|
{
|
||||||
→ خروج از Magic Mode
|
→ خروج از Magic Mode
|
||||||
|
// سقف 100M پر شده + همه رو خرج کرده
|
||||||
}
|
}
|
||||||
|
// ⚠️ اگه Balance=0 ولی سقف پر نشده → هنوز Magic!
|
||||||
|
// کاربر میتونه دوباره شارژ کنه
|
||||||
```
|
```
|
||||||
|
|
||||||
### ۸.۲ CalculateWeeklyBalancesCommandHandler (تغییر)
|
### ۸.۲ CalculateWeeklyBalancesCommandHandler (تغییر)
|
||||||
|
|||||||
Reference in New Issue
Block a user