Nest.js

[Nest.js] Nest.js + PostgreSQL + typeORM CRUD 구현하기 3

Hoo_Dev 2023. 1. 26. 17:12

Update와 Read중에 모든 게시물 가져오는 api 만들기

 

service 코드

import { Injectable, NotFoundException } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { BoardStatus } from './board-status.enum';
import { Board } from './board.entity';
import { BoardRepository } from './board.repository';
import { CreateBoardDto } from './dto/create-board.dto';

@Injectable()
export class BoardsService {
  constructor(
    @InjectRepository(Board)
    private boardRepository: BoardRepository,
  ) {}

  // 중략

  async getAllBoards(): Promise<Board[]> {
    return this.boardRepository.find();
  }

  async updateBoardStatus(id: number, status: BoardStatus): Promise<Board> {
    const board = await this.getBoardById(id);
    board.status = status;
    await this.boardRepository.save(board);

    return board;
  }
}

유의해야 할 점은 getAllBoards의 경우 리스트 안에 객체가 담겨있는 형태이므로 타입을 지정할 때 Board[] 로 지정을 해줘야 한다.

updateBoardStatus의 경우 인자로 바꾸기 위한 id와 status를 가져오는데 status의 타입은 앞서 작성한 status의 enum을 담아주게 된다.

 

controller 코드

import {
  Body,
  Controller,
  Delete,
  Get,
  Param,
  ParseIntPipe,
  Post,
  UsePipes,
  ValidationPipe,
} from '@nestjs/common';
import { Patch } from '@nestjs/common/decorators';
import { BoardStatus } from './board-status.enum';
import { Board } from './board.entity';
import { BoardsService } from './boards.service';
import { CreateBoardDto } from './dto/create-board.dto';
import { BoardStatusValidationPipe } from './pipes/board-status-validation.pipe';

@Controller('boards')
export class BoardsController {
  constructor(private boardsService: BoardsService) {}

  // 중략 ..
  
  @Get()
  getAllBoard(): Promise<Board[]> {
    return this.boardsService.getAllBoards();
  }

  @Patch('/:id/status')
  updateBoardStatus(
    @Param('id', ParseIntPipe) id: number,
    @Body('status', BoardStatusValidationPipe) status: BoardStatus,
  ) {
    return this.boardsService.updateBoardStatus(id, status);
  }
}