‣

1. GraphQL lib 추가하기

pnpm install @nestjs/apollo @nestjs/graphql graphql

2. GraphQL 적용

app.module.ts

@Module({
  imports: [
    BroadModule,
    LoggerModule,
    TypeOrmModule.forRoot(configuration),
    GraphQLModule.forRoot<ApolloDriverConfig>({
      driver: ApolloDriver, // 기본 드라이버 인스턴스
      autoSchemaFile: true,
    })
  ],
  controllers: [AppController],
})
export class AppModule {}

3. graphql 전용 dto 작성

src/broad/graphql/broad.dto.ts

import { Field, InputType, ObjectType } from '@nestjs/graphql';
import { Broad } from '../models/broad.entity';

@InputType() // 저장용
export class BroadGraphRequest {
  @Field(() => String) // -> 타입 지정 해주어야합니다!
  title: string;
  @Field(() => String)
  content: string;
  @Field(() => String)
  writer: string;

  toEntity() {
    const broad = new Broad();
    broad.title = this.title;
    broad.content = this.content;
    broad.writer = this.writer;
    return broad;
  }
}

@ObjectType() // response용
export class BroadGraphResponse {
  @Field(() => Number)
  id: number;
  @Field(() => String)
  title: string;
  @Field(() => String)
  content: string;
  @Field(() => String)
  writer: string;
  @Field(() => Date)
  createdAt: Date;
  @Field(() => Date)
  updatedAt: Date;
}

4. graphql용 service 작성

src/broad/graphql/broad.graph.service.ts

import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { Broad } from '../models/broad.entity';
import { BroadGraphRequest } from '../dto/broad.graph';

@Injectable()
export class BroadGraphService {
  constructor(
    @InjectRepository(Broad)
    private broadRepository: Repository<Broad>,
  ) {}

  async getBroads() { // 조회
    return await this.broadRepository.find();
  }

  async saveBroad(request: BroadGraphRequest) { // 저장
    return this.broadRepository.save(request.toEntity());
  }

}

5. graphql resolver 작성

src/broad/graphql/broad.resolver.ts