diff --git a/.plop/Model.ts.hbs b/.plop/Model.ts.hbs index 23233dc..09619eb 100644 --- a/.plop/Model.ts.hbs +++ b/.plop/Model.ts.hbs @@ -4,11 +4,20 @@ export const {{model.name}}Factory = (sequelize: Sequelize) => { const {{model.name}} = sequelize.define('{{model.name}}', { {{#each scalarFields}} {{name}}: { - type: DataTypes.{{type}}, + type: {{#if isList}}DataTypes.ARRAY(DataTypes.{{type}}){{else}}DataTypes.{{type}}{{/if}},{{#if (eq allowNull false)}} + allowNull: {{allowNull}},{{/if}}{{#if isId}} + primaryKey: {{isId}},{{/if}}{{#if isAutoincrement}} + autoIncrement: {{isAutoincrement}},{{/if}}{{#if isUnique}} + unique: {{isUnique}},{{/if}} }, {{/each}} }, { - tableName: '{{#if model.dbName}}{{model.dbName}}{{else}}{{model.name}}{{/if}}' + tableName: '{{#if model.dbName}}{{model.dbName}}{{else}}{{model.name}}{{/if}}', + timestamps: {{or (or hasCreatedAt hasUpdatedAt) hasDeletedAt}},{{#if (or (or hasCreatedAt hasUpdatedAt) hasDeletedAt)}}{{#if (eq hasCreatedAt false)}} + createdAt: false,{{/if}}{{#if (eq hasUpdatedAt false)}} + updatedAt: false,{{/if}}{{!-- {{#if (eq hasDeletedAt false)}} + deletedAt: false,{{/if}} --}}{{#if hasDeletedAt}} + paranoid: true,{{/if}}{{/if}} }); return {{model.name}}; diff --git a/.plop/plopfile.js b/.plop/plopfile.js index 7404dd8..86f8bb4 100644 --- a/.plop/plopfile.js +++ b/.plop/plopfile.js @@ -1,6 +1,19 @@ const path = require('path'); module.exports = function (plop) { + plop.setHelper('eq', (v1, v2) => v1 === v2); + plop.setHelper('ne', (v1, v2) => v1 !== v2); + plop.setHelper('lt', (v1, v2) => v1 < v2); + plop.setHelper('gt', (v1, v2) => v1 > v2); + plop.setHelper('lte', (v1, v2) => v1 <= v2); + plop.setHelper('gte', (v1, v2) => v1 >= v2); + plop.setHelper('and', function () { + return Array.prototype.every.call(arguments, Boolean); + }); + plop.setHelper('or', function () { + return Array.prototype.slice.call(arguments, 0, -1).some(Boolean); + }); + plop.setGenerator('utils', { actions: () => [ { diff --git a/prisma/models/Post.ts b/prisma/models/Post.ts index f3df138..6d9db12 100644 --- a/prisma/models/Post.ts +++ b/prisma/models/Post.ts @@ -4,12 +4,16 @@ export const PostFactory = (sequelize: Sequelize) => { const Post = sequelize.define('Post', { id: { type: DataTypes.INTEGER, + allowNull: false, + primaryKey: true, + autoIncrement: true, }, userId: { type: DataTypes.INTEGER, }, }, { - tableName: 'Posts' + tableName: 'Posts', + timestamps: false, }); return Post; diff --git a/prisma/models/User.ts b/prisma/models/User.ts index 4d918be..3942255 100644 --- a/prisma/models/User.ts +++ b/prisma/models/User.ts @@ -4,12 +4,14 @@ export const UserFactory = (sequelize: Sequelize) => { const User = sequelize.define('User', { id: { type: DataTypes.INTEGER, - }, - createdAt: { - type: DataTypes.DATE, + allowNull: false, + primaryKey: true, + autoIncrement: true, }, email: { type: DataTypes.STRING, + allowNull: false, + unique: true, }, weight: { type: DataTypes.FLOAT, @@ -24,13 +26,17 @@ export const UserFactory = (sequelize: Sequelize) => { type: DataTypes.INTEGER, }, keywords: { - type: DataTypes.STRING, + type: DataTypes.ARRAY(DataTypes.STRING), + allowNull: false, }, biography: { type: DataTypes.JSONB, + allowNull: false, }, }, { - tableName: 'User' + tableName: 'User', + timestamps: true, + updatedAt: false, }); return User; diff --git a/src/index.ts b/src/index.ts index 51568e4..956c004 100644 --- a/src/index.ts +++ b/src/index.ts @@ -59,17 +59,26 @@ generatorHandler({ relativeOutputDir, slsRelativeOutputDir, }), - ...options.dmmf.datamodel.models.map((model) => - modelGenerator.runActions({ + ...options.dmmf.datamodel.models.map((model) => { + const attributes = model.fields.map((field) => field.name); + return modelGenerator.runActions({ model, scalarFields: model.fields .filter((field) => field.kind === 'scalar') + .filter((field) => !['createdAt', 'updatedAt', 'deletedAt'].includes(field.name)) .map((field) => ({ + ...field, name: field.name, type: PrismaTypeToSequelizeType[field.type], + allowNull: !field.isRequired, + isAutoincrement: + field.hasDefaultValue && typeof field.default === 'object' && field.default.name === 'autoincrement', })), - }) - ), + hasCreatedAt: attributes.includes('createdAt'), + hasUpdatedAt: attributes.includes('updatedAt'), + hasDeletedAt: attributes.includes('deletedAt'), + }); + }), ]); } catch (e) { console.error('Error: unable to write files for Prisma Sequelize Generator');