π©π» λ°±μλ(Back-End)/Nest js
[Nest JS λ‘ CRUD κ²μν λ§λ€κΈ°] (33) μμ μ΄ μμ±ν κ²μλ¬Όμ μμ νκΈ°
μ§μ§μνμΉ΄
2023. 6. 10. 22:33
728x90
λ°μν
<λ³Έ λΈλ‘κ·Έλ John Ahn μ μ νλΈλ₯Ό μ°Έκ³ ν΄μ 곡λΆνλ©° μμ±νμμ΅λλ€ :-)>
=> λ°λΌνλ©΄μ λ°°μ°λ NestJS
π§Έ μμ μ΄ μμ±ν κ²μλ¬Όμ μμ νκΈ°
νμ¬λ, κ²μλ¬Όμ κ°μ Έμ¬ λ μ΄λ ν μ μ μΈμ§μ μκ΄μμ΄ λͺ¨λ κ²μλ¬Όμ κ°μ Έμ΄
κ²μλ¬Όμ κ°μ Έμ¬ λ ν΄λΉ μ μ κ° μμ±ν κ²μλ¬Όλ§ κ°μ Έμ€λλ‘ νλ€
π boards.controller.ts
// λ€μ΄μ€λ μμ²μ μ²λ¦¬νκ³ ν΄λΌμ΄μΈνΈμ μλ΅μ λ°νν¨
// @Controller λ°μ½λ μ΄ν°λ‘ ν΄λμ€λ₯Ό λ°μ½λ μ΄μ
νμ¬ μ μν¨
// Handler : @Get, @Post, @Delete λ±κ³Ό κ°μ λ°μ½λ μ΄ν°λ‘ μ₯μ λ 컨νΈλ‘€λ¬ ν΄λμ€ λ΄μ λ¨μν λ©μλ
import { Body, Controller, Delete, Get, Param, ParseIntPipe, Patch, Post, UseGuards, UsePipes, ValidationPipe } from '@nestjs/common';
import { BoardsService } from './boards.service';
import { BoardStatus } from './board-status.enum';
import { CreateBoardDto } from './dto/create-board.dto';
import { BoardStatusValidationPipe } from './pipes/board-status-validation.pipe';
import { Board } from './board.entity';
import { AuthGuard } from '@nestjs/passport';
import { GetUser } from 'src/auth/get-decorator';
import { User } from 'src/auth/user.entity';
@Controller('boards')
// μΈμ¦λ μ μ λ§ κ²μλ¬Ό λ³΄κ³ μΈ μ μκ² νκΈ°
@UseGuards(AuthGuard())
export class BoardsController {
constructor(private boardsService : BoardsService) {}
// λͺ¨λ κ²μλ¬Ό μ‘°ννκΈ°
@Get("/")
getAllBoard(
// ν΄λΉ μ μ μ κ²μλ¬Όλ§ κ°μ Έμ€κΈ° (getAllBoards)
@GetUser() user: User
): Promise<Board[]> {
return this.boardsService.getAllBoards(user);
}
// κ²μλ¬Ό μμ±νκΈ° + μ ν¨μ± 체ν¬νκΈ°
@Post()
@UsePipes(ValidationPipe)
createBoard(@Body() createBoardDto: CreateBoardDto,
@GetUser() user:User): Promise<Board> {
return this.boardsService.createBoard(createBoardDto, user)
}
// @Post()
// @UsePipes(ValidationPipe)
// createBoard(
// @Body() createBoardDto: CreateBoardDto
// ): Board {
// return this.boardsService.createBoard(createBoardDto)
// }
// IDλ‘ νΉμ κ²μλ¬Ό κ°μ Έμ€κΈ°
@Get("/:id")
getBoardByID(@Param("id") id:number) : Promise<Board> {
return this.boardsService.getBoardById(id);
}
// @Get("/:id")
// getBoardByID(@Param("id") id: string): Board {
// return this.boardsService.getBoardById(id)
// }
// ID λ‘ νΉμ κ²μλ¬Ό μμ νκΈ°
@Delete("/:id")
deleteBoard(@Param("id",ParseIntPipe) id,
// μμ μ΄ μμ±ν κ²μλ¬Όμ μμ νκΈ°
@GetUser() user:User
): Promise<void> {
return this.boardsService.deleteBoard(id, user);
}
// @Delete("/:id")
// deleteBoard(@Param("id") id: string): void {
// this.boardsService.deleteBoard(id);
// }
// νΉμ κ²μλ¬Όμ μν μ
λ°μ΄νΈ
@Patch("/:id/status")
updateBoardStatus(
@Param("id", ParseIntPipe) id: number,
@Body('status', BoardStatusValidationPipe) status: BoardStatus
) {
return this.boardsService.updateBoardStatus(id, status);
}
}
π boards.service.ts
// λ€λ₯Έ μ»΄ν¬λνΈμμ μ΄ μλΉμ€λ₯Ό μ¬μ©ν μ μκ² λ§λ€μ΄μ€
// @Injectable λ°μ½λ μ΄ν°λ‘ κ°μΈμ Έμ λͺ¨λμ μ 곡
import { Injectable, NotFoundException } from '@nestjs/common';
import { BoardStatus } from './board-status.enum';
import { CreateBoardDto } from "./dto/create-board.dto";
import { v1 as uuid } from "uuid";
import { create } from 'domain';
import { statSync } from 'fs';
import { BoardRepository } from './board.repository';
import { InjectRepository } from '@nestjs/typeorm';
import { Board } from './board.entity';
import { User } from 'src/auth/user.entity';
@Injectable()
export class BoardsService {
constructor(
@InjectRepository(BoardRepository)
private boardRepository: BoardRepository,
){}
// λͺ¨λ κ²μλ¬Ό μ‘°ννκΈ°
async getAllBoards(
user: User
): Promise <Board[]> {
// ν΄λΉ μ μ μ κ²μλ¬Όλ§ κ°μ Έμ€κΈ° (getAllBoards)
const query = this.boardRepository.createQueryBuilder("board");
query.where("board.userId = :userId", { userId: user.id});
const boards = await query.getMany();
return boards;
}
// κ²μλ¬Ό μμ±νκΈ°
async createBoard(createBoardDto: CreateBoardDto, user: User): Promise<Board> {
return this.boardRepository.createBoard(createBoardDto, user);
}
// IDλ‘ νΉμ κ²μλ¬Ό κ°μ Έμ€κΈ°
async getBoardById(id: number): Promise <Board> {
const found = await this.boardRepository.findOne(id);
// νΉμ κ²μλ¬Όμ μ°Ύμ λ μλ κ²½μ° κ²°κ³Όκ° μ²λ¦¬νκΈ°
// μμΈ μΈμ€ν΄μ€ μμ±νμ¬ μλ¬ νμΆ
if (!found) {
throw new NotFoundException(`Can't find Board with id ${id}`);
}
return found;
}
// getBoardById(id: string): Board {
// const found = this.boards.find((board) => board.id === id);
// // νΉμ κ²μλ¬Όμ μ°Ύμ λ μλ κ²½μ° κ²°κ³Όκ° μ²λ¦¬νκΈ°
// // μμΈ μΈμ€ν΄μ€ μμ±νμ¬ μλ¬ νμΆ
// if (!found) {
// throw new NotFoundException(`Can't find Board with id ${id}`);;
// }
// return found;
// }
// IDλ‘ νΉμ κ²μλ¬Ό μμ νκΈ° (μμ μ΄ μμ±ν κ²μλ¬Όμ μμ νκΈ°)
async deleteBoard(id: number, user: User): Promise<void> {
const result = await this.boardRepository.delete({id, user});
// IDκ° μ‘΄μ¬νλ κ²μλ¬Όμ΄λ?
if (result.affected === 0) {
throw new NotFoundException(`Can't find Board with id ${id}`);
}
}
// deleteBoard(id: string): void {
// // μλ ID μ κ²μλ¬ΌμΈμ§ νμΈνκΈ°
// const found = this.getBoardById(id);
// this.boards = this.boards.filter((board) => board.id !== found.id);
// }
// νΉμ κ²μλ¬Όμ μν μ
λ°μ΄νΈ
async updateBoardStatus(id: number, status: BoardStatus): Promise<Board> {
const board = await this.getBoardById(id);
board.status = status;
await this.boardRepository.save(board);
return board;
}
// updateBoardUpdate(id: string, status: BoardStatus): Board {
// // νΉμ κ²μλ¬Ό μ°ΎκΈ°
// const board = this.getBoardById(id);
// board.status = status;
// return board;
// }
}
728x90
λ°μν