Files
WoMenQuNaJu/cloudfunctions/updateLocation/index.js
2026-02-04 16:11:55 +08:00

61 lines
1.8 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV })
const db = cloud.database()
const _ = db.command
exports.main = async (event, context) => {
const wxContext = cloud.getWXContext()
const openid = wxContext.OPENID
const { roomId, location } = event
// location format: { lng: 116.1, lat: 39.1, address: "...", name: "..." }
if (!roomId || !location) {
return { success: false, msg: '缺少参数' }
}
try {
// 2026-02-02 Fix: 使用 Read-Modify-Write 模式避免复杂更新操作符报错
// 先读取房间数据
const roomRes = await db.collection('rooms').doc(roomId).get()
const roomData = roomRes.data
if (!roomData) {
return { success: false, msg: '房间不存在' }
}
const members = roomData.members || []
const memberIndex = members.findIndex(m => m.openid === openid)
if (memberIndex === -1) {
return { success: false, msg: '您尚未加入该房间' }
}
// 直接修改内存中的数组对象
members[memberIndex].location = location
// 2026-02-02 Fix: 使用 _.set 强制覆写 members 字段,解决 DuplicateWrite 索引冲突问题
// 这通常是因为数据结构不一致或底层索引冲突导致的set 指令会完全替换字段值
await db.collection('rooms').doc(roomId).update({
data: {
members: _.set(members)
}
})
return {
success: true,
msg: '位置更新成功'
}
} catch (err) {
console.error(err)
return {
success: false,
msg: '位置更新失败',
error: err
}
}
}