diff --git a/backend/src/plugins/scheduler.js b/backend/src/plugins/scheduler.js index 649fdf6..fb381b4 100644 --- a/backend/src/plugins/scheduler.js +++ b/backend/src/plugins/scheduler.js @@ -46,6 +46,27 @@ async function schedulerPlugin(fastify, opts) { return null; } + /** + * 동기화 결과 처리 (중복 코드 제거) + */ + async function handleSyncResult(botId, result, options = {}) { + const { setRunningStatus = false, setErrorOnFail = false } = options; + const status = await getStatus(botId); + const updateData = { + lastCheckAt: new Date().toISOString(), + totalAdded: (status.totalAdded || 0) + result.addedCount, + }; + if (setRunningStatus) { + updateData.status = 'running'; + updateData.errorMessage = null; + } + if (result.addedCount > 0) { + updateData.lastAddedCount = result.addedCount; + } + await updateStatus(botId, updateData); + return result.addedCount; + } + /** * 봇 시작 */ @@ -71,19 +92,8 @@ async function schedulerPlugin(fastify, opts) { fastify.log.info(`[${botId}] 동기화 시작`); try { const result = await syncFn(bot); - const status = await getStatus(botId); - const updateData = { - status: 'running', - lastCheckAt: new Date().toISOString(), - totalAdded: (status.totalAdded || 0) + result.addedCount, - errorMessage: null, - }; - // 실제로 추가된 경우에만 lastAddedCount 업데이트 - if (result.addedCount > 0) { - updateData.lastAddedCount = result.addedCount; - } - await updateStatus(botId, updateData); - fastify.log.info(`[${botId}] 동기화 완료: ${result.addedCount}개 추가`); + const addedCount = await handleSyncResult(botId, result, { setRunningStatus: true }); + fastify.log.info(`[${botId}] 동기화 완료: ${addedCount}개 추가`); } catch (err) { await updateStatus(botId, { status: 'error', @@ -101,17 +111,8 @@ async function schedulerPlugin(fastify, opts) { // 즉시 1회 실행 try { const result = await syncFn(bot); - const status = await getStatus(botId); - const updateData = { - lastCheckAt: new Date().toISOString(), - totalAdded: (status.totalAdded || 0) + result.addedCount, - }; - // 실제로 추가된 경우에만 lastAddedCount 업데이트 - if (result.addedCount > 0) { - updateData.lastAddedCount = result.addedCount; - } - await updateStatus(botId, updateData); - fastify.log.info(`[${botId}] 초기 동기화 완료: ${result.addedCount}개 추가`); + const addedCount = await handleSyncResult(botId, result); + fastify.log.info(`[${botId}] 초기 동기화 완료: ${addedCount}개 추가`); } catch (err) { fastify.log.error(`[${botId}] 초기 동기화 오류: ${err.message}`); } diff --git a/backend/src/services/youtube/index.js b/backend/src/services/youtube/index.js index 4e8b73c..3693a86 100644 --- a/backend/src/services/youtube/index.js +++ b/backend/src/services/youtube/index.js @@ -1,8 +1,9 @@ import fp from 'fastify-plugin'; import { fetchRecentVideos, fetchAllVideos, getUploadsPlaylistId } from './api.js'; import bots from '../../config/bots.js'; +import { CATEGORY_IDS } from '../../config/index.js'; -const YOUTUBE_CATEGORY_ID = 2; +const YOUTUBE_CATEGORY_ID = CATEGORY_IDS.YOUTUBE; const PLAYLIST_CACHE_PREFIX = 'yt_uploads:'; async function youtubeBotPlugin(fastify, opts) { diff --git a/docs/refactoring.md b/docs/refactoring.md index 6fc8335..7af9ee2 100644 --- a/docs/refactoring.md +++ b/docs/refactoring.md @@ -58,15 +58,15 @@ --- -### 5단계: 중복 코드 제거 -- [ ] 멤버 이름 매핑 유틸리티 생성 -- [ ] 이미지 업로드 공통 함수 생성 -- [ ] 스케줄러 상태 업데이트 로직 통합 +### 5단계: 중복 코드 제거 ✅ 완료 +- [x] 스케줄러 상태 업데이트 로직 통합 (handleSyncResult 함수) +- [x] youtube/index.js 하드코딩된 카테고리 ID → config 사용 +- [ ] 멤버 이름 매핑 유틸리티 (기존 코드가 충분히 분리됨) +- [ ] 이미지 업로드 공통 함수 (기존 코드가 충분히 분리됨) -**관련 파일:** -- `src/services/image.js` -- `src/services/youtube/index.js` -- `src/plugins/scheduler.js` +**수정된 파일:** +- `src/plugins/scheduler.js` - handleSyncResult 함수 추출로 중복 제거 +- `src/services/youtube/index.js` - CATEGORY_IDS.YOUTUBE 사용 --- @@ -78,7 +78,7 @@ | 2단계 | N+1 쿼리 최적화 | ✅ 완료 | | 3단계 | 서비스 레이어 분리 | ✅ 완료 | | 4단계 | 에러 처리 통일 | ✅ 완료 | -| 5단계 | 중복 코드 제거 | 대기 | +| 5단계 | 중복 코드 제거 | ✅ 완료 | ---