뮤테이션이란 GraphQL에서 데이터를 조작하는 기능을 실행하는 함수를 말합니다.
리졸버에서 뮤테이션을 만들기 위해 @Mutation() 데코레이터를 사용하면 됩니다.
import {
Args,
Int,
Mutation,
Parent,
ResolveField,
Resolver,
} from '@nestjs/graphql';
import { Author } from './models/author.model';
import { Query } from '@nestjs/graphql';
import { Post } from 'src/posts/models/post.model';
import { AuthorsService } from './authors.service';
import { PostsService } from 'src/posts/posts.service';
@Resolver(() => Author)
export class AuthorsResolver {
constructor(
private authorService: AuthorsService,
private postsService: PostsService,
) {}
@Query(() => Author)
async author(@Args('id', { type: () => Int }) id: number) {
return this.authorService.findOneById(id);
}
@ResolveField('posts', () => [Post])
async posts(@Parent() author: Author) {
const { id } = author;
return this.postsService.findAll(id);
}
@Mutation(() => Post)
async upvotePost(@Args({ name: 'postId', type: () => Int }) postId: number) {
return this.postsService.upvoteById(postId);
}
}
이때 뮤테이션의 인자는 해당 뮤테이션 함수가 무엇을 반환하는지 명시합니다.
위에서는 Post를 반환한다고 명시하고 있습니다.
이후 Args()를 통해 'postId'라는 이름으로 Int값을 클라이언트로부터 받습니다.

뮤테이션을 실행시키고 있습니다.
참고로 뮤테이션 내부에 들어간 속성들은 뮤테이션 이후 결과에서 가져오는 속성입니다.
또한 뮤테이션 이후 가져오는 속성을 최소한 하나라도 명시해야 합니다.
여기까지해서 GraphQL를 다루기 위한 필수 3가지인 스키마, 쿼리, 뮤테이션에 대해 다뤄보았습니다.
이로써 GraphQL의 기본을 알았고 대부분의 GraphQL 작업을 할 수 있게 되었습니다.
다음에는 서브스크립션에대해 알아보겠습니다.