Node, Nest, Deno/🦁 Nest - Series
Nest + gql + typeORM(@nestjs/typeorm) (8) computed field (dynamic field)
DarrenKwonDev
2020. 12. 22. 02:56
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 });
}