diff --git a/lib/modelGenerators/default.js b/lib/modelGenerators/default.js index 620ebec..a57f977 100644 --- a/lib/modelGenerators/default.js +++ b/lib/modelGenerators/default.js @@ -1,12 +1,23 @@ var DataTypes = require('sequelize').DataTypes -exports.joiSchemaToSequelizeModel = function (resourceName, joiSchema) { - var model = { - id: { +exports.joiSchemaToSequelizeModel = function (resourceName, joiSchema, generateId) { + // if generateId == undefined, treat it as true (true is default) + var idCol = ((generateId == null || generateId) + ? ({ type: DataTypes.UUID, defaultValue: DataTypes.UUIDV4, primaryKey: true - }, + }) + : ({ + type: DataTypes.INTEGER, + autoIncrement: true, + primaryKey: true, + get: function () { + return this.getDataValue('id').toString() + } + })) + var model = { + id: idCol, type: { type: DataTypes.VIRTUAL, // We do not actually save this to DB, but API needs this set: function (val) { diff --git a/lib/modelGenerators/postgres.js b/lib/modelGenerators/postgres.js index 2e96623..1f33046 100644 --- a/lib/modelGenerators/postgres.js +++ b/lib/modelGenerators/postgres.js @@ -1,12 +1,22 @@ var DataTypes = require('sequelize').DataTypes -exports.joiSchemaToSequelizeModel = function (resourceName, joiSchema) { - var model = { - id: { +exports.joiSchemaToSequelizeModel = function (resourceName, joiSchema, generateId) { + var idCol = ((generateId == null || generateId) + ? ({ type: DataTypes.UUID, defaultValue: DataTypes.UUIDV4, primaryKey: true - }, + }) + : ({ + type: DataTypes.INTEGER, + autoIncrement: true, + primaryKey: true, + get: function () { + return this.getDataValue('id').toString() + } + })) + var model = { + id: idCol, type: { type: DataTypes.VIRTUAL, // We do not actually save this to DB, but API needs this set: function (val) { @@ -30,6 +40,10 @@ exports.joiSchemaToSequelizeModel = function (resourceName, joiSchema) { } Object.keys(joiSchema).forEach(function (attributeName) { + if (generateId === false && attributeName === 'id') { + return + } + var attribute = joiSchema[attributeName] if (attribute._type === 'string') model[attributeName] = { type: DataTypes.TEXT, allowNull: true } if (attribute._type === 'date') model[attributeName] = { type: DataTypes.DATE, allowNull: true } diff --git a/lib/sqlHandler.js b/lib/sqlHandler.js index 42a69a1..1b2de9f 100644 --- a/lib/sqlHandler.js +++ b/lib/sqlHandler.js @@ -142,12 +142,14 @@ SqlStore.prototype._buildModels = function () { case 'postgres': modelAttributes = modelGenerators.postgres.joiSchemaToSequelizeModel( self.resourceConfig.resource, - localAttributes) + localAttributes, + self.resourceConfig.generateId) break default: modelAttributes = modelGenerators.default.joiSchemaToSequelizeModel( self.resourceConfig.resource, - localAttributes) + localAttributes, + self.resourceConfig.generateId) } self.baseModel = self.sequelize.define(self.resourceConfig.resource, modelAttributes, { timestamps: false })