게시물 데이터를 다루는 모델 파일을 생성하다.
1. Model 정의하기
나는 게시물(Board)을 작성, 생성, 수정, 삭제가 가능한 사이트를 만들 것이다. 게시물 생성 기능을 만들기 전에 Board Model을 정의해야 한다. 게시물에 필요한 데이터가 어떤 것이 있는지 정의해 주기 위해서 board model을 만든다.
게시물에 필요한 데이터로는 게시물의 고유한 ID, 이름, 설명, 공개 or 비공개 등의 데이터가 필요하다.
2. board.model.ts 파일 생성
전 포스트에서 만든 컨트롤러, 모듈, 서비스가 들어있는 폴더인 boards 폴더에 board.model.ts 파일을 직접 생성해 준다.
이번에는 명령어로 생성하는 것이 아니라 직접 파일을 만들어줘야 한다.
model을 정의하기 위해서는 Class나 Interface를 이용해서 게시물에 필요한 데이터를 정의해주면 된다.
// board.model.ts
export interface Board {
id: string; // 게시물 고유 ID
title: string; // 게시물 제목
description: string; // 게시물 내용
status: // 게시물 공개상태
}
각 속성에 대한 설명은 주석으로 설명했다. 근데 status는 게시물 공개 상태인데 우리가 원하는 게시물의 공개 상태는 총 2가지로 '공개 상태', '비공개 상태'가 있다. 이 2가지 상태 이외에는 나오면 안 되기 때문에 타입스크립트의 기능인 enumeration을 사용해 준다.
// board.model.ts
export interface Board {
id: string; // 게시물 고유 ID
title: string; // 게시물 제목
description: string; // 게시물 내용
status: BoardStatus; // 게시물 공개상태
}
export enum BoardStatus {
PUBLIC = 'PUBLIC',
PRIVATE = 'PRIVATE',
}
이제 보드에 대한 데이터 형식은 어떻게 되어야한다를 정의했기 때문에 boards.service 파일에서 모든 보드를 저장하는 'boards' 배열의 데이터 타입을 설정해준다. 데이터 형식을 Board로 내보냈으니까 서비스, 컨트롤러에서도 모든 배열과 관련된 메서드의 리턴값 타입을 Board로 설정해주는데 배열이니까 Board[]가 최종적으로 맞다.
// boards.service.ts
import { Injectable } from '@nestjs/common';
import { Board } from './board.model';
@Injectable()
export class BoardsService {
private boards: Board[] = [];
getAllBoards(): Board[] {
return this.boards;
}
}
// boards.controller.ts
import { Controller, Get } from '@nestjs/common';
import { BoardsService } from './boards.service';
import { Board } from './board.model';
@Controller('boards')
export class BoardsController {
constructor(private boardsService: BoardsService) {}
@Get()
getAllBoards(): Board[] {
return this.boardsService.getAllBoards();
}
}
'Back-End > NestJS' 카테고리의 다른 글
[NestJS] DTO 만들기 (0) | 2024.01.09 |
---|---|
[NestJS] 게시물 생성하는 Service, Controller 생성 (Request, Response) (0) | 2024.01.08 |
[NestJS] Service 생성 (0) | 2024.01.05 |
[NestJS] NestJS 시작과 아키텍처 구조, 프로바이더와 서비스란 (0) | 2024.01.04 |
[NestJS] NestJS란 무엇일까 (0) | 2024.01.03 |