import { createError, getRouterParam } from 'h3' import { requireAdminSession } from '../../../../../utils/admin-auth' import { refreshRecommendedSiteFaviconById } from '../../../../../utils/recommended-site-favicon' /** * 추천 사이트 파비콘 수동 갱신 API * @param {import('h3').H3Event} event - 요청 이벤트 * @returns {Promise<{ cachedFaviconUrl: string, faviconCachedAt: string }>} 갱신 결과 */ export default defineEventHandler(async (event) => { requireAdminSession(event) const itemId = String(getRouterParam(event, 'id') || '').trim() if (!itemId) { throw createError({ statusCode: 400, message: '네비게이션 항목 ID가 필요합니다.' }) } try { return await refreshRecommendedSiteFaviconById(itemId) } catch (err) { const msg = err?.message != null ? String(err.message) : '파비콘을 갱신하지 못했습니다.' if ( msg.includes('cached_favicon_url') || msg.includes('favicon_cached_at') || String(err?.code || '') === '42703' ) { throw createError({ statusCode: 503, message: 'DB에 추천 사이트 파비콘 캐시 컬럼이 없습니다. npm run db:migrate:dev 로 최신 마이그레이션을 적용한 뒤 다시 시도하세요.' }) } throw createError({ statusCode: 400, message: msg }) } })