[spring/프로젝트] 컬럼 위치 이동 기능

kongta2·2024년 1월 2일

Trello프로젝트 진행 과정 중 내가 맡은 기능 중 하나인 Column 이동 기능에 대해서 글을 써보려고 한다.

  1. 컬럼이동은 어떻게 나타낼 것인가

처음에는 id값을 이동시켜보려고 했으나 id값은 중복이 되어서는 안되기때문에 index변수를 하나 더 만들어서 위치변화를 나타내기로 했다.

  1. index값은 어떻게 생성할 것인가

Column테이블에 columnIndex를 만들고 생성할 때마다 1씩 증가시켜주기 위해서 처음에는 @GeneratedValue를 사용하려고 했으나 위의 어노테이션은 @Id만 사용이 가능했기때문에 실패했다.

그래서 column을 생성할때마다 index값을 1증가시켜주는 방식으로 해결했다.

Long columnIndex = columnsRepository.countByBoardId(boardId)+1L;
  1. index값을 어떻게 이동시킬 것인가

처음에는 단순하게 swap을 사용하면 되는게 아닌가 라고 생각했지만, swap을 사용하게 되면 A와 C가 swap을 했을때의 결과가 원래 정상 동작했을 때의 결과물인 B-C-A가 아닌 C-B-A가 되게 된다.
간단하게 말해서 앞에 있는 컬럼이 뒤로가게되면 그 사이에 있던 컬럼들을 한칸씩 앞으로 밀어줘야한다.

        for(Columns columns: columnsList) {
            Long columnsIndex = columns.getColumnIndex();

            if(currentColumnIndex < targetIndex) {
                if(columnsIndex > currentColumnIndex && columnsIndex <= targetIndex) {
                    columns.setColumnIndex(columnsIndex-1);
                }
            } else if (currentColumnIndex > targetIndex) {
                if(columnsIndex >= targetIndex && columnsIndex < currentColumnIndex) {
                    columns.setColumnIndex(columnsIndex+1);
                }
            }
        }

기존의 모든 컬럼(columnsList)의 index, 현재 옮기려고하는 column의 index, 옮기려고하는 목표 index 총 3가지를 이용해서 현재 컬럼의 index가 목표 index보다 큰 경우와 작은 경우를 나누어서 기존의 컬럼들의 index값을 변경시켜주는 방식으로 해결하였다.

profile
2025.04.01~

0개의 댓글