computed field (dynamic field) : 실제로 DB에는 없지만 요청에 따라 computed 되는 필드들
1. @ResolveField
@ResolvedField를 통해 computed field를 사용할 수 있습니다.
entity 레벨에서 정의하는 것이 아니라 Resolver 레벨에서 정의됩니다.
@Resolver(() => Category)
export class CategoryResolver {
constructor(private readonly restaurantService: RestaurantService) {}
@ResolveField(() => Int)
restaurantCount(): number {
... 중략
return number;
}
}
Resolver에 정의해뒀음에도 playground를 켜보면 restaurantCount가 있음을 확인할 수 있습니다.
2. @Parent
이제 실제로 restaurantCount가 작동하게 만들어 봅시다.
여기서 원하는 것은, 해당 카테고리에 속하는 레스토링이 몇 개 인지입니다.
적당한 Query Resolver를 작성하여 모든 카테고리를 가져오도록 코드를 짠 후 출력을 해보았더니 다음과 같은 결과가 나왔습니다.
{
"data": {
"allCategories": {
"ok": true,
"error": null,
"categories": [
{
"id": 1,
"name": "hamberger",
"slug": "hamberger",
"restaurantCount": 80
},
... 중략
]
}
}
}
이 경우에 parent인 category를 가져와서 해당 카테고리에 속하는 레스토랑을 count하면 될 것 같습니다.
docs.nestjs.com/graphql/resolvers#graphql-argument-decorators
Next는 지정된 decorators를 통해서 standard GraphQL resolver arguments를 사용할 수 있습니다.
@Resolver(() => Category)
export class CategoryResolver {
... 중략
@ResolveField(() => Int)
restaurantCount(@Parent() category: Category): Promise<number> {
return this.restaurant.count({ category });
}
'Node, Nest, Deno > 🦁 Nest - Series' 카테고리의 다른 글
Nest + gql + typeORM(@nestjs/typeorm) (9) Subscription (0) | 2021.01.01 |
---|---|
Nest + Jest + supertest e2e test (2) : grapqhl query (0) | 2020.12.13 |
Nest + Jest + supertest e2e test (1) : setting (0) | 2020.12.13 |
Nest + Jest unit test (5) spy function, mockImplementation (0) | 2020.12.12 |
Nest + Jest unit test (4) 외부 패키지 mocking (0) | 2020.12.12 |