๐Ÿ˜Ž ๊ณต๋ถ€ํ•˜๋Š” ์ง•์ง•์•ŒํŒŒ์นด๋Š” ์ฒ˜์Œ์ด์ง€?

[Nest JS ๋กœ CRUD ๊ฒŒ์‹œํŒ ๋งŒ๋“ค๊ธฐ] (32) ํ•ด๋‹น ์œ ์ €์˜ ๊ฒŒ์‹œ๋ฌผ๋งŒ ๊ฐ€์ ธ์˜ค๊ธฐ (getAllBoards) ๋ณธ๋ฌธ

๐Ÿ‘ฉ‍๐Ÿ’ป ๋ฐฑ์—”๋“œ(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
๋ฐ˜์‘ํ˜•
Comments