diff --git a/src/Meezi.Infrastructure/Data/PlatformDataSeeder.cs b/src/Meezi.Infrastructure/Data/PlatformDataSeeder.cs index 7005983..a22bde2 100644 --- a/src/Meezi.Infrastructure/Data/PlatformDataSeeder.cs +++ b/src/Meezi.Infrastructure/Data/PlatformDataSeeder.cs @@ -422,9 +422,12 @@ public static class PlatformDataSeeder } }; - var existingIds = (await db.PlatformPlanDefinitions.Select(p => p.Id).ToListAsync()) - .ToHashSet(StringComparer.Ordinal); - var missing = plans.Where(p => !existingIds.Contains(p.Id)).ToArray(); + // Tier (not Id) carries the unique constraint, so dedupe on Tier — an + // existing Free plan may have a different Id, and inserting another + // Free-tier row would violate IX_PlatformPlanDefinitions_Tier. + var existingTiers = (await db.PlatformPlanDefinitions.Select(p => p.Tier).ToListAsync()) + .ToHashSet(); + var missing = plans.Where(p => !existingTiers.Contains(p.Tier)).ToArray(); if (missing.Length == 0) return; db.PlatformPlanDefinitions.AddRange(missing); @@ -459,9 +462,10 @@ public static class PlatformDataSeeder F("discover_profile", "پروفایل کشف", "Discover profile", "growth") }; - var existingIds = (await db.PlatformFeatures.Select(f => f.Id).ToListAsync()) + // Key carries the unique constraint, so dedupe on Key (not Id). + var existingKeys = (await db.PlatformFeatures.Select(f => f.Key).ToListAsync()) .ToHashSet(StringComparer.Ordinal); - var missing = features.Where(f => !existingIds.Contains(f.Id)).ToArray(); + var missing = features.Where(f => !existingKeys.Contains(f.Key)).ToArray(); if (missing.Length == 0) return; db.PlatformFeatures.AddRange(missing);