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