64 lines
1.7 KiB
TypeScript
64 lines
1.7 KiB
TypeScript
import { query } from '../../../utils/db'
|
|
import { requireAuth } from '../../../utils/session'
|
|
import { syncGitRepository } from '../../../utils/git-sync'
|
|
import { syncSvnRepository } from '../../../utils/svn-sync'
|
|
|
|
/**
|
|
* 전체 VCS 저장소 동기화 (관리자용)
|
|
* POST /api/admin/vcs/sync-all
|
|
*/
|
|
export default defineEventHandler(async (event) => {
|
|
await requireAuth(event)
|
|
|
|
// 모든 활성 저장소 조회
|
|
const repos = await query(`
|
|
SELECT r.repo_id, r.repo_name, s.server_type
|
|
FROM wr_repository r
|
|
JOIN wr_vcs_server s ON r.server_id = s.server_id
|
|
WHERE r.is_active = true AND s.is_active = true
|
|
ORDER BY r.repo_name
|
|
`)
|
|
|
|
const results: any[] = []
|
|
|
|
for (const repo of repos) {
|
|
try {
|
|
let result
|
|
if (repo.server_type === 'GIT') {
|
|
result = await syncGitRepository(repo.repo_id)
|
|
} else if (repo.server_type === 'SVN') {
|
|
result = await syncSvnRepository(repo.repo_id)
|
|
} else {
|
|
result = { success: false, message: '지원하지 않는 서버 타입' }
|
|
}
|
|
|
|
results.push({
|
|
repoId: repo.repo_id,
|
|
repoName: repo.repo_name,
|
|
serverType: repo.server_type,
|
|
...result
|
|
})
|
|
} catch (e: any) {
|
|
results.push({
|
|
repoId: repo.repo_id,
|
|
repoName: repo.repo_name,
|
|
serverType: repo.server_type,
|
|
success: false,
|
|
message: e.message
|
|
})
|
|
}
|
|
}
|
|
|
|
const successCount = results.filter(r => r.success).length
|
|
const failCount = results.filter(r => !r.success).length
|
|
|
|
return {
|
|
success: failCount === 0,
|
|
message: `동기화 완료: 성공 ${successCount}개, 실패 ${failCount}개`,
|
|
totalRepos: repos.length,
|
|
successCount,
|
|
failCount,
|
|
results
|
|
}
|
|
})
|