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