NestJs API 만들기

07. REST API - Movies Service(1)

본시모니 2025. 5. 20. 11:23

터미널에서 nest 명령어를 실행하면

NestJS CLI(Command Line Interfece)에는 generate(생성) 명령어가 있는데 

nest g s 명령어를 실행하면 명칭을 무엇으로 할건지 나오는데

movies라고 입력 후 엔터를 누르면 해당 파일이 생성된다.

 

 

 

 

 

app.module.ts 파일을 보면 providers에 moviesService가 생겨난것을 확인할 수 있다.

 

 

 

 

 

movie.entity.ts

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

 

 

movies.controller.ts

import { Body, Controller, Delete, Get, Param, Patch, Post, Query } from '@nestjs/common';
import { MoviesService } from './movies.service';
import { Movie } from './entities/movie.entity';

@Controller("movies")
export class MoviesController {
    constructor(private 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 {
            updateMovie:movieId, ...updateData
        }
    }

}

 

 

movies.service.ts

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

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

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

    getOne(id:string):Movie{
        //return this.movies.find(movie=>movie.id === +id);

        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):boolean{
        this.movies.filter(movie=>movie.id !== +id);
        return true;
    }

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