first commit

This commit is contained in:
ytc1012
2026-02-04 16:11:55 +08:00
commit 0f3ee050dc
165 changed files with 25795 additions and 0 deletions

View File

@@ -0,0 +1,60 @@
// 云函数入口文件
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
}
}
}