본인 수신자 추가/제거는 모든 인증 사용자 허용, 타인 수신자 관리는 관리자만 허용하도록 변경 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
98 lines
3.7 KiB
JavaScript
98 lines
3.7 KiB
JavaScript
// controllers/notificationRecipientController.js
|
|
const notificationRecipientModel = require('../models/notificationRecipientModel');
|
|
|
|
const notificationRecipientController = {
|
|
// 알림 유형 목록
|
|
getTypes: async (req, res) => {
|
|
try {
|
|
const types = notificationRecipientModel.getTypes();
|
|
res.json({ success: true, data: types });
|
|
} catch (error) {
|
|
console.error('알림 유형 조회 오류:', error);
|
|
res.status(500).json({ success: false, error: '알림 유형 조회 실패' });
|
|
}
|
|
},
|
|
|
|
// 전체 수신자 목록 (유형별 그룹화)
|
|
getAll: async (req, res) => {
|
|
try {
|
|
const recipients = await notificationRecipientModel.getAll();
|
|
res.json({ success: true, data: recipients });
|
|
} catch (error) {
|
|
console.error(' 수신자 목록 조회 오류:', error.message);
|
|
console.error(' 스택:', error.stack);
|
|
res.status(500).json({ success: false, error: '수신자 목록 조회 실패', detail: error.message });
|
|
}
|
|
},
|
|
|
|
// 유형별 수신자 조회
|
|
getByType: async (req, res) => {
|
|
try {
|
|
const { type } = req.params;
|
|
const recipients = await notificationRecipientModel.getByType(type);
|
|
res.json({ success: true, data: recipients });
|
|
} catch (error) {
|
|
console.error('수신자 조회 오류:', error);
|
|
res.status(500).json({ success: false, error: '수신자 조회 실패' });
|
|
}
|
|
},
|
|
|
|
// 수신자 추가 (본인: 모든 사용자, 타인: 관리자만)
|
|
add: async (req, res) => {
|
|
try {
|
|
const { notification_type, user_id } = req.body;
|
|
|
|
if (!notification_type || !user_id) {
|
|
return res.status(400).json({ success: false, error: '알림 유형과 사용자 ID가 필요합니다.' });
|
|
}
|
|
|
|
if (Number(user_id) !== Number(req.user.user_id) && !['admin', 'system'].includes((req.user.role || '').toLowerCase())) {
|
|
return res.status(403).json({ success: false, error: '본인의 알림 수신 설정만 변경할 수 있습니다.' });
|
|
}
|
|
|
|
await notificationRecipientModel.add(notification_type, user_id, req.user?.user_id);
|
|
res.json({ success: true, message: '수신자가 추가되었습니다.' });
|
|
} catch (error) {
|
|
console.error('수신자 추가 오류:', error);
|
|
res.status(500).json({ success: false, error: '수신자 추가 실패' });
|
|
}
|
|
},
|
|
|
|
// 수신자 제거 (본인: 모든 사용자, 타인: 관리자만)
|
|
remove: async (req, res) => {
|
|
try {
|
|
const { type, userId } = req.params;
|
|
|
|
if (Number(userId) !== Number(req.user.user_id) && !['admin', 'system'].includes((req.user.role || '').toLowerCase())) {
|
|
return res.status(403).json({ success: false, error: '본인의 알림 수신 설정만 변경할 수 있습니다.' });
|
|
}
|
|
|
|
await notificationRecipientModel.remove(type, userId);
|
|
res.json({ success: true, message: '수신자가 제거되었습니다.' });
|
|
} catch (error) {
|
|
console.error('수신자 제거 오류:', error);
|
|
res.status(500).json({ success: false, error: '수신자 제거 실패' });
|
|
}
|
|
},
|
|
|
|
// 유형별 수신자 일괄 설정
|
|
setRecipients: async (req, res) => {
|
|
try {
|
|
const { type } = req.params;
|
|
const { user_ids } = req.body;
|
|
|
|
if (!Array.isArray(user_ids)) {
|
|
return res.status(400).json({ success: false, error: 'user_ids 배열이 필요합니다.' });
|
|
}
|
|
|
|
await notificationRecipientModel.setRecipients(type, user_ids, req.user?.user_id);
|
|
res.json({ success: true, message: '수신자가 설정되었습니다.' });
|
|
} catch (error) {
|
|
console.error('수신자 설정 오류:', error);
|
|
res.status(500).json({ success: false, error: '수신자 설정 실패' });
|
|
}
|
|
}
|
|
};
|
|
|
|
module.exports = notificationRecipientController;
|