From ccd7c616218ba8bae395dfc09f2ea5f32f9a83ca Mon Sep 17 00:00:00 2001 From: robsmitha Date: Mon, 2 Sep 2024 14:07:54 -0400 Subject: [PATCH] add/remove access items in save budget command --- src/Infrastructure/Services/BudgetService.cs | 28 ++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/Infrastructure/Services/BudgetService.cs b/src/Infrastructure/Services/BudgetService.cs index 976e931..073511d 100644 --- a/src/Infrastructure/Services/BudgetService.cs +++ b/src/Infrastructure/Services/BudgetService.cs @@ -107,6 +107,34 @@ await context.AddAsync(new BudgetCategory context.RemoveRange(oldCategories); } + var newAccessItemIds = model.BudgetAccessItems.Select(c => c.InstitutionAccessItemId); + var oldAccessItems = await context.BudgetAccessItems.Where(c => c.BudgetId == model.BudgetId).ToListAsync(); + var oldAccessItemsIds = oldAccessItems.Select(c => c.InstitutionAccessItemId).ToList(); + if (model.BudgetAccessItems?.Count > 0) + { + var removeAccessItemsIds = oldAccessItemsIds.Except(newAccessItemIds).ToList(); + foreach (var removeAccessItemId in removeAccessItemsIds) + { + var budgetAccessItem = await context.BudgetAccessItems.FirstOrDefaultAsync(c => c.BudgetId == model.BudgetId + && c.InstitutionAccessItemId == removeAccessItemId); + context.Remove(budgetAccessItem); + } + + var addAccessItemIds = newAccessItemIds.Except(oldAccessItemsIds).ToList(); + foreach (var accessItemId in addAccessItemIds) + { + await context.AddAsync(new BudgetAccessItem + { + BudgetId = budget.BudgetId, + InstitutionAccessItemId = accessItemId + }); + } + } + else if (oldAccessItems.Any()) + { + context.RemoveRange(oldAccessItems); + } + await context.SaveChangesAsync(); return mapper.Map(budget); }