New findMessages() filters
This commit is contained in:
parent
eeaf3b569a
commit
c695c1f4c5
|
@ -236,16 +236,18 @@ module.exports = class Message {
|
||||||
|
|
||||||
filter.uuids - use with resultType='id'
|
filter.uuids - use with resultType='id'
|
||||||
filter.ids - use with resultType='uuid'
|
filter.ids - use with resultType='uuid'
|
||||||
filter.toUserName
|
filter.toUserName - string|Array(string)
|
||||||
filter.fromUserName
|
filter.fromUserName - string|Array(string)
|
||||||
filter.replyToMessageId
|
filter.replyToMessageId
|
||||||
|
|
||||||
|
filter.operator = (AND)|OR
|
||||||
|
|
||||||
filter.newerThanTimestamp - may not be used with |date|
|
filter.newerThanTimestamp - may not be used with |date|
|
||||||
filter.date - moment object - may not be used with |newerThanTimestamp|
|
filter.date - moment object - may not be used with |newerThanTimestamp|
|
||||||
|
|
||||||
filter.newerThanMessageId
|
filter.newerThanMessageId
|
||||||
filter.areaTag - note if you want by conf, send in all areas for a conf
|
filter.areaTag - note if you want by conf, send in all areas for a conf
|
||||||
*filter.metaTuples - {category, name, value}
|
filter.metaTuples - [ {category, name, value} ]
|
||||||
|
|
||||||
filter.terms - FTS search
|
filter.terms - FTS search
|
||||||
|
|
||||||
|
@ -267,6 +269,7 @@ module.exports = class Message {
|
||||||
|
|
||||||
filter.resultType = filter.resultType || 'id';
|
filter.resultType = filter.resultType || 'id';
|
||||||
filter.extraFields = filter.extraFields || [];
|
filter.extraFields = filter.extraFields || [];
|
||||||
|
filter.operator = filter.operator || 'AND';
|
||||||
|
|
||||||
if('messageList' === filter.resultType) {
|
if('messageList' === filter.resultType) {
|
||||||
filter.extraFields = _.uniq(filter.extraFields.concat(
|
filter.extraFields = _.uniq(filter.extraFields.concat(
|
||||||
|
@ -296,9 +299,9 @@ module.exports = class Message {
|
||||||
let sqlOrderBy;
|
let sqlOrderBy;
|
||||||
let sqlWhere = '';
|
let sqlWhere = '';
|
||||||
|
|
||||||
function appendWhereClause(clause) {
|
function appendWhereClause(clause, op) {
|
||||||
if(sqlWhere) {
|
if(sqlWhere) {
|
||||||
sqlWhere += ' AND ';
|
sqlWhere += ` ${op || filter.operator} `;
|
||||||
} else {
|
} else {
|
||||||
sqlWhere += ' WHERE ';
|
sqlWhere += ' WHERE ';
|
||||||
}
|
}
|
||||||
|
@ -345,7 +348,7 @@ module.exports = class Message {
|
||||||
}
|
}
|
||||||
|
|
||||||
// explicit exclude of Private
|
// explicit exclude of Private
|
||||||
appendWhereClause(`m.area_tag != "${Message.WellKnownAreaTags.Private}"`);
|
appendWhereClause(`m.area_tag != "${Message.WellKnownAreaTags.Private}"`, 'AND');
|
||||||
}
|
}
|
||||||
|
|
||||||
if(_.isNumber(filter.replyToMessageId)) {
|
if(_.isNumber(filter.replyToMessageId)) {
|
||||||
|
@ -353,8 +356,18 @@ module.exports = class Message {
|
||||||
}
|
}
|
||||||
|
|
||||||
[ 'toUserName', 'fromUserName' ].forEach(field => {
|
[ 'toUserName', 'fromUserName' ].forEach(field => {
|
||||||
if(_.isString(filter[field]) && filter[field].length > 0) {
|
let val = filter[field];
|
||||||
appendWhereClause(`m.${_.snakeCase(field)} LIKE "${sanitizeString(filter[field])}"`);
|
if(!val) {
|
||||||
|
return; // next item
|
||||||
|
}
|
||||||
|
if(_.isString(val)) {
|
||||||
|
val = [ val ];
|
||||||
|
}
|
||||||
|
if(Array.isArray(val)) {
|
||||||
|
val = '(' + val.map(v => {
|
||||||
|
return `m.${_.snakeCase(field)} LIKE "${sanitizeString(v)}"`;
|
||||||
|
}).join(' OR ') + ')';
|
||||||
|
appendWhereClause(val);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -380,6 +393,21 @@ module.exports = class Message {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(Array.isArray(filter.metaTuples)) {
|
||||||
|
let sub = [];
|
||||||
|
filter.metaTuples.forEach(mt => {
|
||||||
|
sub.push(`(meta_category = "${mt.category}" AND meta_name = "${mt.name}" AND meta_value = "${sanitizeString(mt.value)}")`);
|
||||||
|
});
|
||||||
|
sub = sub.join(` ${filter.operator} `);
|
||||||
|
appendWhereClause(
|
||||||
|
`m.message_id IN (
|
||||||
|
SELECT message_id
|
||||||
|
FROM message_meta
|
||||||
|
WHERE ${sub}
|
||||||
|
)`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
sql += `${sqlWhere} ${sqlOrderBy}`;
|
sql += `${sqlWhere} ${sqlOrderBy}`;
|
||||||
|
|
||||||
if(_.isNumber(filter.limit)) {
|
if(_.isNumber(filter.limit)) {
|
||||||
|
|
Loading…
Reference in New Issue