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)));
                }
            }
        }