내배캠 102일차

·2023년 2월 23일
0

내일배움캠프

목록 보기
112/142
post-thumbnail

데이터베이스를 이용한 CRUD구현

1. 코드 정리

이전에 DB 대신 메모리를 이용했을 때 사용하는 코드는 이제 DB 덕에 필요 없어짐. 새로 작성해 줘야 함.

  1. 서비스와 컨트롤러 코드는 대공사 해야 함. 그래도 다 지우기 보다는 주석처리해두고 고칠예정
  2. 서비스에서 Board 저장하는 코드는 지워도 됨.
  3. board.model.ts 에서 interface Board 는 이제 entity 가 있으므로 지워도 됨.
  4. @InjectRepository 데코레이터를 이용해서 서비스에서 BoardRepository DI
constructor(
    @InjectRepository(BoardRepository)
    private boardRepository: BoardRepository,
  ) {}

2. 상세조회

getBoardById
=> TypeOrm에서 제공하는 findOne 메소드 이용
=> async await을 이용해서 DB작업이 끝난후 결과값을 리턴하도록

board.service.ts

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;
  }

2022년 3월 30일 기준으로,
this.boardsRepository.findOne( id );
위와 같이 입력을 했는데 에러가 발생했다면, 해당 부분을 다음의 코드로 교체해서 해결할 수 있습니다.
this.boardsRepository.fineOneBy({ id });

async getBoardById(id: number): Promise<Board> {
    const found = await this.boardRepository.findOneBy({ id });

    if (!found) {
      throw new NotFoundException(`Can't find Board with id ${id}`);
    }
    return found;
  }

board.controller.ts

@Get('/:id')
  getBoardById(@Param('id') id: number): Promise<Board> {
    return this.boardsService.getBoardById(id);
  }

3. 게시물생성

board.service.ts

 async createBoard(createBoardDto: CreateBoardDto): Promise<Board> {
    const { title, description } = createBoardDto;
    const board = this.boardRepository.create({
      title,
      description,
      status: BoardStatus.PUBLIC,
    });

    await this.boardRepository.save(board);
    return board;
  }

board.controller.ts

@Post()
  @UsePipes(ValidationPipe)
  createBoard(@Body() createBoardDto: CreateBoardDto): Promise<Board> {
    return this.boardsService.createBoard(createBoardDto);
  }

repository pattern

서비스의 DB관련 코드를 리포지토리로 옮겨주기!

board.service.ts

constructor(
    @InjectRepository(Board)
    private boardRepository: BoardRepository,
  ) {}

createBoard(createBoardDto: CreateBoardDto): Promise<Board> {
    return this.boardRepository.createBoard(createBoardDto);
  }

TypeError: this.boardRepository.createBoard is not a function 발생

constructor(private readonly boardRepository: BoardRepository) {}

createBoard(createBoardDto: CreateBoardDto): Promise<Board> {
    return this.boardRepository.createBoard(createBoardDto);
  }

board.repository.ts

async createBoard(createBoardDto: CreateBoardDto): Promise<Board> {
    const { title, description } = createBoardDto;

    const board = this.create({
      title,
      description,
      status: BoardStatus.PUBLIC,
    });

    await this.save(board);
    return board;
  }

3. 게시물생성

board.service.ts

board.controller.ts

3. 게시물생성

board.service.ts

board.controller.ts

profile
개발자 꿈나무

0개의 댓글