yapi-next/vendors/server/utils/notice.js
2023-06-27 18:59:45 +08:00

63 lines
1.7 KiB
JavaScript

const yapi = require('../yapi.js');
function arrUnique(arr1, arr2) {
let arr = arr1.concat(arr2);
let res = arr.filter(function(item, index, arr) {
return arr.indexOf(item) === index;
});
return res;
}
const noticeObj = {
mail: {
title: '邮件',
hander: (emails, title, content)=>{
yapi.commons.sendMail({
to: emails,
contents: content,
subject: title
});
}
}
}
yapi.emitHook('addNotice', noticeObj)
yapi.commons.sendNotice = async function(projectId, data) {
const projectModel = require('../models/project.js');
const userModel = require('../models/user.js');
const followModel = require('../models/follow.js');
const followInst = yapi.getInst(followModel);
const userInst = yapi.getInst(userModel);
const projectInst = yapi.getInst(projectModel);
const list = await followInst.listByProjectId(projectId);
const starUsers = list.map(item => item.uid);
const projectList = await projectInst.get(projectId);
const projectMenbers = projectList.members
.filter(item => item.email_notice)
.map(item => item.uid);
const users = arrUnique(projectMenbers, starUsers);
const usersInfo = await userInst.findByUids(users);
const emails = usersInfo.map(item => item.email).join(',');
try {
Object.keys(noticeObj).forEach(key=>{
let noticeItem = noticeObj[key];
try{
noticeItem.hander(emails, data.title, data.content)
}catch(err){
yapi.commons.log('发送' + (noticeItem.title || key) + '失败' + err.message, 'error')
}
})
// yapi.commons.sendMail({
// to: emails,
// contents: data.content,
// subject: data.title
// });
} catch (e) {
yapi.commons.log('发送失败:' + e, 'error');
}
};