Files
hanarang-dashboard/.plans/sprints/SPRINT-007.md
harang-ai b469a1337a 📋 Sprint 006~008 계획 추가
- SPRINT-006: 버그 수정 3건 + JWT 인증 시스템 (초대 코드 가입)
- SPRINT-007: Gitea 연동 + 활동 로그 실시간화
- SPRINT-008: 실시간 전환 + 설정 구현 + 자매 강화 + 스켈레톤 UI
2026-04-04 14:53:42 +09:00

62 lines
2.8 KiB
Markdown

# SPRINT-007: Gitea 연동 + 활동 로그 실시간화
## 목표
프로젝트 데이터를 Gitea 기반으로 전환 + 활동 로그 자동 기록
## 태스크
### TASK-024: Gitea 동기화 API
- GiteaService 강화 (기존 optional 패턴 유지)
- API 엔드포인트:
- `POST /api/admin/gitea/sync` — Gitea org의 전체 repo를 DB에 동기화
- `GET /api/projects` — DB에서 프로젝트 목록 (Gitea 데이터 포함)
- 동기화 로직:
- Gitea API `/api/v1/orgs/hanarang/repos` 호출
- 각 repo → Project 테이블 upsert (giteaId, name, repoUrl, description)
- 마지막 동기화 시간 기록
- 자동 동기화: EventsScheduler에서 5분마다 폴링 (선택)
### TASK-025: Commit/Branch/PR 조회 API
- API 엔드포인트:
- `GET /api/projects/:id/commits` — 최근 커밋 목록 (Gitea API `/repos/:owner/:repo/commits`)
- `GET /api/projects/:id/branches` — 브랜치 목록
- `GET /api/projects/:id/pulls` — PR 목록 (open/closed)
- 응답 포맷: 커밋 해시, 메시지, 작성자, 날짜 / 브랜치명, 최신 커밋 / PR 제목, 상태
- 에러 핸들링: Gitea 연결 실패 시 graceful fallback
### TASK-026: 프로젝트 페이지 FE (Gitea 데이터)
- `/projects` 목록 페이지:
- DB 프로젝트 목록 표시 (이름, 설명, 상태, repo URL)
- 동기화 버튼 (관리자)
- `/projects/[id]` 상세 페이지:
- 탭: Overview / Commits / Branches / PRs
- Commits: 커밋 히스토리 테이블 (해시, 메시지, 작성자, 날짜)
- Branches: 브랜치 카드 목록
- PRs: PR 리스트 (상태 태그: open/merged/closed)
- 디자인: DESIGN-SYSTEM.md v2 준수 (project-detail-design.md 확장)
- 로딩: 스켈레톤 UI
### TASK-027: 활동 로그 자동 기록
- ActivityLog 모델 활용 (기존 테이블 사용)
- 자동 기록 트리거:
- 자매 상태 변경 시 (online ↔ offline)
- Gitea 동기화 시 (새 repo/커밋 감지)
- 관리자 액션 시 (재시작, 하네스 편집, 설정 변경)
- ActivityService에 `logActivity()` 메서드 추가 → 각 서비스에서 호출
- WebSocket으로 실시간 푸시 (`activity:new` 이벤트 활용)
- `/activities` 페이지: 실제 ActivityLog 데이터 표시 (하드코딩 제거)
- 필터/검색/페이지네이션 실제 동작
## 의존성
- Sprint 006 완료 필요 (JWT 인증)
- TASK-024 → TASK-025 (repo가 DB에 있어야 commit 조회 가능)
- TASK-026은 TASK-025 완료 후 연동
- TASK-027은 독립적 (다른 태스크와 병렬 가능)
## 검증 기준
- Gitea 동기화 → DB에 프로젝트 생성 확인
- 커밋/브랜치/PR 조회 정상 동작
- 활동 로그 자동 기록 + WebSocket 실시간 푸시
- /activities 페이지에서 실제 데이터 표시 (필터/페이지네이션 동작)
- npm run build 성공 + 테스트 통과