Recherche de site Web

typescript - TypeGraphQL utilise la méthode findAndCount de TypeORM


Je voudrais utiliser la fonction findAndCount de TypeORM qui renvoie Promise<[Entity[], number]> pour la pagination. Donc, j'ai un résolveur :

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

J'utilise également type-graphql et je veux annoter ce resolver avec l'annotation Query comme ceci :

@Query(returns => ???)

Cependant, je n'arrive pas à déterminer le type de retour, j'ai essayé ceci (ce qui bien sûr n'a pas fonctionné, à cause de ce que findAndCount renvoie) :

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

    @Field()
    count: number
}

Et essayé de l'utiliser ainsi : @Query(returns => [TestType]) et ainsi @Query(returns => TestType).

Réponse n°1

GraphQL ne prend pas en charge les tuples, vous devez donc créer un type d'objet de réponse :

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

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

Puis mappez manuellement le tuple à l'objet :

@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 }

}