/* global ubs_message */
const UB = require('@unitybase/ub')
const Session = UB.Session
ubs_message.entity.addMethod('getCached')
ubs_message.entity.addMethod('selectAll')
ubs_message.on('select:before', addUserFilters)
/**
* If something changes in ubs_messages from a last call - return a messages.
*
* @function getCached
* @memberOf ubs_message_ns.prototype
* @memberOfModule @unitybase/ubs
* @published
* @param {ubMethodParams} ctx
* @returns {boolean}
*/
ubs_message.getCached = function (ctx) {
if (ctx.mParams.version) {
const expr = 'SELECT MAX(mi_modifyDate) AS "last_number" FROM ubs_message'
const store = UB.DataStore('ubs_message')
store.runSQL(expr, {})
const versionFromDb = store.get('last_number')
store.freeNative()
const version = new Date(versionFromDb).getTime()
const notModified = version === Number(ctx.mParams.version)
ctx.mParams.version = version
if (notModified) {
ctx.mParams.resultData = { notModified: true }
return true
}
}
ctx.dataStore.run('select', ctx.mParams)
}
/**
* Select all ubs_messages (ubs_messages.select returns incomplete messages for current user)
*
* @function selectAll
* @memberOf ubs_message_ns.prototype
* @memberOfModule @unitybase/ubs
* @published
* @param {ubMethodParams} ctx
* @returns {boolean}
*/
ubs_message.selectAll = function (ctx) {
ctx.mParams.__selectAll = true
ctx.dataStore.run('select', ctx.mParams)
}
/**
* Filter only complete(ready for send) up-to-date messages for logged in user
*
* @private
* @param {ubMethodParams} ctx
* @returns {boolean}
*/
function addUserFilters (ctx) {
const nm = Date.now()
const mParams = ctx.mParams
if (App.els('ubs_message', 'insert')) {
if (mParams.__selectAll || mParams.ID) {
// user can insert messages so can potentially read all and read one message by ID
// usually - SysOps role
return true
}
}
if (!mParams.whereList) {
mParams.whereList = {}
}
mParams.whereList['user' + nm] = {
expression: '[recipients.userID]',
condition: 'equal',
value: Session.userID
}
mParams.whereList['complete' + nm] = {
expression: '[complete]',
condition: 'equal',
value: 1
}
mParams.whereList['startDate' + nm] = {
expression: '[startDate]',
condition: 'less',
value: new Date()
}
return true
}