You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

59 lines
1.2 KiB

  1. "use strict";
  2. var loki = require('lokijs'),
  3. fs = require("fs"),
  4. path = require("path"),
  5. Promise = require('bluebird'),
  6. _ = require('lodash');
  7. /**
  8. * Loki.js module
  9. *
  10. * @param {Object} appconfig Application config
  11. * @return {Object} LokiJS instance
  12. */
  13. module.exports = function(appconfig) {
  14. let dbReadyResolve;
  15. let dbReady = new Promise((resolve, reject) => {
  16. dbReadyResolve = resolve;
  17. });
  18. // Initialize Loki.js
  19. let dbModel = {
  20. Store: new loki(path.join(appconfig.datadir.db, 'app.db'), {
  21. env: 'NODEJS',
  22. autosave: true,
  23. autosaveInterval: 5000
  24. }),
  25. Models: {},
  26. onReady: dbReady
  27. };
  28. // Load Models
  29. let dbModelsPath = path.join(ROOTPATH, 'models/db');
  30. dbModel.Store.loadDatabase({}, () => {
  31. fs
  32. .readdirSync(dbModelsPath)
  33. .filter(function(file) {
  34. return (file.indexOf(".") !== 0);
  35. })
  36. .forEach(function(file) {
  37. let modelName = _.upperFirst(_.split(file,'.')[0]);
  38. dbModel.Models[modelName] = require(path.join(dbModelsPath, file));
  39. dbModel[modelName] = dbModel.Store.getCollection(modelName);
  40. if(!dbModel[modelName]) {
  41. dbModel[modelName] = dbModel.Store.addCollection(modelName);
  42. }
  43. });
  44. dbReadyResolve();
  45. });
  46. return dbModel;
  47. };