TypeGraphQL использует метод findAndCount TypeORM - PullRequest
0 голосов
/ 10 мая 2019

Я хотел бы использовать функцию TypeORM findAndCount, которая возвращает Promise<[Entity[], number]> для нумерации страниц. Итак, у меня есть определитель:

offers(@Arg('page', { defaultValue: 1 }) page: number): Promise<[Offer[], number]> {
    const COUNT = 10
    return this.offerRepository.findAndCount({ take: COUNT, skip: (page - 1) * COUNT })
}

Я также использую type-graphql и хочу пометить этот преобразователь аннотацией Query следующим образом:

@Query(returns => ???)

Однако я не могу определить тип возвращаемого значения, я попробовал это (что, конечно, не сработало, из-за того, что findAndCount возвращает):

@ObjectType()
class TestType {
    @Field(type => [Offer])
    offers: Offer[]

    @Field()
    count: number
}

И попытался использовать это так: @Query(returns => [TestType]) и это @Query(returns => TestType).

1 Ответ

1 голос
/ 22 июня 2019

GraphQL не поддерживает кортежи, поэтому вам нужно создать тип объекта ответа:

@ObjectType()
class OffersResponse {
  @Field(type => [Offer])
  items: Offer[]

  @Field(type => Int)
  totalCount: number
}

, а затем вручную сопоставить кортеж с объектом:

@Query(returns => OffersResponse)
offers(@Arg('page', { defaultValue: 1 }) page: number): Promise<OffersResponse> {
    const COUNT = 10
    const [items, totalCount] = await this.offerRepository.findAndCount(
      { take: COUNT, skip: (page - 1) * COUNT }
    )
    return { items, totalCount }

}
...