본문 바로가기

내일 배움 캠프/9gle

9gle 4일차

728x90

오늘 한 것

[ 백엔드 정상 작동 검토 및 수정 완료]
회원 관리 기능 API
보드 관리 기능 API
권한 관리 기능 API
컬럼 관리 기능 API
카드 관리 기능 API 
댓글 관리 기능 API 

 

[수정 및 추가된 부분]

컬럼 : 순서 자동생성
카드 : 접근 권한 확인, 전체 조회를 개별 조회로 변경, 카드 순서 자동 생성, 카드 순서 up down 만들기
보드 : SQL raw query 변경

댓글 : 권한이 있는 사용자만 CRUD 가능하게

 

Trouble Shooting

1. Op.gt  Op.lt

문제

중간에 column이 삭제되는 경우 순서가 +1씩 증가할 수 없다.

기존의 식이다.

async moveColumnUp(columnId) {
    const t = await sequelize.transaction();
    try {
      const currentColumn = await Columns.findByPk(columnId, {
        transaction: t,
      });
      const currentOrder = currentColumn.columnOrder;
      const columnOrder = currentOrder + 1;
      const targetColumn = await Columns.findOne(
        {
          where: { columnOrder },
        },
        { transaction: t },
      );
      const targetId = targetColumn.columnId;

      await Columns.update(
        { columnOrder: columnOrder },
        { where: { columnId } },
        { transaction: t },
      );
      await Columns.update(
        { columnOrder: currentOrder },
        { where: { columnId: targetId } },
        { transaction: t },
      );

      await t.commit();
      return 1;
    } catch (err) {
      console.log(err);
      await t.rollback();
      return 0;
    }
  }

시도

Op.gt를 이용하여 증가 시키려는 column 보다 columnOrder가 많은 것들을 추리고

그 안에서 columnOrder 순으로 정렬하여

limit 1을 통해 내 바로 위 순서의 column을 뽑아낸다.

 

async moveColumnUp(columnId) {
    const t = await sequelize.transaction();
    try {
      const currentColumn = await Columns.findByPk(columnId, {
        transaction: t,
      });
      const currentOrder = currentColumn.columnOrder;

      const targetColumn = await Columns.findAll(
        {
          where: {
            columnOrder: { [Op.gt]: currentOrder },
          },
          order: [['columnOrder']],
          limit: 1,
        },
        { transaction: t },
      );
      const targetOrder = targetColumn[0].columnOrder;
      const targetId = targetColumn[0].columnId;

      await Columns.update(
        { columnOrder: targetOrder },
        { where: { columnId } },
        { transaction: t },
      );
      await Columns.update(
        { columnOrder: currentOrder },
        { where: { columnId: targetId } },
        { transaction: t },
      );

      await t.commit();
      return 1;
    } catch (err) {
      console.log(err);
      await t.rollback();
      return 0;
    }
  }

 

해결

잘 해결 되었다. 

알게된 것

Op.gt : 대상보다 초과하는 것들의 집합

Op.lt : 대상 미만의 집합

Op.gt 등 Op 옵션을 줄 때는 사용하려는 컬럼을 지정해 주어야 한다.

위의 에러가 발생한 코드

 

소감

 

이번 프로젝트 진행은 정말 시간이 부족하다고 느껴진다. 회고를 적을 시간이 없다. TIL도 겨우 적고 있다.

프로젝트 난이도가 있다는 것이 거짓말은 아니다.

같은 CRUD지만 발생할 수 있는 문제들에 대해 심도있게 고민하다 보니 그렇게 되는 것 같다.

'내일 배움 캠프 > 9gle' 카테고리의 다른 글

프로젝트 9gle KPT 회고  (0) 2023.08.14
9gle 프로젝트 완성  (0) 2023.08.13
9gle 5일차  (0) 2023.08.11
9gle 2일차  (0) 2023.08.08