blixify-server 0.1.61 → 0.1.63

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"mongoWrapper.d.ts","sourceRoot":"","sources":["../../src/apis/mongoWrapper.ts"],"names":[],"mappings":"AAQA,OAAO,cAAc,MAAM,yBAAyB,CAAC;AAGrD,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,EAAE,GAAG,CAAC;CACf;AA6DD;;;;GAIG;AACH,qBAAa,YAAY;IACvB,OAAO,EAAE,GAAG,CAAM;IAClB,UAAU,SAAM;IAChB,MAAM,UAAS;IACf,MAAM,EAAE,cAAc,CAQpB;IACF,GAAG,EAAE,UAAU,CAAC;IAChB,OAAO,SAAM;IACb,KAAK,EAAE,GAAG,CAAC;IAEX,YAAY,QAAS,GAAG,aAEtB;gBAGA,OAAO,EAAE,GAAG,EACZ,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,OAAO,EACf,MAAM,EAAE,cAAc,EACtB,YAAY,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,OAAO,KAAK,OAAO,EACrD,GAAG,EAAE,UAAU,EACf,OAAO,CAAC,EAAE,MAAM,EAChB,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,KAAK,IAAI;IAa3D,UAAU,SAAU,GAAG,SAIrB;IAEF,eAAe,QACR,GAAG,OACH,GAAG,yBACc,GAAG,EAAE,KAAK,QAAQ,GAAG,CAAC;;mBAyE5C;IAEF,UAAU,QACH,GAAG,OACH,GAAG,qBACU,GAAG,KAAK,QAAQ,GAAG,CAAC;;mBAgDtC;IAEF,OAAO,QAAe,GAAG,OAAO,GAAG;;mBAgCjC;IAEF,eAAe,QACR,GAAG,OACH,GAAG,qBACU,GAAG,KAAK,QAAQ,GAAG,CAAC;;mBAmJtC;IAEF,UAAU,QACH,GAAG,OACH,GAAG,qBACU,GAAG,KAAK,QAAQ,GAAG,CAAC;;mBAuFtC;IAEF,eAAe,QACR,GAAG,OACH,GAAG,yBACc,GAAG,EAAE,KAAK,QAAQ,GAAG,CAAC;;mBA6H5C;IAEF,UAAU,QACH,GAAG,OACH,GAAG,qBACU,GAAG,KAAK,QAAQ,GAAG,CAAC;;mBAqCtC;IAEF,QAAQ,QAAe,GAAG,OAAO,GAAG;;;;;mBA4PlC;IAEF,IAAI,YA+EF;CACH"}
1
+ {"version":3,"file":"mongoWrapper.d.ts","sourceRoot":"","sources":["../../src/apis/mongoWrapper.ts"],"names":[],"mappings":"AAQA,OAAO,cAAc,MAAM,yBAAyB,CAAC;AAGrD,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,EAAE,GAAG,CAAC;CACf;AA2ED;;;;GAIG;AACH,qBAAa,YAAY;IACvB,OAAO,EAAE,GAAG,CAAM;IAClB,UAAU,SAAM;IAChB,MAAM,UAAS;IACf,MAAM,EAAE,cAAc,CAQpB;IACF,GAAG,EAAE,UAAU,CAAC;IAChB,OAAO,SAAM;IACb,KAAK,EAAE,GAAG,CAAC;IAEX,YAAY,QAAS,GAAG,aAEtB;gBAGA,OAAO,EAAE,GAAG,EACZ,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,OAAO,EACf,MAAM,EAAE,cAAc,EACtB,YAAY,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,OAAO,KAAK,OAAO,EACrD,GAAG,EAAE,UAAU,EACf,OAAO,CAAC,EAAE,MAAM,EAChB,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,KAAK,IAAI;IAa3D,UAAU,SAAU,GAAG,SAIrB;IAEF,eAAe,QACR,GAAG,OACH,GAAG,yBACc,GAAG,EAAE,KAAK,QAAQ,GAAG,CAAC;;mBAyE5C;IAEF,UAAU,QACH,GAAG,OACH,GAAG,qBACU,GAAG,KAAK,QAAQ,GAAG,CAAC;;mBAgDtC;IAEF,OAAO,QAAe,GAAG,OAAO,GAAG;;mBAgCjC;IAEF,eAAe,QACR,GAAG,OACH,GAAG,qBACU,GAAG,KAAK,QAAQ,GAAG,CAAC;;mBAmJtC;IAEF,UAAU,QACH,GAAG,OACH,GAAG,qBACU,GAAG,KAAK,QAAQ,GAAG,CAAC;;mBAuFtC;IAEF,eAAe,QACR,GAAG,OACH,GAAG,yBACc,GAAG,EAAE,KAAK,QAAQ,GAAG,CAAC;;mBA6H5C;IAEF,UAAU,QACH,GAAG,OACH,GAAG,qBACU,GAAG,KAAK,QAAQ,GAAG,CAAC;;mBAqCtC;IAEF,QAAQ,QAAe,GAAG,OAAO,GAAG;;;;;mBA6PlC;IAEF,IAAI,YA+EF;CACH"}
@@ -1 +1 @@
1
- "use strict";var __awaiter=this&&this.__awaiter||function(e,n,d,r){return new(d=d||Promise)(function(i,t){function s(e){try{a(r.next(e))}catch(e){t(e)}}function o(e){try{a(r.throw(e))}catch(e){t(e)}}function a(e){var t;e.done?i(e.value):((t=e.value)instanceof d?t:new d(function(e){e(t)})).then(s,o)}a((r=r.apply(e,n||[])).next())})},__importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.MongoWrapper=void 0;const moment_timezone_1=__importDefault(require("moment-timezone")),QueryModel_1=require("../model/QueryModel"),utils_1=require("./utils"),handleParseQueryFilter=(e,o)=>{const a={};return e&&0<e.length&&e.map(e=>{var t;let i=null!=(t=e.queryId)?t:"";o&&(i=o+"."+i);const s=e.value;switch(e.type){case"search":e.searchIds&&0<e.searchIds.length&&(a.$or=[],e.searchIds.map(e=>{let t=s;t.includes("+")&&(t="\\"+t),a.$or.push({[e]:{$regex:""+t,$options:"i"}})}));break;case"=":a[i]=s;break;case"!=":a[i]={$ne:s};break;case">":a[i]={$gt:s};break;case"<":a[i]={$lt:s};break;case"><":Array.isArray(s)&&2<=s.length&&(a[i]={$gte:s[0],$lte:s[1]});break;case"in":a[i]={$in:s}}}),a};class MongoWrapper{constructor(e,t,i,s,o,a,n,d){this.mongoDB="",this.collection="",this.isProd=!1,this.config={baseConfig:[],opsConfig:{read:[],create:[],update:[],delete:[]}},this.tableId="",this.modelChecker=e=>!1,this.parseModel=e=>(delete e._id,e.baseUpdatedAt=(0,moment_timezone_1.default)().toDate(),e),this.initBatchCreate=(u,c,h)=>__awaiter(this,void 0,void 0,function*(){var e;try{if(Array.isArray(u.body.data)){let t=!0;u.body.data.map(e=>{this.modelChecker(e)||(t=!1)}),t||c.status(400).json({err:"Invalid Model Structure"});var s=(0,QueryModel_1.checkBaseConfig)(this.config,u);let i=!0;const r=[];if(yield Promise.all(u.body.data.map(e=>{(0,QueryModel_1.checkOpsConfig)(this.config,"update",u,e)||(i=!1),u.body.unique&&null!=e&&e[u.body.unique]&&r.push(e[u.body.unique])})),s&&i){var o=this.mongoDB.db(this.tableId).collection(this.collection);if(0<r.length){var a=yield(yield o.find({[u.body.unique]:{$in:r}})).toArray();if(0<a.length)return void c.status(400).json({err:`Unique:${a.map(e=>e[u.body.unique])} exists`})}const l=[];var n=u.body.data.map(e=>(l.push(e._id),Object.assign(Object.assign({},e),{baseUpdatedAt:(0,moment_timezone_1.default)().toDate()}))),d=(h&&(yield h(n)),yield o.insertMany(n),{success:l});if(null!=(e=u.body)&&e.stopRes)return d;c.send(d)}else c.status(400).json({err:"Invalid Security Configuration"})}else c.status(400).json({err:"Invalid Fields"})}catch(e){c.status(400).json({err:e})}}),this.initCreate=(n,d,r)=>__awaiter(this,void 0,void 0,function*(){var e,t;try{if(this.modelChecker(n.body.data)){var i=(0,QueryModel_1.checkBaseConfig)(this.config,n),s=(0,QueryModel_1.checkOpsConfig)(this.config,"create",n,n.body.data);if(i&&s){var o=this.mongoDB.db(this.tableId).collection(this.collection);if(n.body.data.baseUpdatedAt=(0,moment_timezone_1.default)().toDate(),n.body.unique&&null!=(e=n.body.data)&&e[n.body.unique])if(yield o.findOne({[n.body.unique]:n.body.data[n.body.unique]}))return void d.status(400).json({err:`Unique:${n.body.data[n.body.unique]} exists`});r&&(yield r(n.body.data)),yield o.insertOne(n.body.data);var a={success:!0};if(null!=(t=n.body)&&t.stopRes)return a;d.send(a)}else d.status(400).json({err:"Invalid Security Configuration"})}else d.status(400).json({err:"Invalid Model Structure"})}catch(e){d.status(400).json({err:e})}}),this.initGet=(n,d)=>__awaiter(this,void 0,void 0,function*(){var e;try{var t=n.body.id;if(t){var i,s=yield this.mongoDB.db(this.tableId).collection(this.collection).findOne({_id:t}),o=(0,QueryModel_1.checkBaseConfig)(this.config,n),a=(0,QueryModel_1.checkOpsConfig)(this.config,"read",n,s);if(o&&a)return i={data:s},null!=(e=n.body)&&e.stopRes?i:void d.send(i);d.status(400).json({err:"Invalid Security Configuration"})}else d.status(400).json({err:"Invalid Fields"})}catch(e){d.status(400).json({err:e})}}),this.initBatchUpdate=(g,m,v)=>__awaiter(this,void 0,void 0,function*(){var e,i,s;try{if(this.modelChecker(g.body.data)&&g.body.query||g.body.unsetData){var o=g.body.unsetData,a=null!=(e=g.body.query)?e:[];const y=g.body.isOr?"$or":"$and",f={};var n=this.parseModel(null!=(i=g.body.data)?i:[]),d=(a&&0<a.length&&(f[y]=[],a.some(e=>"search"===e.type)&&(f.$or=[]),a.map(e=>{var t,i=null!=(t=e.queryId)?t:"";const s=e.value;switch(e.type){case"search":e.searchIds&&0<e.searchIds.length&&e.searchIds.map(e=>{f.$or.push({[e]:{$regex:s,$options:"i"}})});break;case"=":f[y].push({[i]:s});break;case"!=":f[y].push({[i]:{$ne:s}});break;case">":f[y].push({[i]:{$gt:s}});break;case"<":f[y].push({[i]:{$lt:s}});break;case"><":Array.isArray(s)&&2<=s.length&&(f[y].push({[i]:{$lt:s}}),f[y]={[i]:{$gte:s[0],$lte:s[1]}});break;case"in":f[y].push({[i]:{$in:s}})}})),(0,QueryModel_1.checkBaseConfig)(this.config,g));let t=!0;var r=this.mongoDB.db(this.tableId).collection(this.collection),l=yield(yield r.find(Object.assign({},f))).toArray();const b=[];if(yield Promise.all(l.map(e=>{g.body.sensitive&&!(0,moment_timezone_1.default)(g.body.data.baseUpdatedAt).isAfter((0,moment_timezone_1.default)(e.baseUpdatedAt))&&m.status(400).json({err:"Refresh Sensitive Model"}),(0,QueryModel_1.checkOpsConfig)(this.config,"update",g,e)||(t=!1);e=(0,utils_1.compareUpdatedFields)(e,g.body.data).workflowUpdateFields;b.push(e)})),d&&t){const p={};var u={},c=(o&&(o.forEach(e=>{p[e]=""}),u.$unset=Object.assign({},p)),n&&(u.$set=Object.assign({},n)),v&&(yield v(b)),yield r.updateMany(f,u),b.map(e=>e._id)),h={success:c};if(null!=(s=g.body)&&s.stopRes)return h;m.send(h)}else m.status(400).json({err:"Invalid Security Configuration"})}}catch(e){m.status(400).json({err:e})}}),this.initUpdate=(y,f,b)=>__awaiter(this,void 0,void 0,function*(){var e,t,i;try{var s=this.modelChecker(y.body.data)&&y.body.id;if(s){var o=this.mongoDB.db(this.tableId).collection(this.collection),a=yield o.findOne({_id:s}),n=(this.debug&&this.debug(y.body,a),(0,QueryModel_1.checkBaseConfig)(this.config,y)),d=(0,QueryModel_1.checkOpsConfig)(this.config,"update",y,a);if(n&&d){if(y.body.unique&&null!=(e=y.body.data)&&e[y.body.unique]){var r=yield o.findOne({[y.body.unique]:y.body.data[y.body.unique]});if(r&&y.body.id!==r._id)return void f.status(400).json({err:y.body.data[y.body.unique]+" exists"})}var{workflowUpdateFields:l,updatedFields:u}=(0,utils_1.compareUpdatedFields)(a,y.body.data),c={success:!0},h=(b&&(yield b(l)),this.parseModel(u));if(y.body.sensitive)if((0,moment_timezone_1.default)(y.body.data.baseUpdatedAt).isAfter((0,moment_timezone_1.default)(a.baseUpdatedAt))){if(yield o.updateOne({_id:s},{$set:Object.assign({},h)}),null!=(t=y.body)&&t.stopRes)return c;f.send(c)}else f.status(400).json({err:"Refresh Sensitive Model"});else{if(yield o.updateOne({_id:s},{$set:Object.assign({},h)}),null!=(i=y.body)&&i.stopRes)return c;f.send(c)}}else f.status(400).json({err:"Invalid Security Configuration"})}else f.status(400).json({err:"Invalid Model Structure"})}catch(e){this.debug&&this.debug(null,null,e),f.status(400).json({err:e})}}),this.initBatchDelete=(b,p,g)=>__awaiter(this,void 0,void 0,function*(){var e,i;try{if(Array.isArray(b.body.id)){var s=this.mongoDB.db(this.tableId).collection(this.collection),o=yield s.find({_id:{$in:b.body.id}}),a=(0,QueryModel_1.checkBaseConfig)(this.config,b),n=yield o.toArray();let t=!0;if(0<n.length&&(yield Promise.all(n.map(e=>{(0,QueryModel_1.checkOpsConfig)(this.config,"delete",b,e)||(t=!1)}))),a&&t){g&&(yield g(n)),yield s.deleteMany({_id:{$in:b.body.id}});var d={success:b.body.id};if(null!=(e=b.body)&&e.stopRes)return d;p.send(d)}else p.status(400).json({err:"Invalid Security Configuration"})}else{var r=b.body.query;const y={};r&&0<r.length&&r.map(e=>{var t,i=null!=(t=e.queryId)?t:"";const s=e.value;switch(e.type){case"search":e.searchIds&&0<e.searchIds.length&&(y.$or=[],e.searchIds.map(e=>{y.$or.push({[e]:{$regex:s,$options:"i"}})}));break;case"=":y[i]=s;break;case"!=":y[i]={$ne:s};break;case">":y[i]={$gt:s};break;case"<":y[i]={$lt:s};break;case"><":Array.isArray(s)&&2<=s.length&&(y[i]={$gte:s[0],$lte:s[1]});break;case"in":y[i]={$in:s}}});var l=this.mongoDB.db(this.tableId).collection(this.collection),u=yield l.find(y).toArray(),c=(0,QueryModel_1.checkBaseConfig)(this.config,b);let t=!0;const f=[];if(0<u.length&&u.map(e=>{f.push(e._id),(0,QueryModel_1.checkOpsConfig)(this.config,"delete",b,e)||(t=!1)}),g&&(yield g(u)),c&&t){yield l.deleteMany(y);var h={success:f};if(null!=(i=b.body)&&i.stopRes)return h;p.send(h)}else p.status(400).json({err:"Invalid Security Configuration"})}}catch(e){p.status(400).json({err:e})}}),this.initDelete=(d,r,l)=>__awaiter(this,void 0,void 0,function*(){var e;try{var t=d.body.id;if(t){var i=this.mongoDB.db(this.tableId).collection(this.collection),s=yield i.findOne({_id:t}),o=(0,QueryModel_1.checkBaseConfig)(this.config,d),a=(0,QueryModel_1.checkOpsConfig)(this.config,"delete",d,s);if(o&&a){l&&(yield l(s)),yield i.findOneAndDelete({_id:t});var n={success:!0};if(null!=(e=d.body)&&e.stopRes)return n;r.send(n)}else r.status(400).json({err:"Invalid Security Configuration"})}else r.status(400).json({err:"Invalid Fields"})}catch(e){r.status(400).json({err:e})}}),this.initList=(U,z)=>__awaiter(this,void 0,void 0,function*(){var e,t,i,s,o,n,a,d,r;try{var l=(0,QueryModel_1.checkBaseConfig)(this.config,U);if(l){var u=U.body.aggregate,c=null!=(e=U.body.query)?e:[],h=handleParseQueryFilter(c);if(u){var y=[],f=null!=(t=u.queryId)?t:"",b=null!=(i=u.dateId)?i:"baseUpdatedAt";for(const w of null!=(s=u.range)?s:[(0,moment_timezone_1.default)().format("DD/MM/YYYY HH:mm:ss")]){Object.assign({},h);var p=w.split("-"),[g,m=(0,moment_timezone_1.default)().format("DD/MM/YYYY HH:mm:ss")]=p,v=2===p.length,_=(0,moment_timezone_1.default)(g,"DD/MM/YYYY").isValid(),$=(0,moment_timezone_1.default)(m,"DD/MM/YYYY").isValid(),M=(0,moment_timezone_1.default)(g,"DD/MM/YYYY HH:mm:ss").tz("Asia/Kuala_lumpur").toDate(),I=(0,moment_timezone_1.default)(m,"DD/MM/YYYY HH:mm:ss").tz("Asia/Kuala_lumpur").toDate();if(!_||!$)return void z.status(400).json({err:"Invalid Aggregate Range Configuration"});const B=[v?{$match:Object.assign(Object.assign({},h),{[b]:{$gte:M,$lte:I}})}:{$match:Object.assign(Object.assign({},h),{[b]:{$lte:M}})}],Q=v?w:"Begining until "+(0,moment_timezone_1.default)(g,"DD/MM/YYYY HH:mm:ss").format("DD/MM/YYYY");let a=!1;if(u.unwind&&0<u.unwind.length&&u.unwind.map((e,t)=>{var i,s="model"+t;let o="";0<t&&(o="model"+(t-1)+".");t=handleParseQueryFilter(null!=(t=e.query)?t:[],s);null!=(i=e.unique)&&i.list&&B.push({$unwind:"$"+e.localField}),B.push({$lookup:{from:e.collectionId,localField:o+e.localField,foreignField:"_id",as:s}},{$unwind:"$"+s},{$match:t}),null!=(i=e.unique)&&i.type&&(a=!0,s="uniqueUnwindId",B.push({$group:{_id:Q,uniqueUnwindId:{$addToSet:"$"+e.localField}}}),"count"===e.unique.type?B.push({$project:{value:{$size:"$"+s}}}):B.push({$project:{_id:0,value:"$"+s}}))}),!a){let e=Q;switch(u.groupId&&(e="$"+u.groupId),u.type){case"avg":B.push({$group:{_id:e,value:{$avg:"$"+f}}});break;case"sum":B.push({$group:{_id:e,value:{$sum:"$"+f}}});break;case"count":B.push({$group:{_id:e,value:{$sum:1}}})}}if(0===B.length)return void z.status(400).json({err:"Invalid Aggregate Configuration"});var k=this.mongoDB.db(this.tableId).collection(this.collection);let e=0;var j=yield k.aggregate(B).toArray();e=u.groupId?j:null!=(n=null==(o=j[0])?void 0:o.value)?n:0,y.push({_id:Q,value:e})}var D={data:y};if(null!=(a=U.body)&&a.stopRes)return D;z.send(D)}else{let e=this.mongoDB.db(this.tableId).collection(this.collection).find(h);var C,q,O,Y=yield e.count({}),A=(U.body.cursor&&(e=e.skip(U.body.cursor)),U.body.stopLimit||(e=e.limit(null!=(d=U.body.limit)?d:10)),U.body.sort&&(q={[(C=U.body.sort).sortId]:"asc"===C.type?1:-1},e=e.sort(q)),yield e.toArray());let t=!0;if(0<A.length&&A.map(e=>{(0,QueryModel_1.checkOpsConfig)(this.config,"read",U,e)||(t=!1)}),l&&t)return O={data:A,count:Y},null!=(r=U.body)&&r.stopRes?O:void z.send(O);z.status(400).json({err:"Invalid Security Configuration"})}}else z.status(400).json({err:"Invalid Security Configuration"})}catch(e){z.status(400).json({err:e})}}),this.init=()=>{var e=this.lib.express.Router();return e.post("/create",(e,t)=>{this.initCreate(e,t)}),e.post("/batchCreate",(e,t)=>{this.initBatchCreate(e,t)}),e.post("/get",(e,t)=>{this.initGet(e,t)}),e.post("/update",(e,t)=>{this.initUpdate(e,t)}),e.post("/batchUpdate",(e,t)=>{this.initBatchUpdate(e,t)}),e.post("/delete",(e,t)=>{this.initDelete(e,t)}),e.post("/batchDelete",(e,t)=>{this.initBatchDelete(e,t)}),e.post("/list",(e,t)=>{this.initList(e,t)}),e},this.mongoDB=e,this.collection=t,this.isProd=i,this.config=s,this.modelChecker=o,this.lib=a;e=this.isProd?"prod":"dev";this.tableId=n?n+"-"+e:e,this.debug=d}}exports.MongoWrapper=MongoWrapper;
1
+ "use strict";var __awaiter=this&&this.__awaiter||function(e,n,d,r){return new(d=d||Promise)(function(i,t){function s(e){try{a(r.next(e))}catch(e){t(e)}}function o(e){try{a(r.throw(e))}catch(e){t(e)}}function a(e){var t;e.done?i(e.value):((t=e.value)instanceof d?t:new d(function(e){e(t)})).then(s,o)}a((r=r.apply(e,n||[])).next())})},__importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.MongoWrapper=void 0;const moment_timezone_1=__importDefault(require("moment-timezone")),QueryModel_1=require("../model/QueryModel"),utils_1=require("./utils"),handleParseQueryFilter=(e,n)=>{const d={};return e&&0<e.length&&e.map(e=>{var t;let i=null!=(t=e.queryId)?t:"";n&&(i=n+"."+i);const s=e.value,o={};let a=!1;switch(e.type){case"search":e.searchIds&&0<e.searchIds.length&&e.searchIds.map(e=>{a=!0;let t=s;t.includes("+")&&(t="\\"+t),o[e]={$regex:""+t,$options:"i"}});break;case"=":o[i]=s;break;case"!=":o[i]={$ne:s};break;case">":o[i]={$gt:s};break;case"<":o[i]={$lt:s};break;case"><":Array.isArray(s)&&2<=s.length&&(o[i]={$gte:s[0],$lte:s[1]});break;case"in":o[i]={$in:s}}e.orQuery&&(a=!0),Object.keys(o).map(e=>{a?d.$or?d.$or.push({[e]:o[e]}):d.$or=[{[e]:o[e]}]:d[e]=o[e]})}),d};class MongoWrapper{constructor(e,t,i,s,o,a,n,d){this.mongoDB="",this.collection="",this.isProd=!1,this.config={baseConfig:[],opsConfig:{read:[],create:[],update:[],delete:[]}},this.tableId="",this.modelChecker=e=>!1,this.parseModel=e=>(delete e._id,e.baseUpdatedAt=(0,moment_timezone_1.default)().toDate(),e),this.initBatchCreate=(u,c,h)=>__awaiter(this,void 0,void 0,function*(){var e;try{if(Array.isArray(u.body.data)){let t=!0;u.body.data.map(e=>{this.modelChecker(e)||(t=!1)}),t||c.status(400).json({err:"Invalid Model Structure"});var s=(0,QueryModel_1.checkBaseConfig)(this.config,u);let i=!0;const r=[];if(yield Promise.all(u.body.data.map(e=>{(0,QueryModel_1.checkOpsConfig)(this.config,"update",u,e)||(i=!1),u.body.unique&&null!=e&&e[u.body.unique]&&r.push(e[u.body.unique])})),s&&i){var o=this.mongoDB.db(this.tableId).collection(this.collection);if(0<r.length){var a=yield(yield o.find({[u.body.unique]:{$in:r}})).toArray();if(0<a.length)return void c.status(400).json({err:`Unique:${a.map(e=>e[u.body.unique])} exists`})}const l=[];var n=u.body.data.map(e=>(l.push(e._id),Object.assign(Object.assign({},e),{baseUpdatedAt:(0,moment_timezone_1.default)().toDate()}))),d=(h&&(yield h(n)),yield o.insertMany(n),{success:l});if(null!=(e=u.body)&&e.stopRes)return d;c.send(d)}else c.status(400).json({err:"Invalid Security Configuration"})}else c.status(400).json({err:"Invalid Fields"})}catch(e){c.status(400).json({err:e})}}),this.initCreate=(n,d,r)=>__awaiter(this,void 0,void 0,function*(){var e,t;try{if(this.modelChecker(n.body.data)){var i=(0,QueryModel_1.checkBaseConfig)(this.config,n),s=(0,QueryModel_1.checkOpsConfig)(this.config,"create",n,n.body.data);if(i&&s){var o=this.mongoDB.db(this.tableId).collection(this.collection);if(n.body.data.baseUpdatedAt=(0,moment_timezone_1.default)().toDate(),n.body.unique&&null!=(e=n.body.data)&&e[n.body.unique])if(yield o.findOne({[n.body.unique]:n.body.data[n.body.unique]}))return void d.status(400).json({err:`Unique:${n.body.data[n.body.unique]} exists`});r&&(yield r(n.body.data)),yield o.insertOne(n.body.data);var a={success:!0};if(null!=(t=n.body)&&t.stopRes)return a;d.send(a)}else d.status(400).json({err:"Invalid Security Configuration"})}else d.status(400).json({err:"Invalid Model Structure"})}catch(e){d.status(400).json({err:e})}}),this.initGet=(n,d)=>__awaiter(this,void 0,void 0,function*(){var e;try{var t=n.body.id;if(t){var i,s=yield this.mongoDB.db(this.tableId).collection(this.collection).findOne({_id:t}),o=(0,QueryModel_1.checkBaseConfig)(this.config,n),a=(0,QueryModel_1.checkOpsConfig)(this.config,"read",n,s);if(o&&a)return i={data:s},null!=(e=n.body)&&e.stopRes?i:void d.send(i);d.status(400).json({err:"Invalid Security Configuration"})}else d.status(400).json({err:"Invalid Fields"})}catch(e){d.status(400).json({err:e})}}),this.initBatchUpdate=(g,m,v)=>__awaiter(this,void 0,void 0,function*(){var e,i,s;try{if(this.modelChecker(g.body.data)&&g.body.query||g.body.unsetData){var o=g.body.unsetData,a=null!=(e=g.body.query)?e:[];const y=g.body.isOr?"$or":"$and",f={};var n=this.parseModel(null!=(i=g.body.data)?i:[]),d=(a&&0<a.length&&(f[y]=[],a.some(e=>"search"===e.type)&&(f.$or=[]),a.map(e=>{var t,i=null!=(t=e.queryId)?t:"";const s=e.value;switch(e.type){case"search":e.searchIds&&0<e.searchIds.length&&e.searchIds.map(e=>{f.$or.push({[e]:{$regex:s,$options:"i"}})});break;case"=":f[y].push({[i]:s});break;case"!=":f[y].push({[i]:{$ne:s}});break;case">":f[y].push({[i]:{$gt:s}});break;case"<":f[y].push({[i]:{$lt:s}});break;case"><":Array.isArray(s)&&2<=s.length&&(f[y].push({[i]:{$lt:s}}),f[y]={[i]:{$gte:s[0],$lte:s[1]}});break;case"in":f[y].push({[i]:{$in:s}})}})),(0,QueryModel_1.checkBaseConfig)(this.config,g));let t=!0;var r=this.mongoDB.db(this.tableId).collection(this.collection),l=yield(yield r.find(Object.assign({},f))).toArray();const b=[];if(yield Promise.all(l.map(e=>{g.body.sensitive&&!(0,moment_timezone_1.default)(g.body.data.baseUpdatedAt).isAfter((0,moment_timezone_1.default)(e.baseUpdatedAt))&&m.status(400).json({err:"Refresh Sensitive Model"}),(0,QueryModel_1.checkOpsConfig)(this.config,"update",g,e)||(t=!1);e=(0,utils_1.compareUpdatedFields)(e,g.body.data).workflowUpdateFields;b.push(e)})),d&&t){const p={};var u={},c=(o&&(o.forEach(e=>{p[e]=""}),u.$unset=Object.assign({},p)),n&&(u.$set=Object.assign({},n)),v&&(yield v(b)),yield r.updateMany(f,u),b.map(e=>e._id)),h={success:c};if(null!=(s=g.body)&&s.stopRes)return h;m.send(h)}else m.status(400).json({err:"Invalid Security Configuration"})}}catch(e){m.status(400).json({err:e})}}),this.initUpdate=(y,f,b)=>__awaiter(this,void 0,void 0,function*(){var e,t,i;try{var s=this.modelChecker(y.body.data)&&y.body.id;if(s){var o=this.mongoDB.db(this.tableId).collection(this.collection),a=yield o.findOne({_id:s}),n=(this.debug&&this.debug(y.body,a),(0,QueryModel_1.checkBaseConfig)(this.config,y)),d=(0,QueryModel_1.checkOpsConfig)(this.config,"update",y,a);if(n&&d){if(y.body.unique&&null!=(e=y.body.data)&&e[y.body.unique]){var r=yield o.findOne({[y.body.unique]:y.body.data[y.body.unique]});if(r&&y.body.id!==r._id)return void f.status(400).json({err:y.body.data[y.body.unique]+" exists"})}var{workflowUpdateFields:l,updatedFields:u}=(0,utils_1.compareUpdatedFields)(a,y.body.data),c={success:!0},h=(b&&(yield b(l)),this.parseModel(u));if(y.body.sensitive)if((0,moment_timezone_1.default)(y.body.data.baseUpdatedAt).isAfter((0,moment_timezone_1.default)(a.baseUpdatedAt))){if(yield o.updateOne({_id:s},{$set:Object.assign({},h)}),null!=(t=y.body)&&t.stopRes)return c;f.send(c)}else f.status(400).json({err:"Refresh Sensitive Model"});else{if(yield o.updateOne({_id:s},{$set:Object.assign({},h)}),null!=(i=y.body)&&i.stopRes)return c;f.send(c)}}else f.status(400).json({err:"Invalid Security Configuration"})}else f.status(400).json({err:"Invalid Model Structure"})}catch(e){this.debug&&this.debug(null,null,e),f.status(400).json({err:e})}}),this.initBatchDelete=(b,p,g)=>__awaiter(this,void 0,void 0,function*(){var e,i;try{if(Array.isArray(b.body.id)){var s=this.mongoDB.db(this.tableId).collection(this.collection),o=yield s.find({_id:{$in:b.body.id}}),a=(0,QueryModel_1.checkBaseConfig)(this.config,b),n=yield o.toArray();let t=!0;if(0<n.length&&(yield Promise.all(n.map(e=>{(0,QueryModel_1.checkOpsConfig)(this.config,"delete",b,e)||(t=!1)}))),a&&t){g&&(yield g(n)),yield s.deleteMany({_id:{$in:b.body.id}});var d={success:b.body.id};if(null!=(e=b.body)&&e.stopRes)return d;p.send(d)}else p.status(400).json({err:"Invalid Security Configuration"})}else{var r=b.body.query;const y={};r&&0<r.length&&r.map(e=>{var t,i=null!=(t=e.queryId)?t:"";const s=e.value;switch(e.type){case"search":e.searchIds&&0<e.searchIds.length&&(y.$or=[],e.searchIds.map(e=>{y.$or.push({[e]:{$regex:s,$options:"i"}})}));break;case"=":y[i]=s;break;case"!=":y[i]={$ne:s};break;case">":y[i]={$gt:s};break;case"<":y[i]={$lt:s};break;case"><":Array.isArray(s)&&2<=s.length&&(y[i]={$gte:s[0],$lte:s[1]});break;case"in":y[i]={$in:s}}});var l=this.mongoDB.db(this.tableId).collection(this.collection),u=yield l.find(y).toArray(),c=(0,QueryModel_1.checkBaseConfig)(this.config,b);let t=!0;const f=[];if(0<u.length&&u.map(e=>{f.push(e._id),(0,QueryModel_1.checkOpsConfig)(this.config,"delete",b,e)||(t=!1)}),g&&(yield g(u)),c&&t){yield l.deleteMany(y);var h={success:f};if(null!=(i=b.body)&&i.stopRes)return h;p.send(h)}else p.status(400).json({err:"Invalid Security Configuration"})}}catch(e){p.status(400).json({err:e})}}),this.initDelete=(d,r,l)=>__awaiter(this,void 0,void 0,function*(){var e;try{var t=d.body.id;if(t){var i=this.mongoDB.db(this.tableId).collection(this.collection),s=yield i.findOne({_id:t}),o=(0,QueryModel_1.checkBaseConfig)(this.config,d),a=(0,QueryModel_1.checkOpsConfig)(this.config,"delete",d,s);if(o&&a){l&&(yield l(s)),yield i.findOneAndDelete({_id:t});var n={success:!0};if(null!=(e=d.body)&&e.stopRes)return n;r.send(n)}else r.status(400).json({err:"Invalid Security Configuration"})}else r.status(400).json({err:"Invalid Fields"})}catch(e){r.status(400).json({err:e})}}),this.initList=(U,z)=>__awaiter(this,void 0,void 0,function*(){var e,t,i,s,o,n,a,d,r;try{var l=(0,QueryModel_1.checkBaseConfig)(this.config,U);if(l){var u=U.body.aggregate,c=null!=(e=U.body.query)?e:[],h=handleParseQueryFilter(c);if(u){var y=[],f=null!=(t=u.queryId)?t:"",b=null!=(i=u.dateId)?i:"baseUpdatedAt";for(const w of null!=(s=u.range)?s:[(0,moment_timezone_1.default)().format("DD/MM/YYYY HH:mm:ss")]){Object.assign({},h);var p=w.split("-"),[g,m=(0,moment_timezone_1.default)().format("DD/MM/YYYY HH:mm:ss")]=p,v=2===p.length,_=(0,moment_timezone_1.default)(g,"DD/MM/YYYY").isValid(),$=(0,moment_timezone_1.default)(m,"DD/MM/YYYY").isValid(),M=(0,moment_timezone_1.default)(g,"DD/MM/YYYY HH:mm:ss").tz("Asia/Kuala_lumpur").toDate(),I=(0,moment_timezone_1.default)(m,"DD/MM/YYYY HH:mm:ss").tz("Asia/Kuala_lumpur").toDate();if(!_||!$)return void z.status(400).json({err:"Invalid Aggregate Range Configuration"});const B=[v?{$match:Object.assign(Object.assign({},h),{[b]:{$gte:M,$lte:I}})}:{$match:Object.assign(Object.assign({},h),{[b]:{$lte:M}})}],Q=v?w:"Begining until "+(0,moment_timezone_1.default)(g,"DD/MM/YYYY HH:mm:ss").format("DD/MM/YYYY");let a=!1;if(u.unwind&&0<u.unwind.length&&u.unwind.map((e,t)=>{var i,s="model"+t;let o="";0<t&&(o="model"+(t-1)+".");t=handleParseQueryFilter(null!=(t=e.query)?t:[],s);null!=(i=e.unique)&&i.list&&B.push({$unwind:"$"+e.localField}),B.push({$lookup:{from:e.collectionId,localField:o+e.localField,foreignField:"_id",as:s}},{$unwind:"$"+s},{$match:t}),null!=(i=e.unique)&&i.type&&(a=!0,s="uniqueUnwindId",B.push({$group:{_id:Q,uniqueUnwindId:{$addToSet:"$"+e.localField}}}),"count"===e.unique.type?B.push({$project:{value:{$size:"$"+s}}}):B.push({$project:{_id:0,value:"$"+s}}))}),!a){let e=Q;switch(u.groupId&&(e="$"+u.groupId),u.type){case"avg":B.push({$group:{_id:e,value:{$avg:"$"+f}}});break;case"sum":B.push({$group:{_id:e,value:{$sum:"$"+f}}});break;case"count":B.push({$group:{_id:e,value:{$sum:1}}})}}if(0===B.length)return void z.status(400).json({err:"Invalid Aggregate Configuration"});var k=this.mongoDB.db(this.tableId).collection(this.collection);let e=0;var j=yield k.aggregate(B).toArray();e=u.groupId?j:null!=(n=null==(o=j[0])?void 0:o.value)?n:0,y.push({_id:Q,value:e})}var D={data:y};if(null!=(a=U.body)&&a.stopRes)return D;z.send(D)}else{let e=this.mongoDB.db(this.tableId).collection(this.collection).find(h);var C,q,O,Y=yield e.count({}),A=(U.body.cursor&&(e=e.skip(U.body.cursor)),U.body.stopLimit||(e=e.limit(null!=(d=U.body.limit)?d:10)),U.body.sort&&(q={[(C=U.body.sort).sortId]:"asc"===C.type?1:-1},e=e.sort(q)),yield e.toArray());let t=!0;if(0<A.length&&A.map(e=>{(0,QueryModel_1.checkOpsConfig)(this.config,"read",U,e)||(t=!1)}),l&&t)return O={data:A,count:Y},null!=(r=U.body)&&r.stopRes?O:void z.send(O);z.status(400).json({err:"Invalid Security Configuration"})}}else z.status(400).json({err:"Invalid Security Configuration"})}catch(e){z.status(400).json({err:e})}}),this.init=()=>{var e=this.lib.express.Router();return e.post("/create",(e,t)=>{this.initCreate(e,t)}),e.post("/batchCreate",(e,t)=>{this.initBatchCreate(e,t)}),e.post("/get",(e,t)=>{this.initGet(e,t)}),e.post("/update",(e,t)=>{this.initUpdate(e,t)}),e.post("/batchUpdate",(e,t)=>{this.initBatchUpdate(e,t)}),e.post("/delete",(e,t)=>{this.initDelete(e,t)}),e.post("/batchDelete",(e,t)=>{this.initBatchDelete(e,t)}),e.post("/list",(e,t)=>{this.initList(e,t)}),e},this.mongoDB=e,this.collection=t,this.isProd=i,this.config=s,this.modelChecker=o,this.lib=a;e=this.isProd?"prod":"dev";this.tableId=n?n+"-"+e:e,this.debug=d}}exports.MongoWrapper=MongoWrapper;
@@ -15,6 +15,7 @@ export interface Query {
15
15
  value: any;
16
16
  queryId?: string;
17
17
  searchIds?: string[];
18
+ orQuery?: boolean;
18
19
  }
