2026-07-27 11:28:33 +08:00

179 lines
4.3 KiB
JavaScript

const { generateRandomString } = require('../../common');
let db = null;
let welcomeDB = null;
exports.main = async (content, DB) => {
db = DB;
welcomeDB = db.collection("welcome-words");
switch (content.type) {
case "getWelcomeList":
return await exports.getList(content);
case "getWelcome":
return await exports.getWords(content);
case "updateWelcome":
return await exports.update(content);
case "removeWelcome":
return await exports.deleteData(content);
}
};
function log(fn, err) {
console.log(`invoke ${fn} fail: `, err);
}
exports.getWords = async (context) => {
const { id: _id, corpId } = context;
try {
const words = await welcomeDB.findOne({ _id, corpId, disabled: false });
if (words) {
return {
success: true,
message: "获取欢迎语成功",
data: words,
};
}
return {
success: false,
message: "获取欢迎语失败",
};
} catch (e) {
log("getWords", e);
return {
success: false,
message: "获取欢迎语失败",
};
}
};
exports.getList = async (context) => {
const { pageSize = 10, page = 1, corpId = "" } = context;
try {
const query = { disabled: false, corpId };
const total = await welcomeDB.countDocuments(query);
const pages = Math.ceil(total / pageSize);
const list = await welcomeDB
.find(query)
.sort({ createTime: -1 })
.skip((page - 1) * pageSize)
.limit(pageSize)
.toArray();
return {
success: true,
message: "获取成功",
list,
total,
pages,
};
} catch (e) {
log("getList", e);
return {
success: false,
message: "获取欢迎语列表数据失败",
};
}
};
exports.update = async (context) => {
const { _id, content = "", memberList = [], files = [], corpId } = context;
try {
const data = { content, memberList, files, corpId };
const repeatRes = await ifMemberRepeat(data.memberList, _id);
if (repeatRes.repeat) {
return {
success: true,
code: "REPEATMEMBER",
members: repeatRes.members,
};
}
const res = await (_id ? updateWords(_id, data) : addWords(data));
return res;
} catch (e) {
log("update", e);
return { success: false, message: `${_id ? "更新" : "新增"}欢迎语失败` };
}
};
async function addWords(data) {
const createTime = new Date().getTime();
try {
const _id = generateRandomString(24);
await welcomeDB.insertOne({ ...data, _id, createTime, disabled: false });
return {
success: true,
message: "欢迎语新增成功",
id: _id,
};
} catch (e) {
return {
success: false,
message: "新增欢迎语失败",
};
}
}
async function ifMemberRepeat(memberList, _id) {
const query = { memberList: { $in: memberList } };
if (_id) query._id = { $ne: _id };
const data = await welcomeDB.find(query).toArray();
const members = Array.isArray(data)
? data.reduce((val, item) => {
const userIds = Array.isArray(item.memberList)
? item.memberList.filter(
(userId) =>
memberList.some((i) => i == userId) &&
!val.some((i) => i == userId)
)
: [];
return [...val, ...userIds];
}, [])
: [];
return { repeat: members.length > 0, members };
}
async function updateWords(_id, data) {
const updateTime = new Date().getTime();
try {
const words = await welcomeDB.findOne({ _id, corpId: data.corpId, disabled: false });
if (words) {
await welcomeDB.updateOne({ _id }, { $set: { ...data, updateTime } });
return {
success: true,
message: "欢迎语更新成功",
};
} else {
return {
success: false,
message: "欢迎语不存在",
};
}
} catch (e) {
log("updateWords", e);
return {
success: false,
message: e,
};
}
}
exports.deleteData = async (event) => {
try {
const updateTime = new Date().getTime();
await welcomeDB.updateOne(
{ _id: event.id },
{ $set: { disabled: true, updateTime, deleteBy: event.operator } }
);
return {
success: true,
message: "删除欢迎语成功",
};
} catch (error) {
log("deleteData", error);
return {
success: false,
message: "删除欢迎语失败",
};
}
};