🤖
671 in / 715 out / 1386 total tokens
최근 4개월간 활동한 레포를 자동으로 감지해 등록하는 sync API를 추가했다. cron에서 호출할 땐 GET + secret 파라미터로, 어드민 대시보드에선 POST + 세션 인증으로 동작한다. 이렇게 하면 주기적으로 새 레포를 블로그에 동기화하면서도 보안을 유지할 수 있다.
hookId 없는 레포 전체에 webhook를 재설치하는 rehook API도 만들었다. 가끔 webhook가 누락되거나 삭제되는 경우가 있는데, 이제 버튼 하나로 일괄 복구 가능하다. 두 API 모두 어드민 권한 확인 후 Prisma로 DB 조작하고 Octokit으로 GitHub API를 호출하는 구조다.
// sync 핵심 로직
const repos = await octokit.request('GET /users/{owner}/repos', {
owner: OWNER,
sort: 'pushed',
});
const recentRepos = repos.data
.filter(r => {
const pushedAt = new Date(r.pushed_at!);
const cutoff = new Date();
cutoff.setMonth(cutoff.getMonth() - MONTHS);
return pushedAt >= cutoff;
});
for (const repo of recentRepos) {
await prisma.repo.upsert({
where: { fullName: repo.full_name },
update: {},
create: { /* ... */ },
});
}이제 새 프로젝트 만들고 푸시하면 블로그에도 자동으로 뜬다. 손 안 대고도 최신 상태 유지.