NestJS로 API 만들기 (3) CRUD Service 작성

Jiwon Youn·2021년 1월 11일
0

NestJS로 API만들기

목록 보기
3/4

products.service.ts

import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { CreateProductDto } from './dto/create-product.dto';
import { ProductOutput, ProductsOutput } from './dto/output.dto';
import { Categories } from './entities/categories.entity';
import { Product } from './entities/products.entity';
@Injectable()
export class ProductService {
  constructor(
      @InjectRepository(Product) private readonly products: Repository<Product>,
      @InjectRepository(Categories) private readonly categories: Repository<Categories>,
    ) {}

객체 Repository 선언


getAll

async getAll(page, pageSize): Promise<ProductsOutput> {
    try {
      console.log(page);
      console.log(pageSize);
      // throw new error();
      return {
        ok: true,
        data: await this.products.find({
          relations: ['category'],
          skip: (page - 1) * pageSize,
          take: pageSize,
        }),
      };
    } catch (e) {
      return {
        ok: false,
        error: e,
      };
    }
  }

http://localhost:3000/product?page=1&pageSize=10
Controller에서 받아온 page 매개변수를 이용해 pagination 구현
this.products.find : products의 전체 데이터 조회
relations: ['category'], : join한 테이블 데이터까지 조회
skip: (page - 1) * pageSize, : 조회할 시작점 지정
take: pageSize, : 조회할 데이터 수 지정


getOne

async getOne(id: number): Promise<ProductOutput> {
    try {
      // throw new BadRequestException();
      return {
        ok: true,
        data: await this.products.findOne(id, { relations: ['category'] }),
      };
    } catch (e) {
      return {
        ok: false,
        error: e,
      };
    }
  }

http://localhost:3000/products/3
Controller에서 받아온 id 매개변수를 통해 해당 id 데이터 출력
this.products.findOne : products의 단일 데이터 조회
relations: ['category'] : join한 테이블 데이터까지 조회


Create

async create(productData: CreateProductDto) {
    try {
      const product = this.products.create(productData);
      // DB에 create가 아닌 product 객체에 create

      await this.products.save(product);
      return {
        ok: true,
        data: await this.products.findOne(product.id, {
          relations: ['category'],
        }),
      };
    } catch (e) {
      console.log('error');
      return {
        ok: false,
        error: e,
      };
    }
  }

@Body에서 CreateProductDto로 받아온 객체를
this.products.save(product);로 저장


DeleteOne

async deleteOne(id: number): Promise<void> {
    try {
      await this.products.delete(id);
    } catch (e) {
      console.log('error');
    }
  }

받아온 매개변수 id의 데이터를 삭제
this.products.delete(id);


Update

async update(id: number, updateData): Promise<void> {
    try {
      await this.products.update(id, updateData);
    } catch (e) {
      console.log('error');
    }
  }
}

받아온 id 값의 데이터를 UpdateProductDto 객체로 수정
this.products.update(id, updateData);

0개의 댓글