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)
50 lines
2.1 KiB
C#
50 lines
2.1 KiB
C#
using Microsoft.EntityFrameworkCore;
|
|
using Microsoft.EntityFrameworkCore.Metadata.Builders;
|
|
|
|
namespace CMSMicroservice.Infrastructure.Persistence.Configurations;
|
|
|
|
/// <summary>
|
|
/// استخر کارمزد هفتگی
|
|
/// </summary>
|
|
public class WeeklyCommissionPoolConfiguration : IEntityTypeConfiguration<WeeklyCommissionPool>
|
|
{
|
|
public void Configure(EntityTypeBuilder<WeeklyCommissionPool> 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.WeekDefinitionId).IsRequired();
|
|
builder.Property(entity => entity.PackageId).IsRequired();
|
|
builder.Property(entity => entity.TotalPoolAmount).IsRequired();
|
|
builder.Property(entity => entity.TotalBalances).IsRequired();
|
|
builder.Property(entity => entity.ValuePerBalance).IsRequired();
|
|
builder.Property(entity => entity.IsCalculated).IsRequired();
|
|
builder.Property(entity => entity.CalculatedAt).IsRequired(false);
|
|
|
|
// رابطه با WeekDefinition (Required FK)
|
|
builder.HasOne(entity => entity.WeekDefinition)
|
|
.WithMany(wd => wd.WeeklyCommissionPools)
|
|
.HasForeignKey(entity => entity.WeekDefinitionId)
|
|
.IsRequired()
|
|
.OnDelete(DeleteBehavior.Restrict);
|
|
|
|
// رابطه با Package
|
|
builder.HasOne(entity => entity.Package)
|
|
.WithMany()
|
|
.HasForeignKey(entity => entity.PackageId)
|
|
.OnDelete(DeleteBehavior.Restrict);
|
|
|
|
// Index یونیک ترکیبی: هر هفته × هر پکیج فقط یک استخر
|
|
builder.HasIndex(e => new { e.WeekDefinitionId, e.PackageId })
|
|
.IsUnique()
|
|
.HasDatabaseName("IX_WeeklyCommissionPool_WeekDef_Package");
|
|
|
|
// Index برای IsCalculated
|
|
builder.HasIndex(e => e.IsCalculated)
|
|
.HasDatabaseName("IX_WeeklyCommissionPool_IsCalculated");
|
|
}
|
|
}
|