기존에 알려준대로 따라하기만 하면 완성이 될 줄 알았지만,
역시나 되지 않음

데이터베이스와 전혀 연동이 되지 않았다.
독학 겸 찾아서 하기로 결정

데이터 베이스 처리를 위한 엔터티 생성
board.entity.ts
import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm';
import { BoardStatus } from '../Models/board.model';
@Entity()
export class Board {
@PrimaryGeneratedColumn('uuid') // UUID 형태의 자동 생성 ID
id: string;
@Column() // 제목 열
title: string;
@Column() // 설명 열
description: string;
@Column({
type: 'enum', // 열의 타입을 enum으로 설정
enum: BoardStatus, // 사용할 enum 지정
default: BoardStatus.PUBLIC, // 기본값 설정
})
status: BoardStatus;
}
서비스 리팩토링
import { Injectable, NotFoundException } from '@nestjs/common';
import { BoardStatus } from './Models/board.model';
import { v1 as uuid } from 'uuid';
import { CreateBoardDto } from './Dto/create-board.dto';
import { InjectRepository } from '@nestjs/typeorm';
import { Board } from './Entities/board.entity';
import { Repository } from 'typeorm';
@Injectable()
export class BoardsService {
// private boards: Board[] = [];
constructor(
@InjectRepository(Board)
private boardsRepository: Repository<Board>,
){}
//전체 게시글 조회
async getAllBoards(): Promise<Board[]> {
return this.boardsRepository.find();
}
//개별 게시글 조회
async getBoardById(id: string): Promise<Board> {
const found = await this.boardsRepository.findOne({ where: { id } });
if (!found) {
throw new NotFoundException(`게시글을 찾을 수 없어요 id: ${id}`);
}
return found;
}
//게시글 생성
// 게시글 생성
async createBoard(createBoardDto: CreateBoardDto): Promise<Board> {
const { title, description } = createBoardDto;
const board = this.boardsRepository.create({
title,
description,
status: BoardStatus.PUBLIC,
});
await this.boardsRepository.save(board);
return board;
}
//게시글 삭제
async deleteBoard(id: string): Promise<void> {
const found = await this.getBoardById(id);
await this.boardsRepository.delete(found.id);
}
//게시글 수정
async updateBoardStatus(id: string, status: BoardStatus): Promise<Board> {
const board = await this.getBoardById(id);
board.status = status;
await this.boardsRepository.save(board);
return board;
}
}
컨트롤러 리팩토링
import { Body, Controller, Delete, Get, Param, Patch, Post, UsePipes, ValidationPipe } from '@nestjs/common';
import { BoardsService } from './boards.service';
import { Board, BoardStatus } from './Models/board.model';
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()
async getAllBoard(): Promise<Board[]> { // Promise<Board[]>로 반환 타입 수정
return this.boardsService.getAllBoards();
}
// 개별 게시글 조회
@Get('/:id')
async getBoardById(@Param('id') id: string): Promise<Board> { // Promise<Board>로 반환 타입 수정
return this.boardsService.getBoardById(id);
}
// 게시글 입력
@Post()
@UsePipes(ValidationPipe)
async createBoard(@Body() createBoardDto: CreateBoardDto): Promise<Board> { // Promise<Board>로 반환 타입 수정
return this.boardsService.createBoard(createBoardDto);
}
// 게시글 삭제
@Delete('/:id')
async deleteBoard(@Param('id') id: string): Promise<void> { // Promise<void>로 반환 타입 수정
await this.boardsService.deleteBoard(id); // await 추가
}
// 게시글 수정
@Patch('/:id/status')
async updateBoardStatus(
@Param('id') id: string,
@Body('status', BoardStatusValidationPipe) status: BoardStatus,
): Promise<Board> { // Promise<Board>로 반환 타입 수정
return this.boardsService.updateBoardStatus(id, status);
}
}
비동기 처리로 전체 교체 작업 진행
모듈
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { BoardsController } from './boards.controller';
import { BoardsService } from './boards.service';
import { Board } from './Entities/board.entity'; // Board 엔티티 가져오기
@Module({
imports: [
TypeOrmModule.forFeature([Board]), // Board 엔티티 등록
],
controllers: [BoardsController],
providers: [BoardsService],
})
export class BoardsModule {}
config, entity 추가 해줌
config 수정 + 엔터티 추가(board)
// typeorm.config.ts
import { TypeOrmModuleOptions } from '@nestjs/typeorm';
import { Board } from 'src/boards/Entities/board.entity';
export const typeOrmConfig: TypeOrmModuleOptions = {
type: 'postgres',
host: 'localhost',
port: 5432,
username: 'kon',
password: 'postgres',
database: 'board-app',
entities: [Board, __dirname + '/../**/*.entity.{js,ts}'], // 엔티티 추가
synchronize: true,
};

crud 테스트 결과 정상