diff --git a/src/CMSMicroservice.Domain/Entities/Club/ClubFeature.cs b/src/CMSMicroservice.Domain/Entities/Club/ClubFeature.cs
new file mode 100644
index 0000000..281336b
--- /dev/null
+++ b/src/CMSMicroservice.Domain/Entities/Club/ClubFeature.cs
@@ -0,0 +1,37 @@
+namespace CMSMicroservice.Domain.Entities.Club;
+
+///
+/// فیچرهای باشگاه مشتریان (امکانات ویژه)
+///
+public class ClubFeature : BaseAuditableEntity
+{
+ ///
+ /// نام فیچر
+ ///
+ public string Title { get; set; }
+
+ ///
+ /// توضیحات
+ ///
+ public string? Description { get; set; }
+
+ ///
+ /// وضعیت فعال/غیرفعال
+ ///
+ public bool IsActive { get; set; }
+
+ ///
+ /// امتیاز لازم برای دریافت (اختیاری)
+ ///
+ public int? RequiredPoints { get; set; }
+
+ ///
+ /// ترتیب نمایش
+ ///
+ public int SortOrder { get; set; }
+
+ ///
+ /// UserClubFeature Collection Navigation Reference
+ ///
+ public virtual ICollection? UserClubFeatures { get; set; }
+}
diff --git a/src/CMSMicroservice.Domain/Entities/Club/ClubMembership.cs b/src/CMSMicroservice.Domain/Entities/Club/ClubMembership.cs
new file mode 100644
index 0000000..a0c63df
--- /dev/null
+++ b/src/CMSMicroservice.Domain/Entities/Club/ClubMembership.cs
@@ -0,0 +1,47 @@
+namespace CMSMicroservice.Domain.Entities.Club;
+
+///
+/// عضویت در باشگاه مشتریان
+///
+public class ClubMembership : BaseAuditableEntity
+{
+ ///
+ /// شناسه کاربر
+ ///
+ public long UserId { get; set; }
+
+ ///
+ /// User Navigation Property
+ ///
+ public virtual User User { get; set; }
+
+ ///
+ /// وضعیت فعال/غیرفعال عضویت
+ ///
+ public bool IsActive { get; set; }
+
+ ///
+ /// تاریخ فعالسازی عضویت
+ ///
+ public DateTime? ActivatedAt { get; set; }
+
+ ///
+ /// مبلغ اولیه پرداختی برای فعالسازی (معمولاً ۲۵ میلیون تومان)
+ ///
+ public long InitialContribution { get; set; }
+
+ ///
+ /// مجموع درآمد کارمزد تاکنون (ریال)
+ ///
+ public long TotalEarned { get; set; }
+
+ ///
+ /// UserClubFeature Collection Navigation Reference
+ ///
+ public virtual ICollection? UserClubFeatures { get; set; }
+
+ ///
+ /// ClubMembershipHistory Collection Navigation Reference
+ ///
+ public virtual ICollection? ClubMembershipHistories { get; set; }
+}
diff --git a/src/CMSMicroservice.Domain/Entities/Club/UserClubFeature.cs b/src/CMSMicroservice.Domain/Entities/Club/UserClubFeature.cs
new file mode 100644
index 0000000..4160091
--- /dev/null
+++ b/src/CMSMicroservice.Domain/Entities/Club/UserClubFeature.cs
@@ -0,0 +1,47 @@
+namespace CMSMicroservice.Domain.Entities.Club;
+
+///
+/// جدول واسط: کاربر – فیچر (فیچرهای فعال شده برای کاربر)
+///
+public class UserClubFeature : BaseAuditableEntity
+{
+ ///
+ /// شناسه کاربر
+ ///
+ public long UserId { get; set; }
+
+ ///
+ /// User Navigation Property
+ ///
+ public virtual User User { get; set; }
+
+ ///
+ /// شناسه عضویت باشگاه
+ ///
+ public long ClubMembershipId { get; set; }
+
+ ///
+ /// ClubMembership Navigation Property
+ ///
+ public virtual ClubMembership ClubMembership { get; set; }
+
+ ///
+ /// شناسه فیچر
+ ///
+ public long ClubFeatureId { get; set; }
+
+ ///
+ /// ClubFeature Navigation Property
+ ///
+ public virtual ClubFeature ClubFeature { get; set; }
+
+ ///
+ /// تاریخ فعالسازی فیچر برای کاربر
+ ///
+ public DateTime GrantedAt { get; set; }
+
+ ///
+ /// یادداشت اختیاری
+ ///
+ public string? Notes { get; set; }
+}
diff --git a/src/CMSMicroservice.Domain/Entities/Commission/UserCommissionPayout.cs b/src/CMSMicroservice.Domain/Entities/Commission/UserCommissionPayout.cs
new file mode 100644
index 0000000..5cb67c7
--- /dev/null
+++ b/src/CMSMicroservice.Domain/Entities/Commission/UserCommissionPayout.cs
@@ -0,0 +1,77 @@
+namespace CMSMicroservice.Domain.Entities.Commission;
+
+///
+/// پرداخت کمیسیون به کاربران
+///
+public class UserCommissionPayout : BaseAuditableEntity
+{
+ ///
+ /// شناسه کاربر
+ ///
+ public long UserId { get; set; }
+
+ ///
+ /// User Navigation Property
+ ///
+ public virtual User User { get; set; }
+
+ ///
+ /// شماره هفته
+ ///
+ public string WeekNumber { get; set; }
+
+ ///
+ /// شناسه استخر هفتگی
+ ///
+ public long WeeklyPoolId { get; set; }
+
+ ///
+ /// WeeklyCommissionPool Navigation Property
+ ///
+ public virtual WeeklyCommissionPool WeeklyPool { get; set; }
+
+ ///
+ /// تعداد امتیازی که کاربر داشت
+ ///
+ public int BalancesEarned { get; set; }
+
+ ///
+ /// ارزش هر امتیاز (ریال)
+ ///
+ public long ValuePerBalance { get; set; }
+
+ ///
+ /// مبلغ کل: BalancesEarned × ValuePerBalance
+ ///
+ public long TotalAmount { get; set; }
+
+ ///
+ /// وضعیت پرداخت
+ ///
+ public CommissionPayoutStatus Status { get; set; }
+
+ ///
+ /// تاریخ واریز به کیف پول
+ ///
+ public DateTime? PaidAt { get; set; }
+
+ ///
+ /// روش برداشت (اگر کاربر درخواست برداشت داده)
+ ///
+ public WithdrawalMethod? WithdrawalMethod { get; set; }
+
+ ///
+ /// شماره شبای برداشت (اگر نقدی)
+ ///
+ public string? IbanNumber { get; set; }
+
+ ///
+ /// تاریخ برداشت نقدی/الماس
+ ///
+ public DateTime? WithdrawnAt { get; set; }
+
+ ///
+ /// CommissionPayoutHistory Collection Navigation Reference
+ ///
+ public virtual ICollection? CommissionPayoutHistories { get; set; }
+}
diff --git a/src/CMSMicroservice.Domain/Entities/Commission/WeeklyCommissionPool.cs b/src/CMSMicroservice.Domain/Entities/Commission/WeeklyCommissionPool.cs
new file mode 100644
index 0000000..83ee4ce
--- /dev/null
+++ b/src/CMSMicroservice.Domain/Entities/Commission/WeeklyCommissionPool.cs
@@ -0,0 +1,42 @@
+namespace CMSMicroservice.Domain.Entities.Commission;
+
+///
+/// استخر کارمزد هفتگی
+///
+public class WeeklyCommissionPool : BaseAuditableEntity
+{
+ ///
+ /// شماره هفته (مثال: "2025-W48")
+ ///
+ public string WeekNumber { get; set; }
+
+ ///
+ /// مجموع مبلغ جمعشده در استخر (ریال)
+ ///
+ public long TotalPoolAmount { get; set; }
+
+ ///
+ /// مجموع تعادلهای کل سیستم در این هفته
+ ///
+ public int TotalBalances { get; set; }
+
+ ///
+ /// مبلغ ریالی هر امتیاز (TotalPoolAmount ÷ TotalBalances)
+ ///
+ public long ValuePerBalance { get; set; }
+
+ ///
+ /// آیا محاسبه و توزیع شده
+ ///
+ public bool IsCalculated { get; set; }
+
+ ///
+ /// تاریخ محاسبه و توزیع
+ ///
+ public DateTime? CalculatedAt { get; set; }
+
+ ///
+ /// UserCommissionPayout Collection Navigation Reference
+ ///
+ public virtual ICollection? UserCommissionPayouts { get; set; }
+}
diff --git a/src/CMSMicroservice.Domain/Entities/Configuration/SystemConfiguration.cs b/src/CMSMicroservice.Domain/Entities/Configuration/SystemConfiguration.cs
new file mode 100644
index 0000000..3281388
--- /dev/null
+++ b/src/CMSMicroservice.Domain/Entities/Configuration/SystemConfiguration.cs
@@ -0,0 +1,42 @@
+namespace CMSMicroservice.Domain.Entities.Configuration;
+
+///
+/// تنظیمات پویای سیستم - قابل تغییر بدون Deployment
+///
+public class SystemConfiguration : BaseAuditableEntity
+{
+ ///
+ /// محدوده تنظیمات (System, Network, Club, Commission)
+ ///
+ public ConfigurationScope Scope { get; set; }
+
+ ///
+ /// کلید تنظیم (مثلاً "MaxWeeklyBalancesPerUser")
+ ///
+ public string Key { get; set; }
+
+ ///
+ /// مقدار بهصورت رشته (تفسیر در Application Layer)
+ ///
+ public string Value { get; set; }
+
+ ///
+ /// نوع داده برای Validation و UI (Int/Decimal/Bool/String/Json)
+ ///
+ public string? DataType { get; set; }
+
+ ///
+ /// توضیحات برای ادمین
+ ///
+ public string? Description { get; set; }
+
+ ///
+ /// فعال یا غیرفعال
+ ///
+ public bool IsActive { get; set; }
+
+ ///
+ /// SystemConfigurationHistory Collection Navigation Reference
+ ///
+ public virtual ICollection? SystemConfigurationHistories { get; set; }
+}
diff --git a/src/CMSMicroservice.Domain/Entities/History/ClubMembershipHistory.cs b/src/CMSMicroservice.Domain/Entities/History/ClubMembershipHistory.cs
new file mode 100644
index 0000000..68c9af1
--- /dev/null
+++ b/src/CMSMicroservice.Domain/Entities/History/ClubMembershipHistory.cs
@@ -0,0 +1,57 @@
+namespace CMSMicroservice.Domain.Entities.History;
+
+///
+/// تاریخچه تغییرات عضویت باشگاه (برای Audit)
+///
+public class ClubMembershipHistory : BaseAuditableEntity
+{
+ ///
+ /// شناسه عضویت باشگاه
+ ///
+ public long ClubMembershipId { get; set; }
+
+ ///
+ /// ClubMembership Navigation Property
+ ///
+ public virtual ClubMembership? ClubMembership { get; set; }
+
+ ///
+ /// شناسه کاربر
+ ///
+ public long UserId { get; set; }
+
+ ///
+ /// وضعیت فعال قبل از تغییر
+ ///
+ public bool OldIsActive { get; set; }
+
+ ///
+ /// وضعیت فعال بعد از تغییر
+ ///
+ public bool NewIsActive { get; set; }
+
+ ///
+ /// مبلغ مشارکت قبل از تغییر
+ ///
+ public long? OldInitialContribution { get; set; }
+
+ ///
+ /// مبلغ مشارکت بعد از تغییر
+ ///
+ public long? NewInitialContribution { get; set; }
+
+ ///
+ /// نوع عملیات (Activated, Deactivated, Updated, ManualFix)
+ ///
+ public ClubMembershipAction Action { get; set; }
+
+ ///
+ /// دلیل تغییر (اختیاری)
+ ///
+ public string? Reason { get; set; }
+
+ ///
+ /// چه کسی انجام داده (UserId یا "System")
+ ///
+ public string? PerformedBy { get; set; }
+}
diff --git a/src/CMSMicroservice.Domain/Entities/History/CommissionPayoutHistory.cs b/src/CMSMicroservice.Domain/Entities/History/CommissionPayoutHistory.cs
new file mode 100644
index 0000000..f4dc40d
--- /dev/null
+++ b/src/CMSMicroservice.Domain/Entities/History/CommissionPayoutHistory.cs
@@ -0,0 +1,62 @@
+namespace CMSMicroservice.Domain.Entities.History;
+
+///
+/// تاریخچه تغییرات پرداخت کمیسیون (برای Audit)
+///
+public class CommissionPayoutHistory : BaseAuditableEntity
+{
+ ///
+ /// شناسه پرداخت کمیسیون
+ ///
+ public long UserCommissionPayoutId { get; set; }
+
+ ///
+ /// UserCommissionPayout Navigation Property
+ ///
+ public virtual UserCommissionPayout? UserCommissionPayout { get; set; }
+
+ ///
+ /// شناسه کاربر
+ ///
+ public long UserId { get; set; }
+
+ ///
+ /// شماره هفته
+ ///
+ public string WeekNumber { get; set; }
+
+ ///
+ /// مبلغ قبل از تغییر
+ ///
+ public long AmountBefore { get; set; }
+
+ ///
+ /// مبلغ بعد از تغییر
+ ///
+ public long AmountAfter { get; set; }
+
+ ///
+ /// وضعیت قبل از تغییر
+ ///
+ public CommissionPayoutStatus OldStatus { get; set; }
+
+ ///
+ /// وضعیت بعد از تغییر
+ ///
+ public CommissionPayoutStatus NewStatus { get; set; }
+
+ ///
+ /// نوع عملیات (Created, Paid, WithdrawRequested, Withdrawn, Cancelled, ManualFix)
+ ///
+ public CommissionPayoutAction Action { get; set; }
+
+ ///
+ /// چه کسی انجام داده (UserId یا "System")
+ ///
+ public string? PerformedBy { get; set; }
+
+ ///
+ /// دلیل تغییر (اختیاری)
+ ///
+ public string? Reason { get; set; }
+}
diff --git a/src/CMSMicroservice.Domain/Entities/History/NetworkMembershipHistory.cs b/src/CMSMicroservice.Domain/Entities/History/NetworkMembershipHistory.cs
new file mode 100644
index 0000000..60f0e1e
--- /dev/null
+++ b/src/CMSMicroservice.Domain/Entities/History/NetworkMembershipHistory.cs
@@ -0,0 +1,47 @@
+namespace CMSMicroservice.Domain.Entities.History;
+
+///
+/// تاریخچه جابجایی در شبکه باینری (برای Audit)
+///
+public class NetworkMembershipHistory : BaseAuditableEntity
+{
+ ///
+ /// شناسه کاربر
+ ///
+ public long UserId { get; set; }
+
+ ///
+ /// شناسه والد قبل از تغییر
+ ///
+ public long? OldParentId { get; set; }
+
+ ///
+ /// شناسه والد بعد از تغییر
+ ///
+ public long? NewParentId { get; set; }
+
+ ///
+ /// موقعیت شاخه قبل از تغییر
+ ///
+ public NetworkLeg? OldLegPosition { get; set; }
+
+ ///
+ /// موقعیت شاخه بعد از تغییر
+ ///
+ public NetworkLeg? NewLegPosition { get; set; }
+
+ ///
+ /// نوع عملیات (Join, Move, Remove)
+ ///
+ public NetworkMembershipAction Action { get; set; }
+
+ ///
+ /// دلیل تغییر (اختیاری)
+ ///
+ public string? Reason { get; set; }
+
+ ///
+ /// چه کسی انجام داده (UserId یا "System")
+ ///
+ public string? PerformedBy { get; set; }
+}
diff --git a/src/CMSMicroservice.Domain/Entities/History/SystemConfigurationHistory.cs b/src/CMSMicroservice.Domain/Entities/History/SystemConfigurationHistory.cs
new file mode 100644
index 0000000..e7f980c
--- /dev/null
+++ b/src/CMSMicroservice.Domain/Entities/History/SystemConfigurationHistory.cs
@@ -0,0 +1,47 @@
+namespace CMSMicroservice.Domain.Entities.History;
+
+///
+/// تاریخچه تغییرات تنظیمات سیستم (برای Audit)
+///
+public class SystemConfigurationHistory : BaseAuditableEntity
+{
+ ///
+ /// شناسه تنظیم
+ ///
+ public long ConfigurationId { get; set; }
+
+ ///
+ /// SystemConfiguration Navigation Property
+ ///
+ public virtual SystemConfiguration? Configuration { get; set; }
+
+ ///
+ /// محدوده تنظیمات
+ ///
+ public ConfigurationScope Scope { get; set; }
+
+ ///
+ /// کلید تنظیم
+ ///
+ public string Key { get; set; }
+
+ ///
+ /// مقدار قبل از تغییر
+ ///
+ public string OldValue { get; set; }
+
+ ///
+ /// مقدار بعد از تغییر
+ ///
+ public string NewValue { get; set; }
+
+ ///
+ /// دلیل تغییر (اختیاری)
+ ///
+ public string? Reason { get; set; }
+
+ ///
+ /// چه کسی انجام داده (UserId یا "System")
+ ///
+ public string? PerformedBy { get; set; }
+}
diff --git a/src/CMSMicroservice.Domain/Entities/Network/NetworkWeeklyBalance.cs b/src/CMSMicroservice.Domain/Entities/Network/NetworkWeeklyBalance.cs
new file mode 100644
index 0000000..707fa7e
--- /dev/null
+++ b/src/CMSMicroservice.Domain/Entities/Network/NetworkWeeklyBalance.cs
@@ -0,0 +1,52 @@
+namespace CMSMicroservice.Domain.Entities.Network;
+
+///
+/// تعادلهای هفتگی شبکه باینری
+///
+public class NetworkWeeklyBalance : BaseAuditableEntity
+{
+ ///
+ /// شناسه کاربر
+ ///
+ public long UserId { get; set; }
+
+ ///
+ /// User Navigation Property
+ ///
+ public virtual User User { get; set; }
+
+ ///
+ /// شماره هفته (مثال: "2025-W48")
+ ///
+ public string WeekNumber { get; set; }
+
+ ///
+ /// تعداد تعادل شاخه چپ در این هفته
+ ///
+ public int LeftLegBalances { get; set; }
+
+ ///
+ /// تعداد تعادل شاخه راست در این هفته
+ ///
+ public int RightLegBalances { get; set; }
+
+ ///
+ /// امتیاز کاربر: MIN(LeftLegBalances, RightLegBalances)
+ ///
+ public int TotalBalances { get; set; }
+
+ ///
+ /// مبلغی که از این کاربر به استخر هفتگی اضافه شد (ریال)
+ ///
+ public long WeeklyPoolContribution { get; set; }
+
+ ///
+ /// زمان محاسبه توسط Worker
+ ///
+ public DateTime? CalculatedAt { get; set; }
+
+ ///
+ /// آیا منقضی شده (بعد از توزیع کمیسیون)
+ ///
+ public bool IsExpired { get; set; }
+}
diff --git a/src/CMSMicroservice.Domain/Entities/Products.cs b/src/CMSMicroservice.Domain/Entities/Products.cs
index 8a693c0..3a6ba93 100644
--- a/src/CMSMicroservice.Domain/Entities/Products.cs
+++ b/src/CMSMicroservice.Domain/Entities/Products.cs
@@ -14,6 +14,21 @@ public class Products : BaseAuditableEntity
public int SaleCount { get; set; }
public int ViewCount { get; set; }
public int RemainingCount { get; set; }
+
+ // ============= Club Shop Fields =============
+
+ ///
+ /// آیا این محصول فقط در فروشگاه باشگاه موجود است
+ ///
+ public bool IsClubExclusive { get; set; }
+
+ ///
+ /// درصد تخفیف باشگاه (0 تا 100)
+ ///
+ public int ClubDiscountPercent { get; set; }
+
+ // ============= Navigation Properties =============
+
//UserCarts Collection Navigation Reference
public virtual ICollection UserCartss { get; set; }
//ProductGallerys Collection Navigation Reference
diff --git a/src/CMSMicroservice.Domain/Entities/User.cs b/src/CMSMicroservice.Domain/Entities/User.cs
index ea787f7..eb58f22 100644
--- a/src/CMSMicroservice.Domain/Entities/User.cs
+++ b/src/CMSMicroservice.Domain/Entities/User.cs
@@ -36,6 +36,26 @@ public class User : BaseAuditableEntity
public DateTime? BirthDate { get; set; }
//پسوورد هش کاربر
public string? HashPassword { get; set; }
+
+ // ============= Network Club System Fields =============
+
+ ///
+ /// شناسه والد در شبکه باینری
+ ///
+ public long? NetworkParentId { get; set; }
+
+ ///
+ /// Network Parent Navigation Property
+ ///
+ public virtual User? NetworkParent { get; set; }
+
+ ///
+ /// موقعیت در شبکه (شاخه چپ یا راست)
+ ///
+ public NetworkLeg? LegPosition { get; set; }
+
+ // ============= Navigation Properties =============
+
//UserAddress Collection Navigation Reference
public virtual ICollection UserAddresss { get; set; }
//UserRole Collection Navigation Reference
@@ -50,4 +70,14 @@ public class User : BaseAuditableEntity
public virtual ICollection UserOrders { get; set; }
//UserWallet Collection Navigation Reference
public virtual ICollection UserWallets { get; set; }
+ //NetworkChildren Collection Navigation Reference (فرزندان در شبکه باینری)
+ public virtual ICollection? NetworkChildren { get; set; }
+ //ClubMembership Navigation Reference
+ public virtual ClubMembership? ClubMembership { get; set; }
+ //UserClubFeature Collection Navigation Reference
+ public virtual ICollection? UserClubFeatures { get; set; }
+ //NetworkWeeklyBalance Collection Navigation Reference
+ public virtual ICollection? NetworkWeeklyBalances { get; set; }
+ //UserCommissionPayout Collection Navigation Reference
+ public virtual ICollection? CommissionPayouts { get; set; }
}
diff --git a/src/CMSMicroservice.Domain/Entities/UserWallet.cs b/src/CMSMicroservice.Domain/Entities/UserWallet.cs
index d0c47fe..a24d42e 100644
--- a/src/CMSMicroservice.Domain/Entities/UserWallet.cs
+++ b/src/CMSMicroservice.Domain/Entities/UserWallet.cs
@@ -8,8 +8,17 @@ public class UserWallet : BaseAuditableEntity
public virtual User User { get; set; }
//موجودی
public long Balance { get; set; }
- //موجودی شبکه
+
+ ///
+ /// موجودی شبکه/کارمزد (کیف پول طلایی) - قابل برداشت نقدی یا خرید الماس
+ ///
public long NetworkBalance { get; set; }
+
+ ///
+ /// موجودی تخفیف - فقط برای خرید از فروشگاه باشگاه مشتریان
+ ///
+ public long DiscountBalance { get; set; }
+
//UserWalletChangeLog Collection Navigation Reference
public virtual ICollection UserWalletChangeLogs { get; set; }
}
diff --git a/src/CMSMicroservice.Domain/GlobalUsings.cs b/src/CMSMicroservice.Domain/GlobalUsings.cs
index e6d77cb..b3106db 100644
--- a/src/CMSMicroservice.Domain/GlobalUsings.cs
+++ b/src/CMSMicroservice.Domain/GlobalUsings.cs
@@ -1,6 +1,11 @@
global using CMSMicroservice.Domain.Common;
global using CMSMicroservice.Domain.Entities;
-
+global using CMSMicroservice.Domain.Entities.Club;
+global using CMSMicroservice.Domain.Entities.Network;
+global using CMSMicroservice.Domain.Entities.Commission;
+global using CMSMicroservice.Domain.Entities.Configuration;
+global using CMSMicroservice.Domain.Entities.History;
+global using CMSMicroservice.Domain.Enums;
global using CMSMicroservice.Domain.Events;
global using System.Threading;
global using System.Threading.Tasks;