19
20
  /**
20
21
  * @SupportedAggregate
@@ -1 +1 @@
1
- {"version":3,"file":"QueryModel.d.ts","sourceRoot":"","sources":["../../src/model/QueryModel.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAE9C;;;;;;;;;;GAUG;AACH,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,QAAQ,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC;IACtD,KAAK,EAAE,GAAG,CAAC;IACX,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,OAAO,GAAG,KAAK,GAAG,KAAK,GAAG,OAAO,CAAC;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,CAAC,EAAE;QACP,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;QACrB,KAAK,EAAE,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,EAAE;YACP,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;YACxB,IAAI,CAAC,EAAE,OAAO,CAAC;SAChB,CAAC;KACH,EAAE,CAAC;CACL;AAED,MAAM,WAAW,IAAI;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,KAAK,GAAG,MAAM,CAAC;CACtB;AAED;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,WAAY,cAAc,OAAO,GAAG,YAmC/D,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,cAAc,WACjB,cAAc,QAChB,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,OACxC,GAAG,OACH,GAAG,YAyDT,CAAC"}
1
+ {"version":3,"file":"QueryModel.d.ts","sourceRoot":"","sources":["../../src/model/QueryModel.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAE9C;;;;;;;;;;GAUG;AACH,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,QAAQ,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC;IACtD,KAAK,EAAE,GAAG,CAAC;IACX,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,OAAO,GAAG,KAAK,GAAG,KAAK,GAAG,OAAO,CAAC;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,CAAC,EAAE;QACP,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;QACrB,KAAK,EAAE,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,EAAE;YACP,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;YACxB,IAAI,CAAC,EAAE,OAAO,CAAC;SAChB,CAAC;KACH,EAAE,CAAC;CACL;AAED,MAAM,WAAW,IAAI;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,KAAK,GAAG,MAAM,CAAC;CACtB;AAED;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,WAAY,cAAc,OAAO,GAAG,YAmC/D,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,cAAc,WACjB,cAAc,QAChB,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,OACxC,GAAG,OACH,GAAG,YAyDT,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "blixify-server",
3
- "version": "0.1.61",
3
+ "version": "0.1.63",
4
4
  "license": "MIT",
5
5
  "main": "dist/apis/index.js",
6
6
  "private": false,