Files
CMS/src/CMSMicroservice.Domain/Common/SystemConstants.cs
T
masoodafar-web 61b7e4f8f2
Build and Deploy to Kubernetes / build-and-deploy (push) Successful in 8m29s
F2-F7: نوتیفیکیشن‌ها+نام‌پکیج، ستون پکیج در CSV، مقادیر داینامیک کیف‌پول جادویی، ولیدیتور SystemConstants
F2: اضافه شدن packageName به SmsTemplates، IUserNotificationService، UserNotificationService
    - DayaLoan، ClubActivated، CommissionDeposited حالا نام پکیج را نشان می‌دهند
F4: اضافه شدن ستون پکیج به CSV خروجی‌ها
    - commission.proto: package_name در WithdrawalRequestModel
    - manualpayment.proto: package_name در ManualPaymentModel
    - کوئری‌هندلرها UserPackagePurchases لوکاپ اضافه شد
F6: مقادیر داینامیک کیف‌پول جادویی از پکیج
    - userwallet.proto: magic_multiplier + magic_max_credit
    - UserWalletService: پاپیولیت فیلدهای جدید + فالبک به SystemConstants
F7: ولیدیتورها از SystemConstants استفاده می‌کنند
    - WalletMaxSafeAmount (10B ریال) به عنوان حصار ایمنی
    - MagicWalletMinCharge، DiscountWalletMinCharge ثابت‌های مرکزی
    - سقف واقعی per-package در هندلرها اعمال می‌شود
Proto: v0.0.189
2026-02-27 08:47:46 +03:30

185 lines
7.1 KiB
C#

