public async Task <bool> EditGroupAsync(User user, EditGroupFormModel groupForm) { try { GroupAuth group = null; group = _context.GroupAuths.Include(c => c.Users).Include(c => c.GroupRoles).FirstOrDefault(c => c.Id == groupForm.GroupId); if (group != null) { var isDuplicategroup = _context.GroupAuths.Any(c => c.Name == groupForm.Name && c.Id != groupForm.GroupId); if (!isDuplicategroup) { var oldRoleIds = group.GroupRoles.Select(c => c.RoleId).ToList(); IEnumerable <long> differencesFirst = groupForm.RoleIds.Except(oldRoleIds).Union(oldRoleIds.Except(groupForm.RoleIds)); IEnumerable <long> differencesSecond = groupForm.RoleIds.Union(oldRoleIds).Except(groupForm.RoleIds.Intersect(oldRoleIds)); if (differencesFirst.Count() > 0 || differencesSecond.Count() > 0) { foreach (var gpUser in group.Users.ToList()) { _context.UserRoles.RemoveRange(_context.UserRoles.Where(c => c.UserId == gpUser.Id).ToList()); } foreach (var gpUser in group.Users.ToList()) { var newUserRoles = groupForm.RoleIds.Select(roleId => new UserRole { UserId = gpUser.Id, RoleId = roleId }).ToList(); _context.UserRoles.AddRange(newUserRoles); } } group.Name = groupForm.Name; group.Description = groupForm.Description; await _context.SaveChangesAsync(); return(true); } throw new StockAssistanceProviderGlobalException(GroupServiceErrors.EditDuplicateGroupError); } throw new StockAssistanceProviderGlobalException(GroupServiceErrors.EditGroupNotExistError); } catch (Exception ex) { throw new StockAssistanceProviderGlobalException(GroupServiceErrors.EditGroupError, ex); } }
public async Task <IActionResult> EditGroup([FromBody] EditGroupFormModel groupForm) { var group = await _groupAuthenticationService.EditGroupAsync(HttpContext.GetUser(), groupForm); return(Ok(GetRequestResult(group))); }