fix: 목록 페이지네이션 응답 계약 불일치 및 업무 목록 쿼리 크래시 수정

페이지네이션 도입 후 백엔드 목록 API 가 { items, total, ... } 를 반환하는데
프론트 멤버·업무 소비처가 배열로 기대해 list.map 이 깨지고, 멤버 탭과 업무
목록이 비어 보이던 회귀를 수정.

- backend(task): 업무 목록 쿼리에서 to-many 조인 컬럼(checklist.sort_order)
  으로 정렬해 페이지네이션 시 TypeORM 이 터지던 문제 제거(task.seq 만 정렬).
  목록 응답은 체크리스트 [완료/전체] 수만 쓰므로 항목 순서가 불필요.
- frontend(member/task): list 컴포저블이 Paginated<T> 를 반환하도록 맞추고
  스토어에서 .items 로 언래핑(저장소·내업무와 동일 계약).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-19 00:23:01 +09:00
parent 9b01fbaf2f
commit c128b19599
5 changed files with 27 additions and 11 deletions
+6 -1
View File
@@ -216,7 +216,12 @@ export class TaskService {
);
}
qb.orderBy('task.seq', 'DESC').addOrderBy('checklist.sort_order', 'ASC');
// 정렬은 메인 엔티티(task.seq) 기준만 사용한다.
// skip/take(페이지네이션)와 to-many 조인을 함께 쓰면 TypeORM 이 DISTINCT id 서브쿼리로
// 페이징하는데, 이때 조인된 to-many 컬럼(checklist.sort_order)으로 ORDER BY 하면
// 컬럼 메타데이터를 찾지 못해 터진다(createOrderByCombinedWithSelectExpression).
// 목록 응답은 체크리스트의 [완료/전체] 수만 쓰므로 항목 순서가 필요 없다.
qb.orderBy('task.seq', 'DESC');
const [tasks, total] = await qb
.skip(pg.skip)