public Either <Error, DtoGridPermission> GetGridUserPermissions(DtoGridQueryUserPermission gridQuery) { var result = gridQuery.Filter.ToEither(() => Error.Exception).Bind(filter => GetGridUserRoles(new DtoGridQueryUserRole(filter, gridQuery.Pagination))).Bind( gridRoles => { var(errors, permissions) = gridRoles.Rows.Select( role => { var filter = new DtoFilterById(role.Id); var query = new DtoGridQueryRolePermission( filter, gridQuery.Pagination); var perms = GetGridRolePermissions(query); return(perms); }).Partition(); if (errors.Any()) { return(Left <Error, DtoGridPermission>(errors.First())); //TODO: нужна конвертацию списка ошибок в одну аггрегирующую ошибку, убрать errors.First! } var pagedPermissions = permissions.SelectMany(x => x.Rows).AsQueryable().Paginate(gridQuery.Pagination); //TODO: костыль, потому что будет все записи вытягивать из БД, а потом применять пагинацию var grid = new DtoGridPermission(pagedPermissions, permissions.Count()); return(Right <Error, DtoGridPermission>(grid)); }); return(result); }
public Either <Error, DtoGridPermission> GetGridPermissions(DtoGridQueryPermission gridQuery) { var dbQuery = _appContext.Permissions.AsQueryable(); var optionFilter = gridQuery.Filter; optionFilter.Bind(filter => dbQuery = dbQuery.Where(permission => permission.Name.Contains(filter.Name))); var rows = dbQuery.Paginate(gridQuery.Pagination).Select(role => new DtoRowPermission(role.Name, role.Id)); var result = new DtoGridPermission(rows, _appContext.Roles.Count()); return(Right <Error, DtoGridPermission>(result)); }