feat(assist): count a search filters for full match results only
This commit is contained in:
parent
7eae4d660d
commit
45655a9608
2 changed files with 24 additions and 12 deletions
|
|
@ -65,13 +65,11 @@ const extractSessionIdFromRequest = function (req) {
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
const isValidSession = function (sessionInfo, filters, counter) {
|
const isValidSession = function (sessionInfo, filters) {
|
||||||
|
const result = {matched: false, filters: {}};
|
||||||
for (const [filterName, body] of Object.entries(filters)) { // range by filter names (key)
|
for (const [filterName, body] of Object.entries(filters)) { // range by filter names (key)
|
||||||
if (body.values === undefined || body.values === null) {
|
if (body.values === undefined || body.values === null) {
|
||||||
return false;
|
return result;
|
||||||
}
|
|
||||||
if (!counter[filterName]) {
|
|
||||||
counter[filterName] = {};
|
|
||||||
}
|
}
|
||||||
let found = false;
|
let found = false;
|
||||||
for (const [sessKey, sessValue] of Object.entries(sessionInfo)) {
|
for (const [sessKey, sessValue] of Object.entries(sessionInfo)) {
|
||||||
|
|
@ -79,8 +77,10 @@ const isValidSession = function (sessionInfo, filters, counter) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (typeof (sessValue) === "object") {
|
if (typeof (sessValue) === "object") {
|
||||||
if (isValidSession(sessValue, {[filterName]: body}, counter)) {
|
const partRes = isValidSession(sessValue, {[filterName]: body})
|
||||||
|
if (partRes.matched) {
|
||||||
found = true;
|
found = true;
|
||||||
|
Object.assign(result.filters, partRes.filters);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} else if (sessKey.toLowerCase() === filterName.toLowerCase()) {
|
} else if (sessKey.toLowerCase() === filterName.toLowerCase()) {
|
||||||
|
|
@ -88,8 +88,7 @@ const isValidSession = function (sessionInfo, filters, counter) {
|
||||||
if (body.operator === "is" && v && String(sessValue).toLowerCase() === String(v).toLowerCase()
|
if (body.operator === "is" && v && String(sessValue).toLowerCase() === String(v).toLowerCase()
|
||||||
|| body.operator !== "is" && String(sessValue).toLowerCase().indexOf(String(v).toLowerCase()) >= 0) {
|
|| body.operator !== "is" && String(sessValue).toLowerCase().indexOf(String(v).toLowerCase()) >= 0) {
|
||||||
found = true;
|
found = true;
|
||||||
if (counter[filterName][v]) counter[filterName][v]++;
|
result.filters[filterName] = v;
|
||||||
else counter[filterName][v] = 1;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -99,10 +98,11 @@ const isValidSession = function (sessionInfo, filters, counter) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!found) {
|
if (!found) {
|
||||||
return false;
|
return result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
result.matched = true;
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
const getValidAttributes = function (sessionInfo, query) {
|
const getValidAttributes = function (sessionInfo, query) {
|
||||||
|
|
|
||||||
|
|
@ -52,7 +52,8 @@ const getParticularSession = async function (roomId, filters) {
|
||||||
if (!hasFilters(filters)) {
|
if (!hasFilters(filters)) {
|
||||||
return sessInfo;
|
return sessInfo;
|
||||||
}
|
}
|
||||||
if (isValidSession(sessInfo, filters.filter, {})) {
|
const result = isValidSession(sessInfo, filters.filter)
|
||||||
|
if (result.matched) {
|
||||||
return sessInfo;
|
return sessInfo;
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
|
|
@ -88,8 +89,19 @@ const getAllSessions = async function (projectKey, filters, counters, onlineOnl
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add session to the list if it passes the filter
|
// Add session to the list if it passes the filter
|
||||||
if (isValidSession(item.handshake.query.sessionInfo, filters.filter, counters)) {
|
const result = isValidSession(item.handshake.query.sessionInfo, filters.filter)
|
||||||
|
if (result.matched) {
|
||||||
sessions.push(item.handshake.query.sessionInfo);
|
sessions.push(item.handshake.query.sessionInfo);
|
||||||
|
// Add filter name/value to counter
|
||||||
|
for (const [filterName, filterValue] of Object.entries(result.filters)) {
|
||||||
|
if (counters[filterName] === undefined) {
|
||||||
|
counters[filterName] = {};
|
||||||
|
}
|
||||||
|
if (counters[filterName][filterValue] === undefined) {
|
||||||
|
counters[filterName][filterValue] = 0;
|
||||||
|
}
|
||||||
|
counters[filterName][filterValue] += 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue