feat: 프론트엔드 프로젝트 우선 구조 재구성 (Phase 2-a)

- 데이터 계층 신설: types/project·useProject·project.store (프로젝트 CRUD·페이지네이션)
- useTask/useMember/useActivity 경로를 /projects/:projectId/... 로 전환
- task·my-task·activity 타입/스토어 repoId/repoName → projectId/projectName
- 알림 store 라우팅·문구 프로젝트화, 활동 타입 repo.linked/unlinked·project.* 반영
- 라우팅 /projects/... 전면 교체, / → /projects 리다이렉트
- 페이지 rename Repo*→Project* (List/Create/Detail/Settings/Members/Activity)
- ProjectCreatePage: Gitea 저장소 폼 → 단순 프로젝트 생성 폼으로 재작성
- RepoHeader→ProjectHeader, RepoTabs→ProjectTabs, AppShell 네비 프로젝트화
- 죽은 파일 삭제: repo.store·useRepo·GiteaRepoBar

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-20 19:37:51 +09:00
parent 6ba148314c
commit 7cd6676ef9
35 changed files with 886 additions and 1709 deletions
+31 -5
View File
@@ -71,6 +71,32 @@ export interface Repo {
isOwner?: boolean
}
/** 프로젝트 — 작업의 기본 단위(우선). 저장소는 프로젝트에 0~N개 연동된다. */
export interface Project {
/** 라우팅 식별자(UUID) */
id: string
name: string
desc: string
visibility: Visibility
/** "미분류" 시스템 프로젝트 */
isSystem: boolean
members: User[]
/** 멤버 스택 초과분(+N) */
moreCount: number
updatedAgo: string
/** 연동 저장소 수 */
repoCount: number
doneCount: number
totalCount: number
progressPct: number
progressLevel: 'done' | 'mid' | 'low'
progressLabel: string
/** admin 여부 — 단건 조회에서만 채워짐 */
canManage?: boolean
/** 소유자 여부 — 프로젝트 삭제 권한 */
isOwner?: boolean
}
/** 저장소 상세의 업무 목록 행 */
export interface RepoTask {
id: number
@@ -127,8 +153,8 @@ export interface Activity {
/** 업무 상세 */
export interface TaskDetail {
id: number
repoId: string
repoName: string
projectId: string
projectName: string
title: string
status: TaskStatus
statusLabel: string
@@ -161,9 +187,9 @@ export interface MyTaskRow {
id: number
title: string
status: TaskStatus
repoName: string
/** 라우팅용 저장소 식별자(slug) */
repoId?: string
projectName: string
/** 라우팅용 프로젝트 식별자 */
projectId?: string
/** 담당자 미니 아바타(지시 뷰) */
assignees?: User[]
/** 보조 텍스트(예: "지시 · 한승우", "정민호", "박지훈님이 2시간 전 승인 요청") */