async moveCard(cardId: number, listOrder: number, cardOrder: number) {
const card = await this.cardRepository.findOneBy({ cardId });
const cards = await this.cardRepository.find({
where: { listId: listOrder },
});
if (_.isNil(card)) {
throw new NotFoundException('존재하지 않는 카드입니다.');
}
const list = await this.listRepository.findOneBy({ listId: listOrder });
if (!list) {
throw new NotFoundException('해당 리스트(칼럼)가 존재하지 않습니다.');
}
if (card.listId === listOrder) {
await this.cardRepository.update({ cardId }, { order: cardOrder });
if (card.order > cardOrder) {
for (let i = cardOrder; i < card.order; i++) {
const upCard = await this.cardRepository.findOne({
where: { listId: listOrder, order: i },
});
await this.cardRepository.update(
{ cardId: upCard.cardId },
{ order: i + 1 },
);
}
} else {
for (let j = cardOrder; j > card.order; j--) {
const downCard = await this.cardRepository.findOne({
where: { listId: listOrder, order: j },
});
await this.cardRepository.update(
{ cardId: downCard.cardId },
{ order: j - 1 },
);
}
}
} else {
const fList = await this.cardRepository.find({
where: { listId: card.listId },
});
console.log('다른 리스트로 옮기기 전의 카드 리스트 정보', card.listId);
for (let y = card.order + 1; y <= fList.length; y++) {
const fLCard = await this.cardRepository.findOne({
where: { listId: card.listId, order: y },
});
await this.cardRepository.update(
{ cardId: fLCard.cardId },
{ order: y - 1 },
);
}
if (cardOrder > cards.length) {
await this.cardRepository.update(
{ cardId },
{ listId: listOrder, order: cards.length + 1 },
);
} else {
for (let z = cardOrder; z <= cards.length; z++) {
const mCard = await this.cardRepository.findOne({
where: { listId: listOrder, order: z },
});
await this.cardRepository.update(
{ cardId: mCard.cardId },
{ order: z + 1 },
);
}
await this.cardRepository.update(
{ cardId },
{ listId: listOrder, order: cardOrder },
);
}
}
}