Wii Pointer #1 Tilt Normal
본문 바로가기
📁 𝐟𝐫𝐚𝐦𝐞𝐖𝐨𝐫𝐤/Nest.js

[Nest.js] Nest.js 에서 Rest한 API create 하는 방법 (2)

by 개발자_후니 2023. 3. 30.
728x90
반응형

2.2 / 2.3 Movies Service part

서비스를 만든다? → nest g s 하면 되겠네

먼저 movie에서 사용되어질 entity 들을 넣어주기 위한 파일을 생성해서

movie.entity.ts 라는 파일을 만들어주고

export class Movie {
  id: number;
  title: string;
  year: number;
  genres: string[];
}

속성값들을 기입해주자

자세히 살펴보니 express에서 쓰던 Schemas 와 비슷한 느낌을 받았다.

작성이 완료되었다면

service를 하나하나 만들어 나가보자.

import { Injectable } from '@nestjs/common';
import { NotFoundException } from '@nestjs/common/exceptions';
import { Movie } from './entities/movie.entity';

@Injectable()
export class MoviesService {
  private movies: Movie[] = [];

  getAll(): Movie[] {
    return this.movies;
  }

  getOne(id: string): Movie {
    const movie = this.movies.find((movie) => movie.id === +id);
    if (!movie) {
      throw new NotFoundException(`Movie with ID: ${id} not found.`);
    }
    return movie;
  }

  deleteOne(id: string) {
    this.getOne(id);
    this.movies = this.movies.filter((movie) => movie.id !== +id);
  }

  create(movieData) {
    this.movies.push({
      id: this.movies.length + 1,
      ...movieData,
    });
  }

  update(id: string, updateData) {
    const movie = this.getOne(id);
    this.deleteOne(id);
    this.movies.push({ ...movie, ...updateData });
  }
}
import {
  Controller,
  Delete,
  Get,
  Param,
  Body,
  Patch,
  Post,
} from '@nestjs/common';
import { MoviesService } from './movies.service';
import { Movie } from './entities/movie.entity';

@Controller('movies')
export class MoviesController {
  constructor(readonly moviesService: MoviesService) {}

  @Get()
  getAll(): Movie[] {
    return this.moviesService.getAll();
  }

  @Get('/:id')
  getOne(@Param('id') movieId: string): Movie {
    return this.moviesService.getOne(movieId);
  }

  @Post()
  create(@Body() movieData) {
    return this.moviesService.create(movieData);
  }

  @Delete('/:id')
  remove(@Param('id') movieId: string) {
    return this.moviesService.deleteOne(movieId);
  }

  @Patch('/:id')
  patch(@Param('id') movieId: string, @Body() updateData) {
    return this.moviesService.update(movieId, updateData);
  }
}

updateData의 유효성 검사를 하지 않아서 생기는 문제다.

다행히도 NestJS 에서는 편리하게 검사를 할 수 있다.

—> DTSs and Validation 에서 확인해보자

 

728x90
반응형