public IActionResult Add([FromBody] UserGroup ug) { using (var transaction = dbContext.Database.BeginTransaction()) { try { UserGroup ugToAdd = new UserGroup(); ugToAdd.ID = ug.ID; ugToAdd.Name = ug.Name; ugToAdd.IsApprover = ug.IsApprover; dbContext.UserGroups.Add(ugToAdd); dbContext.SaveChanges(); foreach (ProgramMenu pm in ug.ProgramMenus) { UserGroupProgram ugp = new UserGroupProgram(); ugp.UserGroupID = ug.ID; ugp.ProgramMenuID = pm.ID; dbContext.UserGroupPrograms.Add(ugp); dbContext.SaveChanges(); } transaction.Commit(); return(Ok(ug)); } catch (Exception ex) { transaction.Rollback(); return(BadRequest(GetErrorMessage(ex))); } } }
public IActionResult Update([FromBody] UserGroup ug) { using (var transaction = dbContext.Database.BeginTransaction()) { try { UserGroup userToSave = dbContext.UserGroups.Find(ug.ID); if (userToSave != null) { userToSave.Name = ug.Name; userToSave.IsApprover = ug.IsApprover; dbContext.SaveChanges(); var ugpsToDelete = dbContext.UserGroupPrograms.Where( ugp => ugp.UserGroupID == ug.ID && !ug.ProgramMenus.Any(pm => pm.ID == ugp.ProgramMenuID)) .ToList(); dbContext.UserGroupPrograms.RemoveRange(ugpsToDelete); dbContext.SaveChanges(); foreach (var pm in ug.ProgramMenus) { var count = dbContext.UserGroupPrograms.Where(ugp => ugp.UserGroupID == ug.ID && ugp.ProgramMenuID == pm.ID).Count(); if (count == 0) { var ugp = new UserGroupProgram() { UserGroupID = ug.ID, ProgramMenuID = pm.ID }; dbContext.UserGroupPrograms.Add(ugp); dbContext.SaveChanges(); } } transaction.Commit(); return(Ok(ug)); } else { throw new Exception($"Invalid user group ID '{ug.ID}'."); } } catch (Exception ex) { transaction.Rollback(); return(BadRequest(GetErrorMessage(ex))); } } }