Files
im-system/uni-im示例/uni_modules/uni-im/uniCloud/database/uni-im-group.schema.ext.js
2023-09-24 17:55:19 +08:00

90 lines
2.8 KiB
JavaScript
Raw Permalink 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.
// schema扩展相关文档请参阅https://uniapp.dcloud.net.cn/uniCloud/jql-schema-ext.html
const db = uniCloud.database();
module.exports = {
trigger: {
async afterCreate({
addDataList,
clientInfo,
result
}){
if(addDataList.length>1){
throw('禁止批量创建')
}
// console.log(result);
let res = await db.collection('uni-im-group').doc(result.id).get()
let data = res.data[0]
// console.log(data)
const dbJQL = uniCloud.databaseForJQL({
clientInfo,
})
// 添加操作权限
dbJQL.setUser({
uid: data.user_id, // 建议此处使用真实uid
role: ['admin'], // 指定当前执行用户的角色为admin。如果只希望指定为admin身份可以删除uid和permission节点
permission: []
})
res = await dbJQL.collection('uni-im-group-member').add({
"group_id":data._id,
"user_id":data.user_id,
"role":['creator','admin']
})
// console.log({res});
},
async beforeCreate({addDataList}){
},
async beforeDelete({where,userInfo,triggerContext}){
if(!triggerContext){
throw new Error('执行删除群失败你的HBuilderX版本过低请使用3.6.16及以上版本')
}
let {data:[groupInfo]} = await db.collection('uni-im-group').doc(where._id).get()
triggerContext.groupInfo = groupInfo
console.log('beforeDelete',where);
let {data:[has]} = await db.collection('uni-im-conversation')
.where({
group_id:where._id,
user_id:userInfo._id
})
.get()
if(!has){
throw new Error('限群创建者操作')
}
},
async afterDelete({where,clientInfo,triggerContext}){
console.log('beforeDelete',where,triggerContext);
const group_id = where._id
// 删除相关会话
let res = await db.collection('uni-im-conversation').where({group_id}).remove()
// 删除相关加群申请数据
res = await db.collection('uni-im-group-join').where({group_id}).remove()
// 通知所有群成员,注意:需要群成员列表清空之前发 要不然就收不到了
let title = "群聊被解散通知",
content = `群聊"${triggerContext.groupInfo.name}"已被解散`,
pushParam = {
payload: {
"type": "uni-im-notification",
"subType": "uni-im-group-cancellation",
"data": {
group_id
},
unique:group_id
},
title, // "收到im消息离线时显示的标题",
content //"离线时显示的内容"
}
const uniImCo = uniCloud.importObject("uni-im-co")
res = await uniImCo.sendMsgToGroup({pushParam,appId:clientInfo.appId})
// console.log(res);
// 删除相关群成员数据(注意:要先发群通知再解散,要不然消息发布出去“无法指定接收消息的人”)
res = await db.collection('uni-im-group-member').where({group_id}).remove()
console.log('beforeDelete',res);
}
}
}