// 云函数:同步纪念日数据到云端 const cloud = require('wx-server-sdk') cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }) const db = cloud.database() exports.main = async (event, context) => { const wxContext = cloud.getWXContext() const openid = wxContext.OPENID const { action, data } = event try { switch (action) { case 'add': // 添加纪念日 return await addAnniversary(openid, data) case 'update': // 更新纪念日 return await updateAnniversary(openid, data) case 'delete': // 删除纪念日 return await deleteAnniversary(openid, data.id) case 'sync': // 批量同步 return await syncAnniversaries(openid, data) case 'get': // 获取用户所有纪念日 return await getAnniversaries(openid) default: return { success: false, error: '未知操作' } } } catch (err) { console.error('操作失败:', err) return { success: false, error: err.message } } } /** * 添加纪念日 */ async function addAnniversary(openid, anniversary) { const res = await db.collection('anniversaries').add({ data: { ...anniversary, openid, createTime: db.serverDate(), updateTime: db.serverDate() } }) return { success: true, id: res._id } } /** * 更新纪念日 */ async function updateAnniversary(openid, anniversary) { const { id, ...updateData } = anniversary await db.collection('anniversaries') .where({ _id: id, openid }) .update({ data: { ...updateData, updateTime: db.serverDate() } }) return { success: true } } /** * 删除纪念日 */ async function deleteAnniversary(openid, id) { await db.collection('anniversaries') .where({ _id: id, openid }) .remove() return { success: true } } /** * 批量同步纪念日 */ async function syncAnniversaries(openid, anniversaries) { // 先删除用户的所有纪念日 await db.collection('anniversaries') .where({ openid }) .remove() // 批量添加 const tasks = anniversaries.map(anniversary => { return db.collection('anniversaries').add({ data: { ...anniversary, openid, createTime: db.serverDate(), updateTime: db.serverDate() } }) }) await Promise.all(tasks) return { success: true, count: anniversaries.length } } /** * 获取用户所有纪念日 */ async function getAnniversaries(openid) { const res = await db.collection('anniversaries') .where({ openid }) .get() return { success: true, data: res.data } }