From ef7e9d74b4598b2577b1c4b274b495444f0d36ca Mon Sep 17 00:00:00 2001 From: Steffen Gundlach Date: Thu, 4 Jul 2024 20:06:11 +0200 Subject: [PATCH] fix: add support for the paranoid flag --- .github/PULL_REQUEST_TEMPLATE.md | 30 ++++++++++++++++++++++----- src/assets/migrations/create-table.js | 9 +++++++- src/assets/models/model.js | 4 +++- src/commands/model_generate.js | 13 +++++++++++- src/core/yargs.js | 10 +++++++++ src/helpers/migration-helper.js | 2 ++ src/helpers/model-helper.js | 1 + test/model/create.test.js | 4 ++-- 8 files changed, 63 insertions(+), 10 deletions(-) mode change 100644 => 100755 src/assets/migrations/create-table.js mode change 100644 => 100755 src/assets/models/model.js mode change 100644 => 100755 src/commands/model_generate.js mode change 100644 => 100755 src/core/yargs.js mode change 100644 => 100755 src/helpers/migration-helper.js mode change 100644 => 100755 src/helpers/model-helper.js diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 5c9340926..e9b5e41ef 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -11,13 +11,33 @@ You may skip the template below, if _Please make sure to review and check all of these items:_ -- [ ] Does `npm run test` pass with this change (including linting)? -- [ ] Does the description below contain a link to an existing issue (Closes #[issue]) or a description of the issue you are solving? -- [ ] Have you added new tests to prevent regressions? -- [ ] Is a documentation update included (if this change modifies existing APIs, or introduces new ones)? +- [x] Does `npm run test` pass with this change (including linting)? +- [x] Does the description below contain a link to an existing issue (Closes #1139) or a description of the issue you are solving? +- [x] Have you added new tests to prevent regressions? +- [x] Is a documentation update included (if this change modifies existing APIs, or introduces new ones)? ### Description of change +The following files have been changed: +>model_generate.js +>yargs.js +>model.js +>model-helper.js +>migration-helper.js +>create-table.js +>create.test.js - +solved issue: +>https://github.com/sequelize/cli/issues/1139 + +The following test has been adapted: +>model/create.test.js + +update to the documentation: + +>In order to be able to assign the paranoid flag via the CLI, it is possible to set the flag ```--paranoid true``` after the ```model:generate``` + +>You can also set the paranoid flag to true in the ```.sequelizerc``` , so all created models and migrations will be paranoid by default. + +>If you have set paranoid to true in the config, you can set paranoid to false for individual tables by setting the flag to ```--paranoid false``` via the CLI after the ```model:generate``` \ No newline at end of file diff --git a/src/assets/migrations/create-table.js b/src/assets/migrations/create-table.js old mode 100644 new mode 100755 index 6a6af8bd1..dad267dcf --- a/src/assets/migrations/create-table.js +++ b/src/assets/migrations/create-table.js @@ -25,7 +25,14 @@ module.exports = { <%= updatedAt %>: { allowNull: false, type: Sequelize.DATE - } + }, + + <% if (paranoid) { %> + deletedAt: { + type: Sequelize.DATE, + allowNull: true + }, + <% } %> }); }, diff --git a/src/assets/models/model.js b/src/assets/models/model.js old mode 100644 new mode 100755 index 930254e8f..d4c3c27da --- a/src/assets/models/model.js +++ b/src/assets/models/model.js @@ -9,7 +9,7 @@ module.exports = (sequelize, DataTypes) => { * This method is not a part of Sequelize lifecycle. * The `models/index` file will call this method automatically. */ - static associate (models) { + static associate(models) { // define association here } } @@ -23,6 +23,8 @@ module.exports = (sequelize, DataTypes) => { sequelize, modelName: '<%= name %>', <%= underscored ? 'underscored: true,' : '' %> + paranoid: <%= paranoid %>, + timestamps: true }); return <%= name %>; diff --git a/src/commands/model_generate.js b/src/commands/model_generate.js old mode 100644 new mode 100755 index 8809047d5..75db536e2 --- a/src/commands/model_generate.js +++ b/src/commands/model_generate.js @@ -1,8 +1,8 @@ import process from 'process'; import { _baseOptions, _underscoreOption } from '../core/yargs'; - import helpers from '../helpers'; import clc from 'cli-color'; +import getYArgs from '../core/yargs'; exports.builder = (yargs) => _underscoreOption( @@ -22,6 +22,17 @@ exports.builder = (yargs) => type: 'string', demandOption: false, }) + .option('paranoid', { + describe: 'Enable paranoid mode for soft deletes', + type: 'boolean', + demandOption: false, + default: getYArgs().argv.paranoid, + }) + .option('underscored', { + describe: "Use snake case for the timestamp's attribute names", + type: 'boolean', + default: false, + }) ).argv; exports.handler = function (args) { diff --git a/src/core/yargs.js b/src/core/yargs.js old mode 100644 new mode 100755 index 7a2a2d73e..1c8f25b85 --- a/src/core/yargs.js +++ b/src/core/yargs.js @@ -59,6 +59,16 @@ export function _baseOptions(yargs) { describe: 'When available show various debug information', default: false, type: 'boolean', + }) + .option('paranoid', { + describe: 'Enable paranoid mode for soft deletes', + default: false, + type: 'boolean', + }) + .option('underscored', { + describe: "Use snake case for the timestamp's attribute names", + default: false, + type: 'boolean', }); } diff --git a/src/helpers/migration-helper.js b/src/helpers/migration-helper.js old mode 100644 new mode 100755 index f44ea3e39..d03adc416 --- a/src/helpers/migration-helper.js +++ b/src/helpers/migration-helper.js @@ -14,6 +14,8 @@ module.exports = { attributes: helpers.model.transformAttributes(args.attributes), createdAt: args.underscored ? 'created_at' : 'createdAt', updatedAt: args.underscored ? 'updated_at' : 'updatedAt', + paranoid: args.paranoid, + underscored: args.underscored, }); }, diff --git a/src/helpers/model-helper.js b/src/helpers/model-helper.js old mode 100644 new mode 100755 index 2fb43c9fe..7eb080161 --- a/src/helpers/model-helper.js +++ b/src/helpers/model-helper.js @@ -112,6 +112,7 @@ module.exports = { name: args.name, attributes: this.transformAttributes(args.attributes), underscored: args.underscored, + paranoid: args.paranoid, }); }, diff --git a/test/model/create.test.js b/test/model/create.test.js index ddf38aa33..3ca53ab50 100644 --- a/test/model/create.test.js +++ b/test/model/create.test.js @@ -282,8 +282,8 @@ const _ = require('lodash'); }; const targetContent = attrUnd.underscored - ? "modelName: 'User',\n underscored: true,\n });" - : "modelName: 'User',\n });"; + ? "modelName: 'User',\n underscored: true,\n paranoid: false,\n timestamps: true\n });" + : "modelName: 'User',\n paranoid: false,\n timestamps: true\n });"; if (attrUnd.underscored) { flags.underscored = attrUnd.underscored;