Example #1
0
        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);
        }
Example #2
0
        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));
        }