feat(Q24+Q26): balance threshold + SP auto-deploy worker
Build and Deploy to Kubernetes / build-and-deploy (push) Successful in 9m25s

Q24: Magic wallet entry/exit trigger now uses Balance <= 1,000,000 Rials
  instead of Balance == 0 (products have varying prices so exact zero
  is unreachable). Added MagicWalletEntryThreshold to SystemConstants.

Q26: StoredProcedureDeploymentService (IHostedService) auto-deploys
  stored procedures on startup via embedded SQL resources + SHA256
  checksum comparison. Creates [CMS].[__StoredProcedureVersions] table
  automatically. Supports GO batch separators.
This commit is contained in:
masoodafar-web
2026-02-27 04:22:24 +03:30
parent 1ac23667e2
commit a1024a3e18
5 changed files with 313 additions and 3 deletions
@@ -338,7 +338,8 @@ public class UserOrderService : UserOrderContract.UserOrderContractBase
_context.UserWalletChangeLogs.Add(walletLog);
// ═══ Magic Wallet: Entry / Exit Trigger ═══
if (wallet.Balance == 0)
// Q24: آستانه <= 1,000,000 ریال به جای == 0 (چون قیمت محصولات متفاوت است)
if (wallet.Balance <= SystemConstants.MagicWalletEntryThreshold)
{
var user = await _context.Users
.Include(u => u.ClubMembership)
@@ -358,7 +359,7 @@ public class UserOrderService : UserOrderContract.UserOrderContractBase
if (wallet.MagicTotalDeposited >= magicMaxDeposit)
{
// ── EXIT Magic Mode ──
// هر دو شرط: Balance=0 و سقف 100M پر شده
// هر دو شرط: Balance<=Threshold و سقف MagicMaxDeposit پر شده
wallet.WalletMode = WalletMode.Normal;
wallet.MagicCompletedAt = DateTime.UtcNow;
@@ -398,7 +399,7 @@ public class UserOrderService : UserOrderContract.UserOrderContractBase
currentCycle.MagicStartedAt = DateTime.UtcNow;
}
}
// ⚠️ اگه Magic باشه و Balance=0 ولی سقف پر نشده → هنوز Magic!
// ⚠️ اگه Magic باشه و Balance<=Threshold ولی سقف پر نشده → هنوز Magic!
// کاربر میتونه دوباره شارژ کنه
}