refactor: 저장소(Repo)·Gitea 연동 기능 완전 제거 — 프로젝트 단독 구조

복잡도를 줄이기 위해 저장소 연동 기능을 전부 제거하고 프로젝트를 단독 단위로 운영한다.

백엔드:
- modules/repo, modules/gitea 모듈 전체 삭제(엔티티/서비스/컨트롤러/DTO/역방향 동기화)
- app.module 에서 RepoModule 제거
- ProjectService: repoCount 집계·repoRepo·"미분류" 시스템 프로젝트(ensureUnassigned/
  onApplicationBootstrap)·isSystem 게이트 전부 제거. ProjectResponse 에서 repoCount/isSystem 제거
- Project 엔티티 is_system 컬럼 제거(dev synchronize 가 DROP)
- ProjectModule forFeature 에서 Repo 제거
- Activity 타입 repo.linked/unlinked 제거
- env example 에서 Gitea/REPO_IMPORT 섹션 제거

프론트:
- ProjectReposPage, useRepo 삭제. ProjectTabs 의 '저장소' 탭·repoCount prop 제거
- 4개 페이지의 :repo-count 제거, 라우트 /projects/:id/repos 제거
- types/project·project.store·mock 에서 repoCount/isSystem·Repo 뷰 제거
- ProjectListPage 저장소수/시스템 배지·gitea CSS 제거, activity 의 repo.* 케이스 제거
- types/repo 는 공용 ApiMember 만 유지
- 잔여 '저장소'/Gitea 사용자 문구를 프로젝트로 정리

검증: 백엔드 build/lint 0·8 tests, 프론트 type-check/lint/build 0.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-21 01:44:15 +09:00
parent 861c8efa6b
commit ef1757181d
34 changed files with 20 additions and 2369 deletions
+2 -9
View File
@@ -1,13 +1,12 @@
<script setup lang="ts">
// 프로젝트 서브탭 — 업무/멤버/저장소/활동/설정
// 프로젝트 서브탭 — 업무/멤버/활동/설정
import { RouterLink } from 'vue-router'
interface Props {
projectId: string
active: 'tasks' | 'members' | 'repos' | 'activity' | 'settings'
active: 'tasks' | 'members' | 'activity' | 'settings'
taskCount: number
memberCount: number
repoCount: number
/** 설정 탭 노출 여부(관리자만). 기본 false — 권한이 확인된 경우에만 노출 */
canManage?: boolean
}
@@ -28,12 +27,6 @@ defineProps<Props>()
>
<span class="tb-label">멤버</span> <span class="tb-count">{{ memberCount }}</span>
</RouterLink>
<RouterLink
:to="`/projects/${projectId}/repos`"
:class="{ active: active === 'repos' }"
>
<span class="tb-label">저장소</span> <span class="tb-count">{{ repoCount }}</span>
</RouterLink>
<RouterLink
:to="`/projects/${projectId}/activity`"
:class="{ active: active === 'activity' }"