ae92ab8697
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)
43 lines
2.3 KiB
C#
43 lines
2.3 KiB
C#
using CMSMicroservice.Domain.Entities;
|
|
using Microsoft.EntityFrameworkCore;
|
|
using Microsoft.EntityFrameworkCore.Metadata.Builders;
|
|
namespace CMSMicroservice.Infrastructure.Persistence.Configurations;
|
|
//پکیج
|
|
public class PackageConfiguration : IEntityTypeConfiguration<Package>
|
|
{
|
|
public void Configure(EntityTypeBuilder<Package> builder)
|
|
{
|
|
builder.HasQueryFilter(p => !p.IsDeleted);
|
|
builder.Ignore(entity => entity.DomainEvents);
|
|
builder.HasKey(entity => entity.Id);
|
|
builder.Property(entity => entity.Id).UseIdentityColumn();
|
|
builder.Property(entity => entity.Title).IsRequired(true);
|
|
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");
|
|
|
|
}
|
|
}
|