first commit
This commit is contained in:
80
cloudfunctions/removeMember/index.js
Normal file
80
cloudfunctions/removeMember/index.js
Normal file
@@ -0,0 +1,80 @@
|
||||
// 云函数入口文件
|
||||
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, memberOpenid } = event
|
||||
|
||||
if (!roomId) {
|
||||
return { success: false, msg: '缺少 roomId' }
|
||||
}
|
||||
|
||||
try {
|
||||
const roomRef = db.collection('rooms').doc(roomId)
|
||||
const room = await roomRef.get()
|
||||
|
||||
if (!room.data) {
|
||||
return { success: false, msg: '房间不存在' }
|
||||
}
|
||||
|
||||
const roomData = room.data
|
||||
const members = roomData.members || []
|
||||
|
||||
// 确定要移除的成员
|
||||
const targetOpenid = memberOpenid || openid // 如果没有指定,默认移除自己
|
||||
|
||||
// 检查是否在房间内
|
||||
const memberIndex = members.findIndex(m => m.openid === targetOpenid)
|
||||
if (memberIndex === -1) {
|
||||
return { success: false, msg: '该成员不在房间内' }
|
||||
}
|
||||
|
||||
// 权限检查:只有创建者可以移除其他人,任何人都可以退出自己
|
||||
if (targetOpenid !== openid && roomData._openid !== openid) {
|
||||
return { success: false, msg: '只有创建者可以移除其他成员' }
|
||||
}
|
||||
|
||||
// 检查是否是创建者试图退出
|
||||
if (targetOpenid === roomData._openid) {
|
||||
return { success: false, msg: '创建者不能退出,请删除聚会' }
|
||||
}
|
||||
|
||||
// 移除成员
|
||||
const updatedMembers = members.filter(m => m.openid !== targetOpenid)
|
||||
|
||||
await roomRef.update({
|
||||
data: {
|
||||
members: _.set(updatedMembers)
|
||||
}
|
||||
})
|
||||
|
||||
// 如果房间已有计算结果,清除结果(因为成员变化了)
|
||||
if (roomData.status === 'calculated') {
|
||||
await roomRef.update({
|
||||
data: {
|
||||
status: _.set('active'),
|
||||
lastCalculatedMembers: _.set('') // 清除成员快照
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
return {
|
||||
success: true,
|
||||
msg: targetOpenid === openid ? '已退出聚会' : '已移除成员'
|
||||
}
|
||||
|
||||
} catch (err) {
|
||||
console.error('RemoveMember Error:', err)
|
||||
return {
|
||||
success: false,
|
||||
msg: '操作失败',
|
||||
error: err.message || err.toString()
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user