typescript - TypeGraphQL bruker TypeORMs findAndCount-metode
Jeg ønsker å bruke TypeORMs findAndCount-funksjon som returnerer Promise<[Entity[], number]> for paginering. Så jeg har en resolver:
offers(@Arg('page', { defaultValue: 1 }) page: number): Promise<[Offer[], number]> {
const COUNT = 10
return this.offerRepository.findAndCount({ take: COUNT, skip: (page - 1) * COUNT })
}
Jeg bruker også type-graphql og vil annotere denne resolveren med Query-annotasjon slik:
@Query(returns => ???)
Men jeg kan ikke finne ut returtypen, jeg prøvde dette (som selvfølgelig ikke fungerte, på grunn av hva findAndCount returnerer):
@ObjectType()
class TestType {
@Field(type => [Offer])
offers: Offer[]
@Field()
count: number
}
Og prøvde å bruke det slik: @Query(returns => [TestType]) og slik @Query(returns => TestType).
Svar #1
GraphQL støtter ikke tupler, så du må lage en responsobjekttype:
@ObjectType()
class OffersResponse {
@Field(type => [Offer])
items: Offer[]
@Field(type => Int)
totalCount: number
}
Og deretter manuelt mappe tuplen til objektet:
@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 }
}
