Repository를 import 하기
restaurants.module.ts에서 restaurant repository가 필요하다.
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { Restaurant } from './entities/restaurant.entity';
import { RestaurantResolver } from './restaurants.resolver';
@Module({
imports: [TypeOrmModule.forFeature([Restaurant])],
providers: [RestaurantResolver],
})
export class RestaurantsModule {}
모듈 아래 imports 내용으로 TypeOrmModule의 feature 함수 인자로 Restaurant를 통해서 가져온다.
DB 접근을 할 수 있는 service를 만든다.
import { Injectable } from '@nestjs/common';
@Injectable()
export class RestaurantService {}
service를 resolver에 inject 하기
import { Args, Mutation, Query, Resolver } from "@nestjs/graphql";
import { CreateRestaurantDto } from "./dtos/create-restaurant.dto";
import { Restaurant } from "./entities/restaurant.entity";
import { RestaurantService } from "./restaurants.service";
@Resolver(of => Restaurant)
export class RestaurantResolver {
constructor(private readonly restaurantService: RestaurantService){}
@Query(returns => [Restaurant])
restaurants(@Args('veganOnly') veganOnly: boolean): Restaurant[] {
return [];
}
@Mutation(returns => Boolean)
createRestaurant(@Args() createRestaurantDto: CreateRestaurantDto): boolean {
console.log(createRestaurantDto);
return true;
}
}
Inject를 했지만 에러가 발생한다. 왜냐하면 module에 service를 추가하지 않았다.
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { Restaurant } from './entities/restaurant.entity';
import { RestaurantResolver } from './restaurants.resolver';
import { RestaurantService } from './restaurants.service';
@Module({
imports: [TypeOrmModule.forFeature([Restaurant])],
providers: [RestaurantResolver, RestaurantService],
})
export class RestaurantsModule {}
추가해주면 에러가 나오지 않고 잘 실행된다.
restaurants.resolver.ts에서 Restaurant 전부를 가져오는 쿼리를 수정한다.
import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { Restaurant } from './entities/restaurant.entity';
@Injectable()
export class RestaurantService {
constructor(
@InjectRepository(Restaurant)
private readonly restaurants: Repository<Restaurant>,
) {}
getAll(): Promise<Restaurant[]> {
return this.restaurants.find();
}
}
TypeORM repository를 inject하려고 module에 imports 했고 RestaurantService에서 @InjectRepository decorator를 통해서 Restaurant를 inject 하여 사용한다.
find()는 async method이기 때문에 Promise를 입력해준다.
import { Args, Mutation, Query, Resolver } from '@nestjs/graphql';
import { CreateRestaurantDto } from './dtos/create-restaurant.dto';
import { Restaurant } from './entities/restaurant.entity';
import { RestaurantService } from './restaurants.service';
@Resolver(of => Restaurant)
export class RestaurantResolver {
constructor(private readonly restaurantService: RestaurantService) {}
@Query(returns => [Restaurant])
restaurants(): Promise<Restaurant[]> {
return this.restaurantService.getAll();
}
@Mutation(returns => Boolean)
createRestaurant(@Args() createRestaurantDto: CreateRestaurantDto): boolean {
console.log(createRestaurantDto);
return true;
}
}
'Uber Eats' 카테고리의 다른 글
Uber Eats # 13 User CRUD (0) | 2021.03.09 |
---|---|
Uber Eats # 12 Create Restaurant (0) | 2021.03.08 |
Uber Eats # 10 TYPEORM and Nest, Active Record vs Data Mapper (0) | 2021.03.07 |
Uber Eats # 9 joi (0) | 2021.03.06 |
Uber Eats # 8 dotenv (0) | 2021.03.06 |