From ef858f6e348b15aa715556a6f6e94e82d3d63fde Mon Sep 17 00:00:00 2001 From: ttipo Date: Fri, 19 Jun 2026 13:12:21 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EC=A0=80=EC=9E=A5=EC=86=8C=20=EC=97=85?= =?UTF-8?q?=EB=AC=B4=20=EC=84=B8=EA=B7=B8=EB=A8=BC=ED=8A=B8=C2=B7=EA=B2=80?= =?UTF-8?q?=EC=83=89=C2=B7=EB=8D=94=EB=B3=B4=EA=B8=B0=20+=20=EB=A9=A4?= =?UTF-8?q?=EB=B2=84=20=EC=A0=84=EC=B2=B4=20=EB=A1=9C=EB=93=9C=20(8-1=20?= =?UTF-8?q?=ED=8E=98=EC=9D=B4=EC=A7=80=EB=84=A4=EC=9D=B4=EC=85=98=20?= =?UTF-8?q?=EB=A7=88=EB=AC=B4=EB=A6=AC)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 저장소 업무 목록(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) --- frontend/src/composables/useTask.ts | 14 ++-- frontend/src/pages/relay/RepoDetailPage.vue | 93 +++++++++++++-------- frontend/src/stores/member.store.ts | 16 +++- frontend/src/stores/task.store.ts | 46 ++++++++-- frontend/src/types/task.ts | 22 ++++- 5 files changed, 140 insertions(+), 51 deletions(-) diff --git a/frontend/src/composables/useTask.ts b/frontend/src/composables/useTask.ts index ceac95c..83f48d5 100644 --- a/frontend/src/composables/useTask.ts +++ b/frontend/src/composables/useTask.ts @@ -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> { + page = 1, + size = DEFAULT_PAGE_SIZE, + ): Promise { return (await api.get(`/repos/${repoId}/tasks`, { - params: query, - })) as unknown as Paginated + params: { ...query, page, size }, + })) as unknown as ApiRepoTaskListResult } // 업무 단건 상세 (taskId = 저장소 내 순번) diff --git a/frontend/src/pages/relay/RepoDetailPage.vue b/frontend/src/pages/relay/RepoDetailPage.vue index 3cc186b..38ba2a4 100644 --- a/frontend/src/pages/relay/RepoDetailPage.vue +++ b/frontend/src/pages/relay/RepoDetailPage.vue @@ -1,6 +1,8 @@