๐ฉ๐ป ๋ฐฑ์๋(Back-End)/Nest js
[Nest JS ๋ก CRUD ๊ฒ์ํ ๋ง๋ค๊ธฐ] (32) ํด๋น ์ ์ ์ ๊ฒ์๋ฌผ๋ง ๊ฐ์ ธ์ค๊ธฐ (getAllBoards)
์ง์ง์ํ์นด
2023. 6. 10. 22:29
728x90
๋ฐ์ํ
<๋ณธ ๋ธ๋ก๊ทธ๋ John Ahn ์ ์ ํ๋ธ๋ฅผ ์ฐธ๊ณ ํด์ ๊ณต๋ถํ๋ฉฐ ์์ฑํ์์ต๋๋ค :-)>
=> ๋ฐ๋ผํ๋ฉด์ ๋ฐฐ์ฐ๋ NestJS
๐งธ ํด๋น ์ ์ ์ ๊ฒ์๋ฌผ๋ง ๊ฐ์ ธ์ค๊ธฐ (getAllBoards)
ํ์ฌ๋, ๊ฒ์๋ฌผ์ ๊ฐ์ ธ์ฌ ๋ ์ด๋ ํ ์ ์ ์ธ์ง์ ์๊ด์์ด ๋ชจ๋ ๊ฒ์๋ฌผ์ ๊ฐ์ ธ์ด
๊ฒ์๋ฌผ์ ๊ฐ์ ธ์ฌ ๋ ํด๋น ์ ์ ๊ฐ ์์ฑํ ๊ฒ์๋ฌผ๋ง ๊ฐ์ ธ์ค๋๋ก ํ๋ค
๐ 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): Promise<void> {
return this.boardsService.deleteBoard(id);
}
// @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): Promise<void> {
const result = await this.boardRepository.delete(id);
// 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
๋ฐ์ํ