Tìm kiếm trang web

typescript - TypeGraphQL sử dụng phương thức findAndCount của TypeORM


Tôi muốn sử dụng hàm findAndCount của TypeORM, hàm này trả về Promise<[Entity[], number]> để phân trang. Vì vậy, tôi có một resolver:

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

Tôi cũng đang sử dụng type-graphql và muốn chú thích resolver này với chú thích Query như sau:

@Query(returns => ???)

Tuy nhiên, tôi không thể xác định kiểu trả về, tôi đã thử cái này (tất nhiên là không thành công, vì findAndCount trả về):

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

    @Field()
    count: number
}

Và đã cố gắng sử dụng nó như thế này: @Query(returns => [TestType]) và như thế này @Query(returns => TestType).

Câu trả lời #1

GraphQL không hỗ trợ tuple, vì vậy bạn cần tạo một kiểu đối tượng phản hồi:

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

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

Và sau đó tự tay ánh xạ tuple vào đối tượng:

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

}