import { query } from '../../../utils/db' import { requireAuth } from '../../../utils/session' /** * 전체 VCS 동기화 상태 조회 (관리자용) * GET /api/admin/vcs/status */ export default defineEventHandler(async (event) => { await requireAuth(event) // 저장소별 동기화 상태 const repos = await query(` SELECT r.repo_id, r.repo_name, r.repo_path, r.last_sync_at, r.last_sync_status, r.last_sync_message, s.server_type, s.server_name, p.project_name, (SELECT COUNT(*) FROM wr_commit_log c WHERE c.repo_id = r.repo_id) as commit_count FROM wr_repository r JOIN wr_vcs_server s ON r.server_id = s.server_id LEFT JOIN wr_project_info p ON r.project_id = p.project_id WHERE r.is_active = true ORDER BY r.last_sync_at DESC NULLS LAST `) // 전체 통계 const stats = await query(` SELECT COUNT(DISTINCT r.repo_id) as total_repos, COUNT(DISTINCT CASE WHEN r.last_sync_status = 'SUCCESS' THEN r.repo_id END) as success_repos, COUNT(DISTINCT CASE WHEN r.last_sync_status = 'FAILED' THEN r.repo_id END) as failed_repos, COUNT(DISTINCT CASE WHEN r.last_sync_at IS NULL THEN r.repo_id END) as never_synced, (SELECT COUNT(*) FROM wr_commit_log) as total_commits FROM wr_repository r WHERE r.is_active = true `) return { repositories: repos.map(r => ({ repoId: r.repo_id, repoName: r.repo_name, repoPath: r.repo_path, serverType: r.server_type, serverName: r.server_name, projectName: r.project_name, lastSyncAt: r.last_sync_at, lastSyncStatus: r.last_sync_status, lastSyncMessage: r.last_sync_message, commitCount: parseInt(r.commit_count || '0') })), stats: { totalRepos: parseInt(stats[0]?.total_repos || '0'), successRepos: parseInt(stats[0]?.success_repos || '0'), failedRepos: parseInt(stats[0]?.failed_repos || '0'), neverSynced: parseInt(stats[0]?.never_synced || '0'), totalCommits: parseInt(stats[0]?.total_commits || '0') } } })