const UB = require('@unitybase/ub')
/* global ubs_message_recipient */
ubs_message_recipient.entity.addMethod('insert')
ubs_message_recipient.entity.addMethod('acceptMessage')
ubs_message_recipient.entity.addMethod('acceptAllMessages')
/**
* Hook for backward compatibility.
* When someone custom code trys to insert new recipient into ubs_message_recipient
* this insert will be redirected to ubs_message_acl entity.
*
* !!!Should be deleted after all customers refactor their code!!!!
*
* @param ctx
*/
ubs_message_recipient.insert = function insert (ctx) {
const { messageID, userID, acceptDate } = ctx.mParams.execParams
if (!acceptDate) {
UB.DataStore('ubs_message_acl').run('insert', {
execParams: {
instanceID: messageID,
subjID: userID
},
__skipAclRls: true
})
ctx.preventDefault()
}
}
/**
* Mark message with specified messageID as read by recipient (current logged-in user)
*
* @function acceptMessage
* @memberOf ubs_message_recipient_ns.prototype
* @memberOfModule @unitybase/ubs
* @published
* @param {ubMethodParams} ctx
* @param {number} ctx.mParams.execParams.ID
*/
ubs_message_recipient.acceptMessage = function (ctx) {
const execParams = ctx.mParams.execParams
if (!execParams || !execParams.messageID) {
throw new Error('Invalid value of parameter messageID')
}
ctx.mParams.resultData = UB.DataStore('ubs_message_recipient').run('insert', {
fieldList: ['ID'],
execParams: {
messageID: execParams.messageID,
userID: UB.Session.userID,
acceptDate: new Date()
}
})
}
/**
* Mark all non-expired unread messages for the current logged in user as read
*
* @function acceptAllMessages
* @memberOf ubs_message_recipient_ns.prototype
* @memberOfModule @unitybase/ubs
* @published
*/
ubs_message_recipient.acceptAllMessages = () => {
// query via `ubs_message` to add filter by complete,startDate automatically
const recipientMessageIds = UB.Repository('ubs_message')
.attrs('ID')
.where('expireDate', '>', new Date())
.notExists(UB.Repository('ubs_message_recipient')
.correlation('messageID', 'ID')
.where('userID', '=', UB.Session.userID)
)
.selectAsArrayOfValues()
if (recipientMessageIds.length === 0) {
return
}
for (const ID of recipientMessageIds) {
global.ubs_message_recipient.acceptMessage({
mParams: {
execParams: {
messageID: ID
}
}
})
}
}