Nestjs - InputTypes and ArgumentTypes
728x90
Mutation 만들기
restaurants.resolver.ts
파일에 다음과 같이 Mutation을 만듭니다.
import { Resolver, Query, Args, Mutation } from '@nestjs/graphql';
import { CreateRestaurantDto } from './dtos/create-restaurant.dto';
import { Restaurant } from './entities/restaurant.entity';
@Resolver((of) => Restaurant)
export class RestaurantResolver {
@Mutation((returns) => Boolean)
createRestaurant(
@Args('name') name: string,
@Args('isVegan') isVegan: boolean,
@Args('address') address: string,
@Args('ownerName') ownerName: string,
): boolean {
console.log(createRestaurantInput);
return true;
}
}
Argument 를 여러개 만들어 줘요 사실 이렇게 Args 를 선언해도 상관 없지만 더 멋진방법으로는 data transfer object 폴더를 만들어 Args 의 object class 를 만들어 class 를 참조하는 방법으로 코드를 변경해볼게요.
위의 폴더 구조처럼 dtos 라는 폴더를 만들고 create-resaurant.dto.ts
파일을 만듭니다.
// data transfer object
// inputType - 그저 하나의 object 입니다. argument 로써 graphql에 전달하기 위한 용도
// ArgsType - 분리된 값들을 GraphQL argument로 전달해 줄 수 있도록 해줌
import { InputType, Field, ArgsType } from '@nestjs/graphql';
@InputType()
export class CreateRestaurantDto {
// @Args('name') name: string,
// @Args('isVegan') isVegan: boolean,
// @Args('address') address: string,
// @Args('ownerName') ownerName: string,
@Field((type) => String)
name: string;
@Field((type) => Boolean)
isVegan: boolean;
@Field((type) => String)
address: string;
@Field((type) => String)
ownerName: string;
}
@Args 를 다음과 같이 변경한 모습입니다. InputType 으로 먼저 테스트 할게요
import { CreateRestaurantDto } from './dtos/create-restaurant.dto'
...
@Mutation((returns) => Boolean)
createRestaurant(
// @Args('name') name: string,
// @Args('isVegan') isVegan: boolean,
// @Args('address') address: string,
// @Args('ownerName') ownerName: string,
@Args('createRestaurantInput') createRestaurantInput: CreateRestaurantDto,
): boolean {
console.log(createRestaurantInput);
return true;
}
inputType - 그저 하나의 object 입니다. argument 로써 graphql에 전달하기 위한 용도
이렇게 하면 잘작동합니다.
또 다른 방법으로는 ArgumentType 을 이용하면 @Args('') 사이를 비워줄수가 있는데요
import { InputType, Field, ArgsType } from '@nestjs/graphql';
@ArgsType()
export class CreateRestaurantDto {
// @Args('name') name: string,
// @Args('isVegan') isVegan: boolean,
// @Args('address') address: string,
// @Args('ownerName') ownerName: string,
@Field((type) => String)
name: string;
@Field((type) => Boolean)
isVegan: boolean;
@Field((type) => String)
address: string;
@Field((type) => String)
ownerName: string;
}
데코레이터를 ArgsType으로 변경한뒤
@Mutation((returns) => Boolean)
createRestaurant(
// @Args('name') name: string,
// @Args('isVegan') isVegan: boolean,
// @Args('address') address: string,
// @Args('ownerName') ownerName: string,
@Args() createRestaurantInput: CreateRestaurantDto,
): boolean {
console.log(createRestaurantInput);
return true;
}
위의 코드 처럼 변경합니다.
앞으로 저는 ArgsType 을 주로 쓸거 같네요
github 참고
728x90
'Side > uber-eats' 카테고리의 다른 글
TypeORM setup 과 Nestjs Config (0) | 2021.05.23 |
---|---|
NestJs Validating ArgsTypes (0) | 2021.05.23 |
NestJs - Arguments (0) | 2021.05.22 |
Nestjs - ObjectType (0) | 2021.05.22 |
Nestjs + react Day1 (0) | 2021.05.19 |
댓글
이 글 공유하기
다른 글
-
TypeORM setup 과 Nestjs Config
TypeORM setup 과 Nestjs Config
2021.05.23 -
NestJs Validating ArgsTypes
NestJs Validating ArgsTypes
2021.05.23 -
NestJs - Arguments
NestJs - Arguments
2021.05.22 -
Nestjs - ObjectType
Nestjs - ObjectType
2021.05.22