TIL

24.03.21

아리단길아조씨 2024. 3. 22. 00:56
728x90

- 베어러 토큰이 있어야 작동이 가능하게 코드 수정해야 함.

 async changeListTitle(
    updateListDto: UpdatedListDto,
    listId: number,
    user: User,
  ) {
    // 찾고 싶은 게시물을 listId를 통해서 찾아준다.
    const { id } = user;
    const list = await this.ListRepository.findOne({
      where: { listId, userId: id },
    });
    if (!list) {
      throw new NotFoundException(`해당하는 컬럼이 존재하지 않습니다.`);
    }
    // 레포지토리에 업데이트를 해줘야함
    await this.ListRepository.update({ listId, userId: id }, updateListDto);

    // list의 타이틀을 변경된 것을 DB에 넣어야함
    const changedListTitle = await this.ListRepository.findOne({
      where: {
        listId,
        userId: id,
      },
    });

    if (changedListTitle) {
      return {
        status: HttpStatus.OK,
        message: `${listId}번 컬럼 제목이 정상적으로 변경되었습니다.`,
        result: changedListTitle,
      };
    }
    // return changedListTitle;
  }

// 컨트롤러
@UseGuards(JwtAuthGuard)
  @Patch('/:listId')
  changeListTile(
    @Body() updatedListDto: UpdatedListDto,
    @Param('listId') listId: number,
    @userInfo() user: User,
  ) {
    return this.listService.changeListTitle(updatedListDto, listId, user);

서비스 부분: userId와 listId를 통해 바꿀 게시물을 찾아줌 컨트롤러 부분: 인증된 사용자가 사용할 수 있도록 베어러 토큰 사용을 위해서 UseGuards설정을 해주고 userInfo라는 커스텀 데코레이터를 사용함.

- 가드를 사용해서 베어러 토큰을 받아서 작업할 수 있게 했음

 @UseGuards(JwtAuthGuard)
  @Post() // url 추가적으로 작성해줘야함(기능은 잘 돌아감)
  // 클라이언트가 body에 담아서 보내야 하는 것
  create(@Body() createListDto: CreateListDto, @userInfo() user: User) {
    this.listService.createList(createListDto, user);
    return {
      status: HttpStatus.CREATED,
      message: `새로운 컬럼이 생성되었습니다.`,
    };
    // return { statusCode: HttpStatus.OK, message: '내 정보 수정에 성공했습니다.', data: updatedUser, };
  }

  // 컬럼 제목 변경
  @UseGuards(JwtAuthGuard)
  @Patch('/:listId')
  changeListTile(
    @Body() updatedListDto: UpdatedListDto,
    @Param('listId') listId: number,
    @userInfo() user: User,
  ) {
    return this.listService.changeListTitle(updatedListDto, listId, user);
  }

  // 컬럼 삭제 하기
  @UseGuards(JwtAuthGuard)
  @Delete('/:listId')
  deleteList(@Param('listId') listId: number, @userInfo() user: User) {
    return this.listService.deleteList(listId, user);
  }

// 서비스

async createList(createListDto: CreateListDto, user: User) {
    const { title } = createListDto;
    const { id } = user;
    const newList = await this.ListRepository.save({
      title,
      userId: id,
    });
    return newList.title;
  }

  // 컬럼 제목 변경
  async changeListTitle(
    updateListDto: UpdatedListDto,
    listId: number,
    user: User,
  ) {
    // 찾고 싶은 게시물을 listId를 통해서 찾아준다.
    const { id } = user;
    const list = await this.ListRepository.findOne({
      where: { listId, userId: id },
    });
    if (!list) {
      throw new NotFoundException(`해당하는 컬럼이 존재하지 않습니다.`);
    }
    // 레포지토리에 업데이트를 해줘야함
    await this.ListRepository.update({ listId, userId: id }, updateListDto);

    // list의 타이틀을 변경된 것을 DB에 넣어야함
    const changedListTitle = await this.ListRepository.findOne({
      where: {
        listId,
        userId: id,
      },
    });

    if (changedListTitle) {
      return {
        status: HttpStatus.OK,
        message: `${listId}번 컬럼 제목이 정상적으로 변경되었습니다.`,
        result: changedListTitle,
      };
    }
    // return changedListTitle;
  }

  // 컬럼 삭제하기
  async deleteList(listId: number, user: User) {
    const { id } = user;
    const list = await this.ListRepository.findOne({
      where: { listId, userId: id },
    });
    if (!list) {
      throw new NotFoundException(`해당하는 컬럼이 존재하지 않습니다.`);
    }
    const deleteList = await this.ListRepository.delete({ listId, userId: id });
    if (deleteList) {
      return {
        status: HttpStatus.OK,
        message: `${listId}번 컬럼이 정상적으로 삭제되었습니다.`,
        result: deleteList,
      };
    }
  }

- 트롤로 프로젝트 List 위치 이동 생성 Ing (이거는 진짜 못하겠음;;)

너무 어렵다... 나 최종프로젝트까지 잘버틸 수 있을까?

'TIL' 카테고리의 다른 글

24.03.25  (0) 2024.03.26
24.03.22  (0) 2024.03.25
24.03.20  (0) 2024.03.20
24.03.19  (0) 2024.03.20
24.03.18  (0) 2024.03.19