77 lines
2.2 KiB
JavaScript
77 lines
2.2 KiB
JavaScript
import Loki from 'lokijs/src/lokijs';
|
|
import LokiIndexedAdapter from 'lokijs/src/loki-indexed-adapter';
|
|
|
|
const DEFAULTS = {
|
|
autosave: false
|
|
};
|
|
|
|
var databasable = {
|
|
|
|
accessDb: function(db_name){
|
|
var databasable = this,
|
|
opts = Object.assign({
|
|
adapter: new LokiIndexedAdapter(db_name)
|
|
}, DEFAULTS, databasable.lokijs_options || {}),
|
|
has_adapter = !!opts.adapter;
|
|
return new Promise((fnResolve, fnReject)=>{
|
|
if (!databasable.db) {
|
|
databasable.db = new Loki(db_name, opts);
|
|
if (has_adapter){
|
|
databasable.db.loadDatabase({}, ()=>{
|
|
fnResolve(databasable.db);
|
|
});
|
|
} else { fnResolve(databasable.db); }
|
|
} else { fnResolve(databasable.db); }
|
|
});
|
|
},
|
|
|
|
closeDb: function(){
|
|
var databasable = this;
|
|
if (databasable.db){
|
|
databasable.db.save();
|
|
databasable.db.close();
|
|
databasable.db = undefined;
|
|
}
|
|
},
|
|
|
|
collection: function(db_name, collection_name, options){
|
|
var databasable = this;
|
|
options = options || {};
|
|
return databasable.accessDb(db_name)
|
|
.then((db)=>{
|
|
if (!db || db !== databasable.db){
|
|
throw new Error('Databasable does not have db set.')
|
|
}
|
|
var collection = db.getCollection(collection_name)
|
|
if (!collection){
|
|
collection = db.addCollection(collection_name, options);
|
|
if (options && options.unique_indices){
|
|
options.unique_indices.forEach((field)=>{
|
|
collection.ensureUniqueIndex(field);
|
|
});
|
|
}
|
|
}
|
|
return collection;
|
|
});
|
|
},
|
|
|
|
rangeToLokiParams: function(attr, range){
|
|
var date_params = {};
|
|
if (range[0] !== undefined && range[0] !== undefined){
|
|
var start_condition = {},
|
|
end_condition = {};
|
|
date_params['$and'] = [start_condition, end_condition];
|
|
start_condition[attr] = {'$gte': range[0]};
|
|
end_condition[attr] = {'$lte': range[1]};
|
|
} else if (range[0] !== undefined) {
|
|
date_params[attr] = {'$gte': range[0]}
|
|
} else if (range[1] !== undefined) {
|
|
date_params[attr] = {'$lte': range[1]}
|
|
}
|
|
return date_params;
|
|
}
|
|
|
|
};
|
|
|
|
export default databasable;
|