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

178 lines
4.4 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.
// schema扩展相关文档请参阅https://uniapp.dcloud.net.cn/uniCloud/jql-schema-ext.html
const db = uniCloud.database();
module.exports = {
trigger: {
async beforeCreate({
addDataList,
userInfo,
clientInfo
}) {
if(!userInfo.role.includes('admin')){
throw new Error('没有权限操作')
}
/*
if (addDataList.length === 1) {
const [{
from_uid,
to_uid,
message
}] = addDataList
if (userInfo.uid == to_uid) {
throw new Error('不能加自己为好友')
}
let {
data: [has]
} = await db.collection('uni-im-friend').where({
user_id: from_uid,
friend_uid: to_uid
}).get()
console.error(has)
if (has) {
throw new Error('已经是好友')
}
let res = await db.collection('uni-im-friend-invite').where({
from_uid,
to_uid
}).get()
if (res.data.length) {
const dbJQL = uniCloud.databaseForJQL({
clientInfo
})
dbJQL.setUser({
uid: from_uid, // 建议此处使用真实uid
role: ['admin'], // 指定当前执行用户的角色为admin。如果只希望指定为admin身份可以删除uid和permission节点
permission: []
})
await dbJQL.collection('uni-im-friend-invite').where({
from_uid,
to_uid
}).update(addDataList[0])
throw new Error('alreadyExists')
}
} else {
throw new Error('参数错误')
}
*/
},
async afterCreate({
result,
addDataList: [addData]
}) {
//发消息通知 被邀请加好友的用户
// addData._id = result.id
let {
to_uid: user_id,
message
} = addData
await NotifyUsers({
user_id,
message,
doc_id: result.id
})
},
async beforeUpdate({
where,
updateData,
userInfo
}) {
// schema权限已经控制只能由被邀请人操作。或者admin用户操作
},
async afterUpdate({
result,
updateData,
clientInfo,
where
}) {
console.error(result.updated);
if(result.updated === 0){
console.log('没有更新');
return
}
if (updateData.state == 100) { // cancel
let {
data: [friendInviteData]
} = await db.collection('uni-im-friend-invite')
.doc(where._id)
.get()
// console.log(friendInviteData);
const {
from_uid,
to_uid
} = friendInviteData
// 把相关的重复的加好友请求都设置为通过
await db.collection('uni-im-friend-invite')
.where(
db.command.or([
{
"from_uid":to_uid,
"to_uid":from_uid
},
{
to_uid,
from_uid
}
])
)
.update({
state:100
})
const dbJQL = uniCloud.databaseForJQL({
clientInfo
})
dbJQL.setUser({
uid: to_uid, // 建议此处使用真实uid
role: ['admin'], // 指定当前执行用户的角色为admin。如果只希望指定为admin身份可以删除uid和permission节点
permission: []
})
let res = await dbJQL.collection('uni-im-friend').add({
friend_uid: from_uid
})
// console.log(res.data);
}
}
}
}
async function NotifyUsers({
user_id,
message,
doc_id
}) {
console.error('此逻辑已经废除')
throw new Error("次方法已废除")
let title = '好友请求通知',
content = '好友请求通知'
let pushParam = {
user_id,
payload: {
type: "uni-im-notification", // im消息通知比如加好友请求有用户退群等
subType: "uni-im-friend-invite", // 通知子类型(可选)
title: "用户名xxx申请加你为好友", // 标题
content: message || "附加信息xxx", // 描述
createTime: Date.now(), // 创建时间
confirmText: "同意", // 确认按钮的文字(可选)
cancelText: "拒绝", // 取消按钮的文字(可选)
state: false, // 是否已经处理过 false 未处理confirm已确认cancel已拒绝可选
unique: "from_uid", // 去重字段,比如同一个用户重复申请加好友,通知数据始终只显示一条,但是会通知多次(可选)
data: { // 自定义的其他参数(可选)
"_id": doc_id,
"from_uid": "xxx"
}
},
title, // "收到im消息离线时显示的标题",
content, //"离线时显示的内容"
path: false
}
const uniImCo = uniCloud.importObject("uni-im-co")
res = await uniImCo.sendPushMsg(pushParam,clientInfo.appId)
return res
}