feat: refactor week number handling to use WeekDefinitionId across multiple entities and queries
This commit is contained in:
+11
-4
@@ -18,7 +18,7 @@ public class CommissionPayoutHistoryConfiguration : IEntityTypeConfiguration<Com
|
||||
|
||||
builder.Property(entity => entity.UserCommissionPayoutId).IsRequired();
|
||||
builder.Property(entity => entity.UserId).IsRequired();
|
||||
builder.Property(entity => entity.WeekNumber).IsRequired().HasMaxLength(20);
|
||||
builder.Property(entity => entity.WeekDefinitionId).IsRequired();
|
||||
builder.Property(entity => entity.AmountBefore).IsRequired();
|
||||
builder.Property(entity => entity.AmountAfter).IsRequired();
|
||||
builder.Property(entity => entity.OldStatus).IsRequired();
|
||||
@@ -33,6 +33,13 @@ public class CommissionPayoutHistoryConfiguration : IEntityTypeConfiguration<Com
|
||||
.HasForeignKey(entity => entity.UserCommissionPayoutId)
|
||||
.OnDelete(DeleteBehavior.Restrict);
|
||||
|
||||
// رابطه با WeekDefinition (Required FK)
|
||||
builder.HasOne(entity => entity.WeekDefinition)
|
||||
.WithMany(wd => wd.CommissionPayoutHistories)
|
||||
.HasForeignKey(entity => entity.WeekDefinitionId)
|
||||
.IsRequired()
|
||||
.OnDelete(DeleteBehavior.Restrict);
|
||||
|
||||
// Index برای UserId و Created
|
||||
builder.HasIndex(e => new { e.UserId, e.Created })
|
||||
.HasDatabaseName("IX_CommissionPayoutHistory_UserId_Created");
|
||||
@@ -41,9 +48,9 @@ public class CommissionPayoutHistoryConfiguration : IEntityTypeConfiguration<Com
|
||||
builder.HasIndex(e => e.UserCommissionPayoutId)
|
||||
.HasDatabaseName("IX_CommissionPayoutHistory_PayoutId");
|
||||
|
||||
// Index برای WeekNumber
|
||||
builder.HasIndex(e => e.WeekNumber)
|
||||
.HasDatabaseName("IX_CommissionPayoutHistory_WeekNumber");
|
||||
// Index برای WeekDefinitionId
|
||||
builder.HasIndex(e => e.WeekDefinitionId)
|
||||
.HasDatabaseName("IX_CommissionPayoutHistory_WeekDefinitionId");
|
||||
|
||||
// Index برای Action
|
||||
builder.HasIndex(e => e.Action)
|
||||
|
||||
+14
-8
@@ -17,7 +17,7 @@ public class NetworkWeeklyBalanceConfiguration : IEntityTypeConfiguration<Networ
|
||||
builder.Property(entity => entity.Id).UseIdentityColumn();
|
||||
|
||||
builder.Property(entity => entity.UserId).IsRequired();
|
||||
builder.Property(entity => entity.WeekNumber).IsRequired().HasMaxLength(20);
|
||||
builder.Property(entity => entity.WeekDefinitionId).IsRequired();
|
||||
builder.Property(entity => entity.LeftLegBalances).IsRequired();
|
||||
builder.Property(entity => entity.RightLegBalances).IsRequired();
|
||||
builder.Property(entity => entity.TotalBalances).IsRequired();
|
||||
@@ -31,14 +31,20 @@ public class NetworkWeeklyBalanceConfiguration : IEntityTypeConfiguration<Networ
|
||||
.HasForeignKey(entity => entity.UserId)
|
||||
.OnDelete(DeleteBehavior.Restrict);
|
||||
|
||||
// Composite Index برای UserId و WeekNumber
|
||||
builder.HasIndex(e => new { e.UserId, e.WeekNumber })
|
||||
.IsUnique()
|
||||
.HasDatabaseName("IX_NetworkWeeklyBalance_UserId_WeekNumber");
|
||||
// رابطه با WeekDefinition
|
||||
builder.HasOne(entity => entity.WeekDefinition)
|
||||
.WithMany(wd => wd.NetworkWeeklyBalances)
|
||||
.HasForeignKey(entity => entity.WeekDefinitionId)
|
||||
.OnDelete(DeleteBehavior.Restrict);
|
||||
|
||||
// Index برای WeekNumber
|
||||
builder.HasIndex(e => e.WeekNumber)
|
||||
.HasDatabaseName("IX_NetworkWeeklyBalance_WeekNumber");
|
||||
// Composite Index برای UserId و WeekDefinitionId
|
||||
builder.HasIndex(e => new { e.UserId, e.WeekDefinitionId })
|
||||
.IsUnique()
|
||||
.HasDatabaseName("IX_NetworkWeeklyBalance_UserId_WeekDefinitionId");
|
||||
|
||||
// Index برای WeekDefinitionId
|
||||
builder.HasIndex(e => e.WeekDefinitionId)
|
||||
.HasDatabaseName("IX_NetworkWeeklyBalance_WeekDefinitionId");
|
||||
|
||||
// Index برای IsExpired
|
||||
builder.HasIndex(e => e.IsExpired)
|
||||
|
||||
+11
-7
@@ -17,7 +17,7 @@ public class UserCommissionPayoutConfiguration : IEntityTypeConfiguration<UserCo
|
||||
builder.Property(entity => entity.Id).UseIdentityColumn();
|
||||
|
||||
builder.Property(entity => entity.UserId).IsRequired();
|
||||
builder.Property(entity => entity.WeekNumber).IsRequired().HasMaxLength(20);
|
||||
builder.Property(entity => entity.WeekDefinitionId).IsRequired();
|
||||
builder.Property(entity => entity.WeeklyPoolId).IsRequired();
|
||||
builder.Property(entity => entity.BalancesEarned).IsRequired();
|
||||
builder.Property(entity => entity.ValuePerBalance).IsRequired();
|
||||
@@ -43,10 +43,17 @@ public class UserCommissionPayoutConfiguration : IEntityTypeConfiguration<UserCo
|
||||
.HasForeignKey(entity => entity.WeeklyPoolId)
|
||||
.OnDelete(DeleteBehavior.Restrict);
|
||||
|
||||
// Composite Index برای UserId و WeekNumber
|
||||
builder.HasIndex(e => new { e.UserId, e.WeekNumber })
|
||||
// رابطه با WeekDefinition (Required FK)
|
||||
builder.HasOne(entity => entity.WeekDefinition)
|
||||
.WithMany(wd => wd.UserCommissionPayouts)
|
||||
.HasForeignKey(entity => entity.WeekDefinitionId)
|
||||
.IsRequired()
|
||||
.OnDelete(DeleteBehavior.Restrict);
|
||||
|
||||
// Composite Index برای UserId و WeekDefinitionId
|
||||
builder.HasIndex(e => new { e.UserId, e.WeekDefinitionId })
|
||||
.IsUnique()
|
||||
.HasDatabaseName("IX_UserCommissionPayout_UserId_WeekNumber");
|
||||
.HasDatabaseName("IX_UserCommissionPayout_UserId_WeekDefinitionId");
|
||||
|
||||
// Index برای WeeklyPoolId
|
||||
builder.HasIndex(e => e.WeeklyPoolId)
|
||||
@@ -56,8 +63,5 @@ public class UserCommissionPayoutConfiguration : IEntityTypeConfiguration<UserCo
|
||||
builder.HasIndex(e => e.Status)
|
||||
.HasDatabaseName("IX_UserCommissionPayout_Status");
|
||||
|
||||
// Index برای WeekNumber
|
||||
builder.HasIndex(e => e.WeekNumber)
|
||||
.HasDatabaseName("IX_UserCommissionPayout_WeekNumber");
|
||||
}
|
||||
}
|
||||
|
||||
+51
@@ -0,0 +1,51 @@
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore.Metadata.Builders;
|
||||
|
||||
namespace CMSMicroservice.Infrastructure.Persistence.Configurations;
|
||||
|
||||
/// <summary>
|
||||
/// تنظیمات جدول تعریف هفتهها
|
||||
/// </summary>
|
||||
public class WeekDefinitionConfiguration : IEntityTypeConfiguration<WeekDefinition>
|
||||
{
|
||||
public void Configure(EntityTypeBuilder<WeekDefinition> 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.WeekOrder).IsRequired();
|
||||
builder.Property(entity => entity.DisplayName).IsRequired().HasMaxLength(50);
|
||||
builder.Property(entity => entity.GregorianWeekNumber).IsRequired().HasMaxLength(20);
|
||||
builder.Property(entity => entity.PersianWeekNumber).IsRequired().HasMaxLength(20);
|
||||
builder.Property(entity => entity.StartDate).IsRequired();
|
||||
builder.Property(entity => entity.EndDate).IsRequired();
|
||||
builder.Property(entity => entity.GregorianYear).IsRequired();
|
||||
builder.Property(entity => entity.PersianYear).IsRequired();
|
||||
builder.Property(entity => entity.IsActive).IsRequired().HasDefaultValue(true);
|
||||
|
||||
// Unique Index برای GregorianWeekNumber
|
||||
builder.HasIndex(e => e.GregorianWeekNumber)
|
||||
.IsUnique()
|
||||
.HasDatabaseName("IX_WeekDefinition_GregorianWeekNumber");
|
||||
|
||||
// Index برای PersianWeekNumber
|
||||
builder.HasIndex(e => e.PersianWeekNumber)
|
||||
.HasDatabaseName("IX_WeekDefinition_PersianWeekNumber");
|
||||
|
||||
// Index برای StartDate
|
||||
builder.HasIndex(e => e.StartDate)
|
||||
.HasDatabaseName("IX_WeekDefinition_StartDate");
|
||||
|
||||
// Index برای سالها
|
||||
builder.HasIndex(e => e.GregorianYear)
|
||||
.HasDatabaseName("IX_WeekDefinition_GregorianYear");
|
||||
|
||||
builder.HasIndex(e => e.PersianYear)
|
||||
.HasDatabaseName("IX_WeekDefinition_PersianYear");
|
||||
|
||||
builder.ToTable("WeekDefinitions");
|
||||
}
|
||||
}
|
||||
+11
-4
@@ -16,17 +16,24 @@ public class WeeklyCommissionPoolConfiguration : IEntityTypeConfiguration<Weekly
|
||||
builder.HasKey(entity => entity.Id);
|
||||
builder.Property(entity => entity.Id).UseIdentityColumn();
|
||||
|
||||
builder.Property(entity => entity.WeekNumber).IsRequired().HasMaxLength(20);
|
||||
builder.Property(entity => entity.WeekDefinitionId).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);
|
||||
|
||||
// Index یونیک برای WeekNumber
|
||||
builder.HasIndex(e => e.WeekNumber)
|
||||
// رابطه با WeekDefinition (Required FK)
|
||||
builder.HasOne(entity => entity.WeekDefinition)
|
||||
.WithMany(wd => wd.WeeklyCommissionPools)
|
||||
.HasForeignKey(entity => entity.WeekDefinitionId)
|
||||
.IsRequired()
|
||||
.OnDelete(DeleteBehavior.Restrict);
|
||||
|
||||
// Index یونیک برای WeekDefinitionId
|
||||
builder.HasIndex(e => e.WeekDefinitionId)
|
||||
.IsUnique()
|
||||
.HasDatabaseName("IX_WeeklyCommissionPool_WeekNumber");
|
||||
.HasDatabaseName("IX_WeeklyCommissionPool_WeekDefinitionId");
|
||||
|
||||
// Index برای IsCalculated
|
||||
builder.HasIndex(e => e.IsCalculated)
|
||||
|
||||
+10
-4
@@ -15,8 +15,7 @@ public class WorkerExecutionLogConfiguration : IEntityTypeConfiguration<WorkerEx
|
||||
builder.Property(x => x.ExecutionId)
|
||||
.IsRequired();
|
||||
|
||||
builder.Property(x => x.WeekNumber)
|
||||
.HasMaxLength(10)
|
||||
builder.Property(x => x.WeekDefinitionId)
|
||||
.IsRequired();
|
||||
|
||||
builder.Property(x => x.StartedAt)
|
||||
@@ -31,8 +30,15 @@ public class WorkerExecutionLogConfiguration : IEntityTypeConfiguration<WorkerEx
|
||||
builder.Property(x => x.Details)
|
||||
.HasColumnType("nvarchar(max)");
|
||||
|
||||
// Index for querying by week
|
||||
builder.HasIndex(x => x.WeekNumber);
|
||||
// رابطه با WeekDefinition (Required FK)
|
||||
builder.HasOne(x => x.WeekDefinition)
|
||||
.WithMany(wd => wd.WorkerExecutionLogs)
|
||||
.HasForeignKey(x => x.WeekDefinitionId)
|
||||
.IsRequired()
|
||||
.OnDelete(DeleteBehavior.Restrict);
|
||||
|
||||
// Index for querying by WeekDefinitionId
|
||||
builder.HasIndex(x => x.WeekDefinitionId);
|
||||
|
||||
// Index for querying by execution time
|
||||
builder.HasIndex(x => x.StartedAt);
|
||||
|
||||
Reference in New Issue
Block a user