CRUD => C : Service 작성하기
게시물 생성 기능 만들기
- 전 게시글에서 게시물에 대한 모델을 정의해주었습니다.
- 정의한 모델을 이용해 게시물 생성하는 기능을 만들겠습니다.
게시물 생성 기능
- 게시물에 관한 로직을 처리하는 곳은 Service 입니다.
- Service에서 로직을 처리해준 후에 Controller에서 Service의 불러와 클라이언트에게 전달합니다.
게시물 ID 처리 방법
- ID는 모든 게시물에 유니크(중복된 값이 없는) 해야 합니다.
- 데이터베이스에 데이터를 넣어 줄때는 데이터베이스가 알아서 유니크한 값을 줍니다
- Auto Increment 형태로 자동으로 ID 값을 증가시켜 처리합니다.
- 지금은 데이터베이스와 연동하지 않은 상태이므로, 임의로 유니크한 값을 주기 위해 uuid 모듈을 이용해 유니크 값을 대입하겠습니다.
uuid 모듈
Link : https://www.npmjs.com/package/uuid
$ npm install uuid
- —save 옵션을 사용하지 않은 이유는 npm5 부터는 —save 명령어 없이도 dependencies 항목에 자동으로 추가되기 때문입니다.
- 우리는 uuid 모듈 중 timestamp 형태의 v1 버전을 사용할 것입니다. 자세한 내용은 링크를 달아놓았습니다.
게시물 생성 로직 작성
./boards/boards.service.ts
import { Injectable } from '@nestjs/common';
import { Board, BoardStatus } from './board.model';
import { v1 as uuid } from 'uuid';
@Injectable()
export class BoardsService {
private boards: Board[] = [];
getAllBoards(): Board[] {
return this.boards;
}
createBoard(title: string, description: string): Board {
const board: Board = {
id: uuid(),
title,
description,
status: BoardStatus.PUBLIC,
};
this.boards.push(board);
return board;
}
}
코드 풀이
게시물 생성 함수 파라미터 및 리턴값 정의
- 우리는 함수를 호출할때 2개의 string 타입의 파라미터를 전달 받을 것입니다.
- 호출한 곳에 우리가 미리 설계한 Board Model 형태의 데이터를 리턴값으로 되돌려 줄 것입니다.
board 변수 정의
- 파라미터로 받은 데이터와 설치한 uuid 모듈을 이용해 id 값과 제목, 게시글 데이터를 정의합니다.
- status 값은 우리가 enum 으로 작성한 BoardStatus 에서 PUBLIC 으로 정의합니다.
- 지금은 게시글을 생성할 경우 공개글로 작성된다는 가정으로 진행합니다.
작성한 board 처리 로직
- 작성한 board 변수를 우리가 데이터베이스 대신 작성한 boards 변수에 push 해줍니다.
- 클라이언트가 작성한 글이 어떻게 작성 되었는지 알려주기 위해 정의한 board 변수를 리턴합니다.