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