typescript - TypeGraphQL koristi TypeORM-ovu metodu findAndCount


Htio bih koristiti TypeORM-ovu funkciju findAndCount koja vraća Promise<[Entity[], number]> za paginaciju. Dakle, imam resolver:

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

Također koristim type-graphql i želim anotirati ovaj resolver s Query anotacijom na sljedeći način:

@Query(returns => ???)

Međutim, ne mogu shvatiti tip povratne vrijednosti, pokušao sam ovo (što naravno nije radilo, zbog onoga što findAndCount vraća):

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

    @Field()
    count: number
}

I pokušao ga koristiti ovako: @Query(returns => [TestType]) i ovako @Query(returns => TestType).

Odgovor #1

GraphQL ne podržava tuplove, pa morate kreirati tip objekta odgovora:

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

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

A zatim ručno mapirajte tuple na objekt:

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

}