diff --git a/src/Api/TakeoutSaaS.TenantApi/Controllers/StoreStaffController.cs b/src/Api/TakeoutSaaS.TenantApi/Controllers/StoreStaffController.cs index e49312c..7782928 100644 --- a/src/Api/TakeoutSaaS.TenantApi/Controllers/StoreStaffController.cs +++ b/src/Api/TakeoutSaaS.TenantApi/Controllers/StoreStaffController.cs @@ -816,16 +816,44 @@ public sealed class StoreStaffController( IReadOnlyCollection nextRows, CancellationToken cancellationToken) { - await using var transaction = await dbContext.Database.BeginTransactionAsync(cancellationToken); - await deleteQuery.ExecuteDeleteAsync(cancellationToken); + var nextRowPayloads = nextRows + .Select(x => new + { + x.StoreId, + x.StaffId, + x.DayOfWeek, + x.ShiftType, + x.StartTime, + x.EndTime + }) + .ToList(); - if (nextRows.Count > 0) + var executionStrategy = dbContext.Database.CreateExecutionStrategy(); + await executionStrategy.ExecuteAsync(async () => { - await dbContext.StoreStaffWeeklySchedules.AddRangeAsync(nextRows, cancellationToken); - await dbContext.SaveChangesAsync(cancellationToken); - } + dbContext.ChangeTracker.Clear(); - await transaction.CommitAsync(cancellationToken); + await using var transaction = await dbContext.Database.BeginTransactionAsync(cancellationToken); + await deleteQuery.ExecuteDeleteAsync(cancellationToken); + + if (nextRowPayloads.Count > 0) + { + var insertRows = nextRowPayloads.Select(x => new StoreStaffWeeklySchedule + { + StoreId = x.StoreId, + StaffId = x.StaffId, + DayOfWeek = x.DayOfWeek, + ShiftType = x.ShiftType, + StartTime = x.StartTime, + EndTime = x.EndTime + }).ToList(); + + await dbContext.StoreStaffWeeklySchedules.AddRangeAsync(insertRows, cancellationToken); + await dbContext.SaveChangesAsync(cancellationToken); + } + + await transaction.CommitAsync(cancellationToken); + }); } private static List CreateOffWeekShifts()