pnpm install @nestjs/apollo @nestjs/graphql graphql
app.module.ts
@Module({
imports: [
BroadModule,
LoggerModule,
TypeOrmModule.forRoot(configuration),
GraphQLModule.forRoot<ApolloDriverConfig>({
driver: ApolloDriver, // 기본 드라이버 인스턴스
autoSchemaFile: true,
})
],
controllers: [AppController],
})
export class AppModule {}
'root/schema.gpl'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;
}
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());
}
}
src/broad/graphql/broad.resolver.ts