From 2ac591e38b33340330554e9d563d5556354488a1 Mon Sep 17 00:00:00 2001 From: Arnav Gupta Date: Fri, 3 Nov 2017 19:45:19 +0530 Subject: [PATCH 1/2] add generateId config support in data handler Signed-off-by: Arnav Gupta --- lib/modelGenerators/default.js | 18 ++++++++++++++---- lib/modelGenerators/postgres.js | 22 ++++++++++++++++++---- lib/sqlHandler.js | 6 ++++-- 3 files changed, 36 insertions(+), 10 deletions(-) diff --git a/lib/modelGenerators/default.js b/lib/modelGenerators/default.js index 620ebec..685bfa6 100644 --- a/lib/modelGenerators/default.js +++ b/lib/modelGenerators/default.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) { 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 }) From 19911b559f5e671a94e7be27018aadac91035437 Mon Sep 17 00:00:00 2001 From: Arnav Gupta Date: Fri, 3 Nov 2017 21:28:48 +0530 Subject: [PATCH 2/2] add comment about generateId default true --- lib/modelGenerators/default.js | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/modelGenerators/default.js b/lib/modelGenerators/default.js index 685bfa6..a57f977 100644 --- a/lib/modelGenerators/default.js +++ b/lib/modelGenerators/default.js @@ -1,6 +1,7 @@ var DataTypes = require('sequelize').DataTypes exports.joiSchemaToSequelizeModel = function (resourceName, joiSchema, generateId) { + // if generateId == undefined, treat it as true (true is default) var idCol = ((generateId == null || generateId) ? ({ type: DataTypes.UUID,