namespace CMSMicroservice.Domain.Common;
/// <summary>
/// تنظیمات ثابت سیستم - Static و در مموری
/// این مقادیر هرگز تغییر نمی‌کنند و نیازی به جدول ندارند
/// </summary>
public static class SystemConstants
{
#region Network Settings
/// <summary>
/// اجازه حذف والدین که فرزند دارند
/// </summary>
public const bool NetworkAllowOrphanNodes = false;
/// <summary>
/// حداکثر تعداد فرزند مستقیم در هر پا
/// </summary>
public const int NetworkMaxChildrenPerLeg = 1;
#endregion
#region Commission Settings
/// <summary>
/// امکان برداشت نقدی فعال باشد
/// </summary>
public const bool CommissionCashWithdrawalEnabled = true;
/// <summary>
/// حداقل مبلغ برداشت (ریال)
/// </summary>
public const long CommissionMinWithdrawalAmount = 1_000_000;
/// <summary>
/// روش محاسبه (ORM یا SP)
/// </summary>
public const string CommissionCalculationStrategy = "SP";
#endregion
#region System Settings
/// <summary>
/// حالت تعمیر و نگهداری سیستم
/// </summary>
public const bool SystemMaintenanceMode = false;
/// <summary>
/// فعال‌سازی لاگ تغییرات
/// </summary>
public const bool SystemEnableAuditLog = true;
#endregion
#region Magic Wallet Settings
// Per-package magic wallet settings are now in Package entity:
// Package.MagicWalletMultiplier, Package.MagicWalletMaxDeposit, Package.MagicWalletMaxCredit
/// <summary>
/// آستانه ورود/خروج کیف‌پول جادویی (ریال).
/// وقتی موجودی کیف‌پول به این مقدار یا کمتر برسد، تریگر Entry/Exit اجرا می‌شود.
/// مقدار ۱٬۰۰۰٬۰۰۰ ریال = ۱۰۰ هزار تومان
/// (Q24: چون قیمت محصولات متفاوت است، موجودی دقیقاً صفر نمی‌شود)
/// </summary>
public const long MagicWalletEntryThreshold = 1_000_000;
/// <summary>
/// مقدار پیش‌فرض ضریب جادویی وقتی پکیج یافت نشود (بازگشت به پایه)
/// </summary>
public const double MagicWalletDefaultMultiplier = 2.5;
/// <summary>
/// مقدار پیش‌فرض حداکثر واریز جادویی وقتی پکیج یافت نشود (ریال)
/// </summary>
public const long MagicWalletDefaultMaxDeposit = 1_000_000_000;
/// <summary>
/// مقدار پیش‌فرض حداکثر اعتبار جادویی وقتی پکیج یافت نشود (ریال)
/// </summary>
public const long MagicWalletDefaultMaxCredit = 2_500_000_000;
#endregion
#region Wallet Validation Settings
/// <summary>
/// حداکثر مبلغ مجاز در ولیدیتور (حصار ایمنی — مقدار واقعی از پکیج خوانده می‌شود).
/// ۱۰ میلیارد ریال = ۱ میلیارد تومان
/// </summary>
public const long WalletMaxSafeAmount = 10_000_000_000;
/// <summary>
/// حداقل مبلغ شارژ جادویی (ریال) — ۱۰۰٬۰۰۰ ریال = ۱۰ هزار تومان
/// </summary>
public const long MagicWalletMinCharge = 100_000;
/// <summary>
/// حداقل مبلغ شارژ تخفیفی (ریال) — ۱۰٬۰۰۰ ریال = ۱ هزار تومان
/// </summary>
public const long DiscountWalletMinCharge = 10_000;
#endregion
#region Shop Settings
/// <summary>
/// مالیات بر ارزش افزوده (10%)
/// </summary>
public const decimal ShopVAT = 0.1m;
/// <summary>
/// مالیات فعال است؟
/// </summary>
public const bool ShopVATEnabled = true;
#endregion
#region Helper Methods
/// <summary>
/// دریافت مقدار به صورت دیکشنری برای نمایش در Admin Panel
/// Note: Per-package values (Price, MaxBalancesPerLeg, etc.) are now read from Package entity
/// via ConfigurationService — only static/global constants remain here.
/// </summary>
public static Dictionary<string, object> GetAllAsDict()
{
return new Dictionary<string, object>
{
// Network
["Network.AllowOrphanNodes"] = NetworkAllowOrphanNodes,
["Network.MaxChildrenPerLeg"] = NetworkMaxChildrenPerLeg,
// Commission (global settings only — per-package limits are in Package entity)
["Commission.CashWithdrawalEnabled"] = CommissionCashWithdrawalEnabled,
["Commission.MinWithdrawalAmount"] = CommissionMinWithdrawalAmount,
["Commission.CalculationStrategy"] = CommissionCalculationStrategy,
// System
["System.MaintenanceMode"] = SystemMaintenanceMode,
["System.EnableAuditLog"] = SystemEnableAuditLog,
// Magic Wallet (global threshold)
["MagicWallet.EntryThreshold"] = MagicWalletEntryThreshold,
// Shop
["Shop.VAT"] = ShopVAT,
["Shop.VATEnabled"] = ShopVATEnabled
};
}
/// <summary>
/// دریافت لیست تنظیمات با توضیحات
/// Note: Per-package values are served from Package entity via ConfigurationService.
/// </summary>
public static List<(string Key, object Value, string Description)> GetAllWithDescriptions()
{
return new List<(string Key, object Value, string Description)>
{
// Network
("Network.AllowOrphanNodes", NetworkAllowOrphanNodes, "اجازه حذف والدین که فرزند دارند"),
("Network.MaxChildrenPerLeg", NetworkMaxChildrenPerLeg, "حداکثر تعداد فرزند مستقیم در هر پا"),
// Commission (global settings only)
("Commission.CashWithdrawalEnabled", CommissionCashWithdrawalEnabled, "امکان برداشت نقدی فعال باشد"),
("Commission.MinWithdrawalAmount", CommissionMinWithdrawalAmount, "حداقل مبلغ برداشت (ریال)"),
("Commission.CalculationStrategy", CommissionCalculationStrategy, "روش محاسبه (ORM/SP)"),
// System
("System.MaintenanceMode", SystemMaintenanceMode, "حالت تعمیر و نگهداری سیستم"),
("System.EnableAuditLog", SystemEnableAuditLog, "فعال‌سازی لاگ تغییرات"),
// Magic Wallet (global threshold)
("MagicWallet.EntryThreshold", MagicWalletEntryThreshold, "آستانه ورود/خروج کیف‌پول جادویی (ریال) — Q24"),
// Shop
("Shop.VAT", ShopVAT, "مالیات بر ارزش افزوده"),
("Shop.VATEnabled", ShopVATEnabled, "مالیات فعال است؟")
};
}
#endregion
}