Skip to content

Commit

Permalink
feat: add instant query
Browse files Browse the repository at this point in the history
  • Loading branch information
Chinlinlee committed Aug 22, 2021
1 parent 9703f84 commit c8282a4
Showing 1 changed file with 77 additions and 0 deletions.
77 changes: 77 additions & 0 deletions models/FHIR/queryBuild.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
const { isNumber } = require('lodash');
const _ = require('lodash');
const moment = require('moment');
const momentTimezone = require('moment-timezone');
const prefix = ["eq" , "ne" , "lt" , "gt" , "ge" , "le" , "sa" , "eb" , "ap"];
function stringQuery(str, key) {
let keySplit = key.split(':');
Expand Down Expand Up @@ -272,7 +273,82 @@ function dateTimeQuery (value , field) {
}

function timeQuery () {

}
let instantQueryBuilder ={
"eq": (queryBuilder, field, date) => {
let result = {
"$eq": date
}
queryBuilder[field] = result;
return queryBuilder;
},
"ne": (queryBuilder, field, date) => {
let result = {
"$ne": date
}
queryBuilder[field] = result;
return queryBuilder;
},
"lt" : (queryBuilder, field, date) => {
let result = {
"$lt": date
}
queryBuilder[field] = result;
return queryBuilder;
},
"gt" : (queryBuilder, field, date) => {
let result = {
"$gt": date
}
queryBuilder[field] = result;
return queryBuilder;
},
"ge" : (queryBuilder, field, date) => {
let result = {
"$gte": date
}
queryBuilder[field] = result;
return queryBuilder;
},
"le" : (queryBuilder, field, date) => {
let result = {
"$lte": date
}
queryBuilder[field] = result;
return queryBuilder;
}
}


function instantQuery(value, field) {
let queryBuilder = {};
let date = value.substring(2);
let queryPrefix = value.substring(0, 2);
if (prefix.indexOf(queryPrefix) < 0) {
queryPrefix = "eq";
date = value;
}
let isVaildDate = moment(new Date(date)).isValid();
if (!isVaildDate) {
return false;
}
if (date.includes("+")) {
let dateSplitPlus = date.split("+");
let inputTimezone = `-${dateSplitPlus.pop().replace(":","")}`
let realDate = moment(dateSplitPlus.pop()).format("YYYY-MM-DDTHH:mm:ss");
date = moment(realDate).utc(true).utcOffset(inputTimezone).format("YYYY-MM-DDTHH:mm:ss");
} else if (date.includes("-")) {
let dateSplitPlus = date.split("-");
let inputTimezone = `+${dateSplitPlus.pop().replace(":", "")}`
let realDate = moment(dateSplitPlus.pop()).format("YYYY-MM-DDTHH:mm:ss");
date = moment(realDate).utc(true).utcOffset(inputTimezone).format("YYYY-MM-DDTHH:mm:ss");
} else {
date = moment(date).format("YYYY-MM-DDTHH:mm:ss");
}
let dateObj = moment(date).utc(true).toDate();
queryBuilder = instantQueryBuilder[queryPrefix](queryBuilder, field, dateObj, "");
return queryBuilder;
}

function referenceQuery (query , field) {
Expand Down Expand Up @@ -391,6 +467,7 @@ module.exports = exports = {
nameQuery : nameQuery ,
dateQuery : dateQuery ,
dateTimeQuery : dateTimeQuery ,
instantQuery: instantQuery,
quantityQuery : quantityQuery ,
referenceQuery : referenceQuery ,
arrayStringBuild : arrayStringBuild
Expand Down

0 comments on commit c8282a4

Please sign in to comment.