60 lines
2.0 KiB
TypeScript
60 lines
2.0 KiB
TypeScript
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')
|
|
}
|
|
}
|
|
})
|