Type-GraphQL добавление объекта разбиения на страницы в распознаватель - PullRequest
0 голосов
/ 15 апреля 2020

Я создал распознаватель GraphQL, который выполняет поиск объектов Компании с помощью TypeORM. Я хотел бы разрешить клиенту (опционально) запрашивать объекты нумерации или нумерации объектов, поэтому я написал этот преобразователь:

@ArgsType()
class CompanyProductArgs {
  @Field()
  OrderBy?: {
    fieldName: string;
    direction: DirectionEnum;
  };

  @Field()
  Pagination?: {
    take: number;
    skip: number;
  };
}

@Resolver()
export class CompanyProductResolver {
  @Query(() => [CompanyProduct])
  companyProducts(@Args() { OrderBy, Pagination }: CompanyProductArgs) {
    let args = {};

    if (OrderBy) {
      args = {
        ...args,
        order: {
          [OrderBy.fieldName]: OrderBy.direction,
        },
      };
    }

    if (Pagination) {
      args = {
        ...args,
        skip: Pagination.skip,
        take: Pagination.take,
      };
    }

    return CompanyProduct.find(args);
  }
}

Но при запуске это возвращает:

Ошибка: вам необходимо предоставить явный тип для CompanyProductArgs # OrderBy

Способ решить эту проблему будет с помощью пользовательских скейлеров (я думаю, ), но документация типа GraphQL содержит только один пример, в котором принимается только одна переменная, но я хочу принять объект с 2 ключами (в этом случае - take и skip). Как бы я написал скалер, который принимает объект, такой как объект нумерации страниц, как это:

{
   take: 10
   skip: 5
}

1 Ответ

2 голосов
/ 16 апреля 2020

Декоратор ArgsType сглаживает все, что вводится один раз в Args ( Источник ). Я бы порекомендовал использовать декоратор InputType следующим образом:

@InputType()
class OrderByInputType {
  @Field()
  fieldName: string;

  @Field()
  direction: DirectionEnum;
}

@InputType()
class PaginationInputType {
  @Field(() => Int)
  take: number;

  @Field(() => Int)
  skip: number;
}

, а затем передать их в качестве необязательных аргументов, например, так:

companyProducts(
    @Arg("OrderBy", { nullable: true }) OrderBy?: OrderByInputType,
    @Arg("Pagination", { nullable: true }) Pagination?: PaginationInputType
  )

Возможно, вы могли бы сделать это более чисто или компактный путь, но это должно работать, и вы можете поиграть отсюда!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...