From d3c7593b6ba8e1d9400facc8fe287c269758ef07 Mon Sep 17 00:00:00 2001 From: Kim minho <90795904+klaus9267@users.noreply.github.com> Date: Tue, 6 Sep 2022 17:52:35 +0900 Subject: [PATCH] =?UTF-8?q?Incomplete(minho/board):=20board=20=ED=85=8C?= =?UTF-8?q?=EC=9D=B4=EB=B8=94=EB=93=A4=20FK=EC=84=A4=EC=A0=95#4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main-project/src/boards/boards.controller.ts | 57 ++++++++++++++++--- main-project/src/boards/boards.service.ts | 55 +++++++++++++++++- .../src/boards/dto/update-board.dto.ts | 35 ++++++++++++ .../boards/entity/board-bookmark.entity.ts | 19 +++++++ .../boards/entity/board-member-info.entity.ts | 26 +++++++++ .../boards/entity/board.bookmark.entity.ts | 8 --- .../src/boards/entity/board.entity.ts | 3 + .../boards/entity/board.member.info.entity.ts | 14 ----- .../src/boards/repository/board.repository.ts | 1 - 9 files changed, 185 insertions(+), 33 deletions(-) create mode 100644 main-project/src/boards/dto/update-board.dto.ts create mode 100644 main-project/src/boards/entity/board-bookmark.entity.ts create mode 100644 main-project/src/boards/entity/board-member-info.entity.ts delete mode 100644 main-project/src/boards/entity/board.bookmark.entity.ts delete mode 100644 main-project/src/boards/entity/board.member.info.entity.ts diff --git a/main-project/src/boards/boards.controller.ts b/main-project/src/boards/boards.controller.ts index fc9fd9eb..0fd553f0 100644 --- a/main-project/src/boards/boards.controller.ts +++ b/main-project/src/boards/boards.controller.ts @@ -1,21 +1,64 @@ -import { Body, Controller, Logger, Post } from '@nestjs/common'; +import { + Body, + Controller, + Delete, + Get, + Logger, + Param, + Patch, + ParseIntPipe, + Post, +} from '@nestjs/common'; import { BoardsService } from './boards.service'; import { CreateBoardDto } from './dto/create-board.dto'; -import { Board } from './entity/board.entity'; +import { UpdateBoardDto } from './dto/update-board.dto'; @Controller('boards') export class BoardsController { private logger = new Logger('BoardsController'); + // logger는 middle ware로 분리 필요 + constructor(private boardService: BoardsService) {} + @Get() + async getAllBoards(): Promise { + const boards: object = await this.boardService.getAllBoards(); + const response = { + success: true, + boards, + }; + + return response; + } + + @Get('/:boardNo') + async getBoardByNo(@Param('boardNo') boardNo: number): Promise { + const board: object = await this.boardService.getBoardByNo(boardNo); + const response = { + success: true, + board, + }; + + return response; + } + @Post() - // @UsePipes(ValidationPipe) - createBoard( + async createBoard( @Body() createBoarddto: CreateBoardDto, - ): Promise { - // this.logger.debug(`User : ${user.username} creating a new board.`); + ): Promise { + const board: object = await this.boardService.createBoard(createBoarddto); + const response = { success: true, board }; + + return response; + } + + @Delete('/:boardNo') + async deleteBoard( + @Param('boardNo', ParseIntPipe) boardNo: number, + ): Promise { + await this.boardService.deleteBoardByNo(boardNo); - return this.boardService.createBoard(createBoarddto); + return { success: true }; } } diff --git a/main-project/src/boards/boards.service.ts b/main-project/src/boards/boards.service.ts index a1608f0f..6fd8613c 100644 --- a/main-project/src/boards/boards.service.ts +++ b/main-project/src/boards/boards.service.ts @@ -1,6 +1,8 @@ -import { Injectable } from '@nestjs/common'; +import { Injectable, NotFoundException } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; +import { Repository } from 'typeorm'; import { CreateBoardDto } from './dto/create-board.dto'; +import { UpdateBoardDto } from './dto/update-board.dto'; import { Board } from './entity/board.entity'; import { BoardRepository } from './repository/board.repository'; @@ -11,7 +13,54 @@ export class BoardsService { private boardRepository: BoardRepository, ) {} - createBoard(createBoardDto: CreateBoardDto): Promise { - return this.boardRepository.createBoard(createBoardDto); + async createBoard(createBoardDto: CreateBoardDto): Promise { + try { + const board = await this.boardRepository.createBoard(createBoardDto); + + // const memberInfo = this.boardRepository.createMemberInfo(createBoardDto); + + // const response = { board: board }; + // const response = { board: board, memberInfo: memberInfo }; + + return board; + } catch (error) { + throw error; + } + } + + async getAllBoards(): Promise { + try { + return await this.boardRepository.find(); + } catch (error) { + throw error; + } + } + + async getBoardByNo(boardNo: number): Promise { + try { + const found = await this.boardRepository.findOne(boardNo); + + if (!found) { + throw new NotFoundException(`Can't find Board with boardNo ${boardNo}`); + } + + return found; + } catch (error) { + throw error; + } + } + + async deleteBoardByNo(boardNo: number): Promise { + try { + const result = await this.boardRepository.delete(boardNo); + + if (result.affected === 0) { + throw new NotFoundException(`Can't find Board with boardNo ${boardNo}`); + } + + return true; + } catch (error) { + throw error; + } } } diff --git a/main-project/src/boards/dto/update-board.dto.ts b/main-project/src/boards/dto/update-board.dto.ts new file mode 100644 index 00000000..f0043b71 --- /dev/null +++ b/main-project/src/boards/dto/update-board.dto.ts @@ -0,0 +1,35 @@ +import { + IsBoolean, + IsDate, + IsNotEmpty, + IsNumber, + IsString, +} from 'class-validator'; + +export class UpdateBoardDto { + @IsNotEmpty() + @IsString() + title: string; + + @IsNotEmpty() + @IsString() + description: string; + + @IsBoolean() + @IsNotEmpty() + done: boolean; + + @IsString() + location: string; + + @IsDate() + time: Date; + + @IsNotEmpty() + @IsNumber() + male: number; + + @IsNotEmpty() + @IsNumber() + female: number; +} diff --git a/main-project/src/boards/entity/board-bookmark.entity.ts b/main-project/src/boards/entity/board-bookmark.entity.ts new file mode 100644 index 00000000..2df14733 --- /dev/null +++ b/main-project/src/boards/entity/board-bookmark.entity.ts @@ -0,0 +1,19 @@ +import { + BaseEntity, + Entity, + JoinColumn, + OneToOne, + PrimaryGeneratedColumn, +} from 'typeorm'; +import { Board } from './board.entity'; + +// fk없음, entity취합 후 생성예정 +@Entity() +export class BoardBookmark extends BaseEntity { + @PrimaryGeneratedColumn() + no: number; + + @OneToOne((type) => Board, (board) => board.no) + @JoinColumn() + board: Board; +} diff --git a/main-project/src/boards/entity/board-member-info.entity.ts b/main-project/src/boards/entity/board-member-info.entity.ts new file mode 100644 index 00000000..d10d32ac --- /dev/null +++ b/main-project/src/boards/entity/board-member-info.entity.ts @@ -0,0 +1,26 @@ +import { + BaseEntity, + Column, + Entity, + JoinColumn, + OneToOne, + PrimaryGeneratedColumn, +} from 'typeorm'; +import { Board } from './board.entity'; + +// fk없음, entity취합 후 생성예정 +@Entity() +export class BoardMemberInfo extends BaseEntity { + @PrimaryGeneratedColumn() + no: number; + + @Column({ type: 'int' }) + male: number; + + @Column({ type: 'int' }) + female: number; + + @OneToOne((type) => Board, (board) => board.no) + @JoinColumn() + board: Board; +} diff --git a/main-project/src/boards/entity/board.bookmark.entity.ts b/main-project/src/boards/entity/board.bookmark.entity.ts deleted file mode 100644 index b5601b40..00000000 --- a/main-project/src/boards/entity/board.bookmark.entity.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { BaseEntity, Column, Entity, PrimaryGeneratedColumn } from 'typeorm'; - -// fk없음, entity취합 후 생성예정 -@Entity() -export class Board_bookmark extends BaseEntity { - @PrimaryGeneratedColumn() - no: number; -} diff --git a/main-project/src/boards/entity/board.entity.ts b/main-project/src/boards/entity/board.entity.ts index 22642ba1..4e6215c9 100644 --- a/main-project/src/boards/entity/board.entity.ts +++ b/main-project/src/boards/entity/board.entity.ts @@ -4,9 +4,12 @@ import { CreateDateColumn, DeleteDateColumn, Entity, + JoinColumn, + OneToOne, PrimaryGeneratedColumn, UpdateDateColumn, } from 'typeorm'; +import { BoardMemberInfo } from './board-member-info.entity'; // fk없음, entity취합 후 생성예정 @Entity() diff --git a/main-project/src/boards/entity/board.member.info.entity.ts b/main-project/src/boards/entity/board.member.info.entity.ts deleted file mode 100644 index b7545e01..00000000 --- a/main-project/src/boards/entity/board.member.info.entity.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { BaseEntity, Column, Entity, PrimaryGeneratedColumn } from 'typeorm'; - -// fk없음, entity취합 후 생성예정 -@Entity() -export class Board_member_info extends BaseEntity { - @PrimaryGeneratedColumn() - no: number; - - @Column({ type: 'int' }) - male: number; - - @Column({ type: 'int' }) - female: number; -} diff --git a/main-project/src/boards/repository/board.repository.ts b/main-project/src/boards/repository/board.repository.ts index 6edf75dd..a5f630b6 100644 --- a/main-project/src/boards/repository/board.repository.ts +++ b/main-project/src/boards/repository/board.repository.ts @@ -13,7 +13,6 @@ export class BoardRepository extends Repository { const { title, description, done, location, time } = createBoardDto; const board = this.create({ - // 이미 repository에 들어왔으니 this는 class를 호출하는 것 title, description, done,