Skip to content

Commit 750d3d5

Browse files
fix: switch from restriction entry preventing outcome/option deletion to on delete cleanup (#427)
1 parent ca3ac62 commit 750d3d5

9 files changed

Lines changed: 3927 additions & 16 deletions

File tree

PrismaDotnetApi/PrismaApi.Application/Repositories/EntitiesExtensions.cs

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,7 @@ public static async Task<Uncertainty> Update(this Uncertainty entity, Uncertaint
241241
await entity.Outcomes.Update(incomingEntity.Outcomes, context, ruleTrigger, ct);
242242
entity.IssueId = incomingEntity.IssueId;
243243
entity.IsKey = incomingEntity.IsKey;
244-
entity.DiscreteProbabilities.Update(incomingEntity.DiscreteProbabilities, context);
244+
entity.DiscreteProbabilities.UpdateProperties(incomingEntity.DiscreteProbabilities, context);
245245
return entity;
246246
}
247247

@@ -278,10 +278,20 @@ public static void Update(this ICollection<DiscreteProbability> entities, IColle
278278
}
279279
}
280280

281+
public static void UpdateProperties(this ICollection<DiscreteProbability> entities, ICollection<DiscreteProbability> incomingEntities, AppDbContext context)
282+
{
283+
foreach (var entity in entities)
284+
{
285+
var inncommingEntity = incomingEntities.Where(x => x.Id == entity.Id).FirstOrDefault();
286+
if (inncommingEntity == null) continue;
287+
entity.Probability = inncommingEntity.Probability;
288+
}
289+
}
290+
281291
public static Utility Update(this Utility entity, Utility incomingEntity, AppDbContext context, CancellationToken ct = default)
282292
{
283293
entity.IssueId = incomingEntity.IssueId;
284-
entity.DiscreteUtilities.Update(incomingEntity.DiscreteUtilities, context);
294+
entity.DiscreteUtilities.UpdateProperties(incomingEntity.DiscreteUtilities, context);
285295
return entity;
286296
}
287297

@@ -297,6 +307,16 @@ public static void Update(this ICollection<DiscreteUtility> entities, ICollectio
297307
}
298308
}
299309

310+
public static void UpdateProperties(this ICollection<DiscreteUtility> entities, ICollection<DiscreteUtility> incomingEntities, AppDbContext context)
311+
{
312+
foreach (var entity in entities)
313+
{
314+
var inncommingEntity = incomingEntities.Where(x => x.Id == entity.Id).FirstOrDefault();
315+
if (inncommingEntity == null) continue;
316+
entity.UtilityValue = inncommingEntity.UtilityValue;
317+
}
318+
}
319+
300320
public static async Task RemoveOutOfScopeStrategyOptions(this Issue entity, Issue incomingEntity, AppDbContext context, CancellationToken ct = default)
301321
{
302322
if (!RepositoryUtilities.IsDecisionMovedOutOfStrategyTable(entity, incomingEntity)) return;

PrismaDotnetApi/PrismaApi.Domain/Entities/RestrictionEntry.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,22 +50,22 @@ public static void OnModelConfiguring(ModelBuilder modelBuilder)
5050
entity.HasOne(e => e.ParentOption)
5151
.WithMany()
5252
.HasForeignKey(e => e.ParentOptionId)
53-
.OnDelete(DeleteBehavior.Restrict);
53+
.OnDelete(DeleteBehavior.NoAction);
5454

5555
entity.HasOne(e => e.ChildOption)
5656
.WithMany()
5757
.HasForeignKey(e => e.ChildOptionId)
58-
.OnDelete(DeleteBehavior.Restrict);
58+
.OnDelete(DeleteBehavior.NoAction);
5959

6060
entity.HasOne(e => e.ParentOutcome)
6161
.WithMany()
6262
.HasForeignKey(e => e.ParentOutcomeId)
63-
.OnDelete(DeleteBehavior.Restrict);
63+
.OnDelete(DeleteBehavior.NoAction);
6464

6565
entity.HasOne(e => e.ChildOutcome)
6666
.WithMany()
6767
.HasForeignKey(e => e.ChildOutcomeId)
68-
.OnDelete(DeleteBehavior.Restrict);
68+
.OnDelete(DeleteBehavior.NoAction);
6969

7070
entity.Property<Guid>(e => e.ParentStateId)
7171
.HasComputedColumnSql($"COALESCE([{nameof(ParentOptionId)}], [{nameof(ParentOutcomeId)}])", stored: true);

PrismaDotnetApi/PrismaApi.Infrastructure/Context/AppDbContext.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -233,6 +233,13 @@ private async Task OnOutcomeDeletedCleanupAsync(CancellationToken cancellationTo
233233
.ToList();
234234

235235
DiscreteUtilities.RemoveRange(affectedUtils);
236+
237+
var affectedRestrictionEntries = await RestrictionEntries
238+
.Where(
239+
re => (re.ParentOutcomeId != null && deletedOutcomeIds.Contains((Guid)re.ParentOutcomeId)) ||
240+
(re.ChildOutcomeId != null && deletedOutcomeIds.Contains((Guid)re.ChildOutcomeId)))
241+
.ToListAsync(cancellationToken);
242+
RestrictionEntries.RemoveRange(affectedRestrictionEntries);
236243
}
237244
}
238245
private async Task OnOptionDeletedCleanupAsync(CancellationToken cancellationToken = default)
@@ -286,6 +293,13 @@ private async Task OnOptionDeletedCleanupAsync(CancellationToken cancellationTok
286293

287294
DiscreteUtilities.RemoveRange(affectedUtils);
288295
DiscreteUtilityParentOptions.RemoveRange(affectedUtilParentOptions);
296+
297+
var affectedRestrictionEntries = await RestrictionEntries
298+
.Where(
299+
re => (re.ParentOptionId != null && deletedOptionIds.Contains((Guid)re.ParentOptionId)) ||
300+
(re.ChildOptionId != null && deletedOptionIds.Contains((Guid)re.ChildOptionId)))
301+
.ToListAsync(cancellationToken);
302+
RestrictionEntries.RemoveRange(affectedRestrictionEntries);
289303
}
290304
}
291305

0 commit comments

Comments
 (0)