Emapic/emapic

View on GitHub
models/index.js

Summary

Maintainability
A
0 mins
Test Coverage
// Fix a bug related to timestamp without time zone and UTC in pg package
require('pg').types.setTypeParser(1114, function(stringValue) {
    return new Date(stringValue.substring(0, 10) + 'T' + stringValue.substring(11) + 'Z');
});

var Sequelize = require('sequelize'),
    fs = require("fs"),
    path = require("path"),
    sequelize = new Sequelize(conString, {
        define: {
            timestamps: false,
            // logging: console.log
        }
    }),
    globalClassMethods = {
        getFieldsToHideInDescription: function() {
            return [];
        }
    },
    globalInstanceMethods = {
        getDescription: function() {
            return this.getCustomFieldsDescription(
                Utils.extractProperties(this, this.getSequelizeModel().getFieldsToHideInDescription()));
        },

        getCustomFieldsDescription: function(fields) {
            return fields;
        },

        getSequelizeModel: function() {
            // Workaround to get model from instance in latest Sequelize versions
            return this._modelOptions.sequelize.models[this._modelOptions.name.singular];
        }
    },
    db = {};

fs.readdirSync(__dirname)
  .filter(function(file) {
    return (file.indexOf(".") !== 0) && (file !== "index.js");
  })
  .forEach(function(file) {
    var model = sequelize.import(path.join(__dirname, file));
    db[model.name] = model;
  });

Object.keys(db).forEach(function(modelName) {
  if ("associate" in db[modelName]) {
    db[modelName].associate(db);
  }
  for (fn in globalInstanceMethods) {
      if (!db[modelName].prototype[fn]) {
          db[modelName].prototype[fn] = globalInstanceMethods[fn];
      }
  }
  for (fn in globalClassMethods) {
      if (!db[modelName][fn]) {
          db[modelName][fn] = globalClassMethods[fn];
      }
  }
});

db.sequelize = sequelize;
db.Sequelize = Sequelize;

module.exports = db;