feat(project): 보드 카드를 같은 세션 안에서 드래그로 순서 변경

지금까지 같은 세션에 다시 놓으면 아무 일도 안 일어났다(다른 세션으로
옮길 때만 동작). 놓은 위치(마우스 Y좌표)를 카드들 사이 인덱스로 계산해
그 순서를 새 엔드포인트로 저장하고(tasks.sort_order, 세션 소속만 재배정 —
세션 재정렬의 reorder_stages 와 동일 패턴), 로컬 tasks 배열도 그 순서에
맞게 재배치(applyStageOrder)해 새로고침 없이 즉시 반영. 실제 3개 업무로
드래그→서버 저장→하드리로드까지 헤드리스 크롬으로 검증.
This commit is contained in:
2026-09-16 15:31:26 +09:00
parent 4dbb3e7856
commit cfa41f0f6f
7 changed files with 80 additions and 7 deletions
+14
View File
@@ -812,6 +812,20 @@ class ProjectStore:
(i, int(sid), project_id),
)
def reorder_tasks(self, *, stage_id: int, ordered_ids: list[int]) -> None:
"""보드 카드 드래그로 같은 세션 안에서 순서 바꾸기. sort_order 는
업무 생성 시 프로젝트 전체 기준으로 매겨지지만(다른 세션과 섞여도
무방 — 화면은 항상 세션으로 먼저 필터링한 뒤 이 값으로 정렬한다),
여기서는 이 세션 소속 업무만 골라 0부터 다시 매긴다."""
with self._pool.connection() as conn:
with conn.transaction():
for i, tid in enumerate(ordered_ids):
conn.execute(
"UPDATE tasks SET sort_order = %s "
"WHERE id = %s AND stage_id = %s",
(i, int(tid), stage_id),
)
# ════════════════════════════════════════════════════════════
# 알림센터 (project_notifications)
# ════════════════════════════════════════════════════════════