순서를 한칸씩 미루는 기능을 만들었는데 보다시피 전부다 같은 값으로 변해버렸다.
await 때문인가?
아니면 transaction?
number () 를 sequelize 명령어 안에서 두번쓰면 오류가 뜨는건가? 등등 여러가지로 한참을 고민했는데, 알고보니 오류가 뜨는 것이 너무 당연한 것이었다.
현재 값을 다음 값과 같게 바꾸었기 때문에, 다음 값을 바꿀때 현재 값도 같이 바뀌고.... 이것이 반복되면서 모든 값이 같아졌던 것
나는 그것을 생각하지 못하고 모두 같은 값 = 가장 높은 값 인데만 정신이 팔려서 어떻게 굴러가는지 알지 못했던 것이다.
작업 자체는 그대로 두면서 순서만 반대로 바꾸어서 구현했다.
// 리스트 밀기 매서드
moveList_Repository = async (listOrder, listOrderNew) => {
console.log(listOrder, listOrderNew);
const t = await sequelize.transaction();
let moveList;
try {
// 바꿀 레코드 순서를 0으로
await Lists.update(
{listOrder: 0},
{where: {listOrder: listOrderNew}, transaction: t},
);
// 순서밀기
if (listOrder < listOrderNew) {
for (let i = listOrderNew; i >= listOrder; i--) {
let nowOrder = Number(i);
let newOrder = Number(i) + Number(1);
console.log(i, newOrder);
Lists.update(
{listOrder: newOrder},
{where: {listOrder: nowOrder}, transaction: t},
);
}
} else {
for (let i = listOrderNew; i <= listOrder; i++) {
let nowOrder = Number(i);
let newOrder = Number(i) - Number(1);
Lists.update(
{listOrder: newOrder},
{where: {listOrder: nowOrder}, transaction: t},
);
}
}
// 0으로 바꾼 레코드를 목표 순서로
await Lists.update(
{listOrder: listOrder},
{where: {listOrder: 0}, transaction: t},
);
await t.commit();
moveList = {status: 200, message: '리스트 순서 밀기 성공'};
return moveList;
} catch (err) {
await t.rollback();
}
};
위에서 아래로 미는 경우와 아래에서 위로 미는 경우 두 가지 모두 구현.
내 머리가 좀만 더 잘 돌아갔으면 한큐에 구현이 됐을 것 같은데 아쉽다.
내일 아침 할 것
1. git hub에 api 명세서가 로그인한 사람만 볼 수 있다. api 명세서를 남들도 볼 수 있게 바꿔달라고 요청하자.
현재 delete 빼고 api 구현이 완료 되었는데, 다른 사람들 진행 상황도 물어보기.
로그인 미들웨어와 연동시키기