- Phase 1: tkuser에 알림 CRUD, Push/ntfy 발송, 내부 알림 API 추가 - Phase 2: notifyHelper URL을 tkuser-api:3000으로 전환 (system2, tkpurchase, tksafety, system1) - Phase 3: notification-bell.js API 도메인 tkuser로 변경 + 캐시 버스팅 v=4 - Phase 4: system1에서 알림 코드 제거 (routes, controllers, models, utils) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
32 lines
960 B
JavaScript
32 lines
960 B
JavaScript
// utils/ntfySender.js — ntfy HTTP POST 래퍼
|
|
const NTFY_BASE_URL = process.env.NTFY_BASE_URL || 'http://ntfy:80';
|
|
const NTFY_PUBLISH_TOKEN = process.env.NTFY_PUBLISH_TOKEN;
|
|
const TKFB_BASE_URL = process.env.TKFB_BASE_URL || 'https://tkfb.technicalkorea.net';
|
|
|
|
async function sendNtfy(userId, { title, body, url }) {
|
|
if (!NTFY_PUBLISH_TOKEN) return;
|
|
|
|
const topic = `tkfactory-user-${userId}`;
|
|
const headers = {
|
|
'Authorization': `Bearer ${NTFY_PUBLISH_TOKEN}`,
|
|
'Title': title || '',
|
|
'Tags': 'bell',
|
|
};
|
|
if (url) {
|
|
headers['Click'] = url.startsWith('http') ? url : `${TKFB_BASE_URL}${url}`;
|
|
}
|
|
|
|
try {
|
|
const resp = await fetch(`${NTFY_BASE_URL}/${topic}`, {
|
|
method: 'POST',
|
|
headers,
|
|
body: body || '',
|
|
});
|
|
if (!resp.ok) console.warn(`[ntfy] ${userId} 발송 실패: ${resp.status}`);
|
|
} catch (e) {
|
|
console.error(`[ntfy] ${userId} 발송 오류:`, e.message);
|
|
}
|
|
}
|
|
|
|
module.exports = { sendNtfy };
|