# Issue ## 작업 유형 <!-- 해당하는 항목에 체크해주세요. --> - [x] Feat: 새로운 기능 추가 - [ ] Fix: 버그 수정 - [ ] Docs: 문서 수정 - [ ] Refactor: 리팩토링 - [ ] Design: UI/CSS 수정 - [ ] Chore: 설정, 패키지, 기타 작업 - [ ] Hotfix: 긴급 수정 ## 작업 내용 <!-- 어떤 작업을 진행할지 간단히 작성해주세요. --> - 사이드 프로젝트 워크스페이스의 **진행률 차트 페이지**(`progress-chart`)를 구현합니다. - 현재 스프린트 기준으로 4개 섹션을 표시합니다. - ① 상단 통계 3종: 완료 포인트 / 남은 포인트 / 스프린트 진행률(%) - ② 스프린트 진행률: `완료/계획 pt` 프로그레스 바 - ③ 스프린트별 벨로시티: 계획·완료 포인트 막대 차트 - ④ 상태 분포: 태스크 status(완료/진행 중/대기) 건수 도넛 차트 - 데이터는 엔티티에 이미 존재하므로 **UI 표시 + 파생 계산**만 수행합니다. ## 작업 배경 <!-- 왜 이 작업이 필요한지 작성해주세요. --> 피그마 디자인 바탕으로 개발합니다. ## To Do <!-- 완료해야 할 작업을 체크리스트로 작성해주세요. --> - [ ] `sprint` 엔티티: `selectVelocity(sprints)` 셀렉터 추가 (`sprint: name`, `planned: totalPoints`, `completed: completedPoints` 파생) - [ ] `sprint.mock.ts`의 `sprintVelocity` 상수 제거, 공개 API(`index.ts`) 조정 - [ ] `task` 엔티티: 상태별 건수 집계 `countByStatus(tasks)` 셀렉터 추가 및 export - [ ] 대시보드 Velocity 위젯을 `selectVelocity(mockSprints)` 사용으로 교체 (라벨 `Sprint 1`) - [ ] `views/side-project/progress-chart` 뷰 + 하위 표현 컴포넌트 구현 - [ ] 상단 통계 3종 (`ProgressStatRow`, 공용 `StatCard` 재사용) - [ ] 스프린트 진행률 프로그레스 바 (`SprintProgressCard`) - [ ] 벨로시티 막대 차트 (`VelocityChart`, 순수 CSS) - [ ] 상태 분포 도넛 차트 (`StatusDonutChart`, SVG `stroke-dasharray`) - [ ] 라우트 `app/workspaces/[workspaceId]/progress-chart/page.tsx` (RSC, 스프린트 보드 page 패턴) - [ ] 자체 코드 리뷰 (타입 안정성 / 접근성 / 컨벤션) ## 완료 기준 <!-- 이 이슈가 완료되었다고 판단할 수 있는 기준을 작성해주세요. --> - [ ] 사이드바 `진행률 차트` 클릭 시 페이지가 정상 렌더된다(404 해소). - [ ] 상단 통계·진행률 바가 `currentSprint` 포인트에서 파생되어 표시된다. - [ ] 벨로시티 차트가 `mockSprints` 단일 출처에서 파생된 값으로 표시된다(`sprintVelocity` 상수 제거). - [ ] 상태 분포 도넛이 현재 스프린트 태스크의 status 집계로 표시된다. - [ ] 차트 라이브러리 등 신규 의존성을 추가하지 않는다(순수 CSS/SVG). - [ ] 스프린트가 없는 워크스페이스에서 빈 상태를 처리한다. ## 참고 자료 <!-- 디자인, 문서, API 명세, 관련 링크가 있다면 첨부해주세요. --> - Figma: https://www.figma.com/design/MGUbA8bYzUb4WdjSm5KKkq/Syncly?node-id=70-3493 ## 예상 브랜치명 <!-- Type/#issue-number/description 형식으로 작성해주세요. 이슈 생성 후 번호를 반영합니다. --> ```txt feat/#39/side-project-progress-chart ```
Issue
작업 유형
작업 내용
progress-chart)를 구현합니다.완료/계획 pt프로그레스 바작업 배경
피그마 디자인 바탕으로 개발합니다.
To Do
sprint엔티티:selectVelocity(sprints)셀렉터 추가 (sprint: name,planned: totalPoints,completed: completedPoints파생)sprint.mock.ts의sprintVelocity상수 제거, 공개 API(index.ts) 조정task엔티티: 상태별 건수 집계countByStatus(tasks)셀렉터 추가 및 exportselectVelocity(mockSprints)사용으로 교체 (라벨Sprint 1)views/side-project/progress-chart뷰 + 하위 표현 컴포넌트 구현ProgressStatRow, 공용StatCard재사용)SprintProgressCard)VelocityChart, 순수 CSS)StatusDonutChart, SVGstroke-dasharray)app/workspaces/[workspaceId]/progress-chart/page.tsx(RSC, 스프린트 보드 page 패턴)완료 기준
진행률 차트클릭 시 페이지가 정상 렌더된다(404 해소).currentSprint포인트에서 파생되어 표시된다.mockSprints단일 출처에서 파생된 값으로 표시된다(sprintVelocity상수 제거).참고 자료
예상 브랜치명