feat: 저장소 업무 세그먼트·검색·더보기 + 멤버 전체 로드 (8-1 페이지네이션 마무리)

- 저장소 업무 목록(RepoDetailPage): 세그먼트/검색을 백엔드로 이전(클라 필터 제거),
  응답 counts 로 세그먼트 배지, 더보기(오프셋) 추가. task.store 에 total/counts/hasMore/loadMore.
- 멤버: member.store.fetchList 가 페이지네이션 API 를 끝까지 순회해 전체 로드
  (역할/검색 카운트 전수 + TaskCreatePage 담당자 후보 보장).
- 타입 신설: TaskSegment/TaskSegmentCounts/ApiRepoTaskListResult.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-19 13:12:21 +09:00
parent c128b19599
commit ef858f6e34
5 changed files with 140 additions and 51 deletions
+8 -6
View File
@@ -3,28 +3,30 @@ import type {
ApiAttachment,
ApiComment,
ApiCommentReply,
ApiRepoTask,
ApiRepoTaskListResult,
ApiTaskDetail,
CreateTaskPayload,
TaskListQuery,
UpdateTaskPayload,
} from '@/types/task'
import type { TaskStatus } from '@/mock/relay.mock'
import type { Paginated } from '@/types/pagination'
import { DEFAULT_PAGE_SIZE } from '@/types/pagination'
// 업무 도메인 API Composable — 인터셉터가 success/data 를 언래핑
// 경로는 모두 repoId(slugName) 하위: /repos/:repoId/tasks[/:taskId]
export function useTask() {
const api = useApi()
// 업무 목록 (상태/담당자 필터 선택) — 백엔드가 페이지네이션 { items, total, ... } 반환
// 업무 목록 (세그먼트/검색/담당자 필터 + 페이지네이션) — 응답에 세그먼트 카운트 동봉
async function list(
repoId: string,
query: TaskListQuery = {},
): Promise<Paginated<ApiRepoTask>> {
page = 1,
size = DEFAULT_PAGE_SIZE,
): Promise<ApiRepoTaskListResult> {
return (await api.get(`/repos/${repoId}/tasks`, {
params: query,
})) as unknown as Paginated<ApiRepoTask>
params: { ...query, page, size },
})) as unknown as ApiRepoTaskListResult
}
// 업무 단건 상세 (taskId = 저장소 내 순번)