Phase 1: Package-Based Domain Infrastructure
ENTITIES: - Package: +11 fields (SortOrder, IsActive, IsBasePackage, SupportsDaya/Direct, ActivationFee, DiscountMultiplier, MagicWalletMultiplier, MaxBalancesPerLeg, MaxNetworkLevel, MagicWalletMaxDeposit/Credit) + nav props - PackageFeature: NEW junction entity (Package × ClubFeature) for feature DIFF - ClubMembership: +4 fields (FirstActivationDate/PackageId, LastActivation/PackageId) ActivatedAt kept as [Obsolete] for backward compat - ClubMembershipCycle: +PackageId FK (tracks which package per cycle) - WeeklyCommissionPool: +PackageId FK (separate pool per package) - UserCommissionPayout: +PackageId FK (payout per package) - NetworkWeeklyBalance: +PackageId FK (balance per package) - UserWalletChangeLog: +PackageId? FK (optional package tracking) EF CONFIGS: - PackageConfiguration: 11 new field configs + indexes - PackageFeatureConfiguration: NEW (unique PackageId+ClubFeatureId) - ClubMembershipConfiguration: First/Last Package FKs + LastActivationDate index - ClubMembershipCycleConfiguration: Package FK - WeeklyCommissionPoolConfiguration: Package FK + unique(WeekDef,Package) - UserCommissionPayoutConfiguration: Package FK + unique(User,WeekDef,Package) - NetworkWeeklyBalanceConfiguration: Package FK + unique(User,WeekDef,Package) - UserWalletChangeLogConfiguration: Package FK (nullable) DBCONTEXT: - DbSet<PackageFeature> added to ApplicationDbContext + IApplicationDbContext SYSTEMCONSTANTS: - 9 constants marked [Obsolete] → moved to Package entity (ClubMembershipGiftValue, ClubActivationFee, BasePackageAmount, DayaLoanAmount, MagicWalletMultiplier, MagicWalletMaxDeposit, MagicWalletMaxCredit, CommissionMaxWeeklyBalancesPerLeg, CommissionMaxNetworkLevel) Build: 0 errors, 610 warnings (40 new = expected Obsolete CS0618)
This commit is contained in:
@@ -15,6 +15,28 @@ public class PackageConfiguration : IEntityTypeConfiguration<Package>
|
||||
builder.Property(entity => entity.Description).IsRequired(true);
|
||||
builder.Property(entity => entity.ImagePath).IsRequired(true);
|
||||
builder.Property(entity => entity.Price).IsRequired(true);
|
||||
|
||||
// فیلدهای جدید پکیج
|
||||
builder.Property(entity => entity.SortOrder).IsRequired().HasDefaultValue(0);
|
||||
builder.Property(entity => entity.IsActive).IsRequired().HasDefaultValue(true);
|
||||
builder.Property(entity => entity.IsBasePackage).IsRequired().HasDefaultValue(false);
|
||||
builder.Property(entity => entity.SupportsDayaPurchase).IsRequired().HasDefaultValue(false);
|
||||
builder.Property(entity => entity.SupportsDirectPurchase).IsRequired().HasDefaultValue(true);
|
||||
builder.Property(entity => entity.ActivationFee).IsRequired().HasDefaultValue(0L);
|
||||
builder.Property(entity => entity.DiscountMultiplier).IsRequired().HasDefaultValue(2.0m)
|
||||
.HasPrecision(18, 4);
|
||||
builder.Property(entity => entity.MagicWalletMultiplier).IsRequired().HasDefaultValue(2.5m)
|
||||
.HasPrecision(18, 4);
|
||||
builder.Property(entity => entity.MaxBalancesPerLeg).IsRequired().HasDefaultValue(300);
|
||||
builder.Property(entity => entity.MaxNetworkLevel).IsRequired().HasDefaultValue(15);
|
||||
builder.Property(entity => entity.MagicWalletMaxDeposit).IsRequired().HasDefaultValue(1_000_000_000L);
|
||||
builder.Property(entity => entity.MagicWalletMaxCredit).IsRequired().HasDefaultValue(2_500_000_000L);
|
||||
|
||||
// Indexes
|
||||
builder.HasIndex(e => e.IsActive)
|
||||
.HasDatabaseName("IX_Package_IsActive");
|
||||
builder.HasIndex(e => e.SortOrder)
|
||||
.HasDatabaseName("IX_Package_SortOrder");
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user