0.0.9 • Published 1 year ago

roles-permission-user-modules v0.0.9

Weekly downloads
-
License
MIT
Repository
-
Last release
1 year ago

//import file need follo this 1. env .env.local 2.migrations file A. 20230600000001-create-refresh-token.js const config = require('../src/config/vars'); /* @type {import('sequelize-cli').Migration} / module.exports = { async up(queryInterface, Sequelize) { await queryInterface.createTable( 'refreshToken', { id: { allowNull: false, autoIncrement: true, primaryKey: true, type: Sequelize.INTEGER, }, userId: { allowNull: false, type: Sequelize.INTEGER, }, token: { allowNull: false, type: Sequelize.STRING, }, createdAt: { allowNull: false, type: Sequelize.DATE, defaultValue: new Date(), }, updatedAt: { allowNull: false, type: Sequelize.DATE, defaultValue: new Date(), }, }, { schema: config.db.schema, }, { freezeTableName: true, } ); }, async down(queryInterface) { await queryInterface.dropTable('refreshToken'); }, }; B. 20230600000002-create-users.js

const config = require('../src/config/vars');

/* @type {import('sequelize-cli').Migration} /

module.exports = { async up(queryInterface, Sequelize) { await queryInterface.createTable( 'users', { id: { allowNull: false, autoIncrement: true, primaryKey: true, type: Sequelize.INTEGER, }, userName: { type: Sequelize.STRING, }, password: { type: Sequelize.STRING, }, email: { type: Sequelize.STRING, }, mobile: { type: Sequelize.STRING, validate: { is: /^\d{10}$/, }, }, firstName: { type: Sequelize.STRING, }, lastName: { type: Sequelize.STRING, }, fatherName: { type: Sequelize.STRING, }, dob: { type: Sequelize.DATEONLY, }, gender: { type: Sequelize.ENUM('Male', 'Female', 'Prefer not to say'), }, street1: { type: Sequelize.STRING, }, street2: { type: Sequelize.STRING, }, pincode: { type: Sequelize.STRING, }, country: { type: Sequelize.STRING, }, state: { type: Sequelize.STRING, }, city: { type: Sequelize.STRING, }, isAdmin: { type: Sequelize.BOOLEAN, }, userStatus: { type: Sequelize.STRING, }, isTrash: { type: Sequelize.BOOLEAN, }, inviteDate: { type: Sequelize.DATE, }, resendLinkCount: { type: Sequelize.INTEGER, }, isResetByMail: { type: Sequelize.BOOLEAN, }, resetMailTime: { type: Sequelize.DATE, }, privacyURL: { type: Sequelize.STRING, }, imageName: { type: Sequelize.STRING, }, created_by: { type: Sequelize.INTEGER, references: { model: 'users', key: 'id', }, onDelete: 'CASCADE', }, updated_by: { type: Sequelize.INTEGER, references: { model: 'users', key: 'id', }, onDelete: 'CASCADE', }, createdAt: { allowNull: false, type: Sequelize.DATE, defaultValue: new Date(), }, updatedAt: { allowNull: false, type: Sequelize.DATE, defaultValue: new Date(), }, }, { schema: config.db.schema, freezeTableName: true, } ); }, async down(queryInterface) { await queryInterface.dropTable('users'); }, };

C. 20230600000003-create-modules.js

const config = require('../src/config/vars'); /* @type {import('sequelize-cli').Migration} / module.exports = { async up(queryInterface, Sequelize) { await queryInterface.createTable( 'modules', { id: { allowNull: false, autoIncrement: true, primaryKey: true, type: Sequelize.INTEGER, }, name: { type: Sequelize.STRING, }, key: { type: Sequelize.STRING, }, created_by: { type: Sequelize.INTEGER, references: { model: 'users', key: 'id', }, onDelete: 'CASCADE', }, updated_by: { type: Sequelize.INTEGER, references: { model: 'users', key: 'id', }, onDelete: 'CASCADE', }, isActive: { allowNull: false, type: Sequelize.BOOLEAN, }, orderId: { allowNull: false, type: Sequelize.INTEGER, }, isCard: { allowNull: false, type: Sequelize.BOOLEAN, }, cardColor: { allowNull: false, type: Sequelize.STRING, }, cardBg: { allowNull: false, type: Sequelize.STRING, }, redirectURL: { allowNull: false, type: Sequelize.STRING, }, createdAt: { allowNull: false, type: Sequelize.DATE, defaultValue: new Date(), }, updatedAt: { allowNull: false, type: Sequelize.DATE, defaultValue: new Date(), }, }, { schema: config.db.schema, }, { freezeTableName: true, } ); }, async down(queryInterface) { await queryInterface.dropTable('modules'); }, };

D. 20230600000004-create-features.js

const config = require('../src/config/vars'); /* @type {import('sequelize-cli').Migration} / module.exports = { async up(queryInterface, Sequelize) { await queryInterface.createTable( 'features', { id: { allowNull: false, autoIncrement: true, primaryKey: true, type: Sequelize.INTEGER, }, name: { type: Sequelize.STRING, }, key: { type: Sequelize.STRING, }, group_id: { type: Sequelize.INTEGER, }, isProtected: { type: Sequelize.BOOLEAN, }, orderId: { type: Sequelize.INTEGER, }, created_by: { type: Sequelize.INTEGER, references: { model: 'users', key: 'id', }, onDelete: 'CASCADE', }, updated_by: { type: Sequelize.INTEGER, references: { model: 'users', key: 'id', }, onDelete: 'CASCADE', }, isActive: { type: Sequelize.BOOLEAN, }, createdAt: { allowNull: false, type: Sequelize.DATE, defaultValue: new Date(), }, updatedAt: { allowNull: false, type: Sequelize.DATE, defaultValue: new Date(), }, }, { schema: config.db.schema, }, { freezeTableName: true, } ); }, async down(queryInterface) { await queryInterface.dropTable('features'); }, };

E. 20230600000005-create-module-features.js

const config = require('../src/config/vars'); /* @type {import('sequelize-cli').Migration} / module.exports = { async up(queryInterface, Sequelize) { await queryInterface.createTable( 'moduleFeatures', { id: { allowNull: false, autoIncrement: true, primaryKey: true, type: Sequelize.INTEGER, }, module_id: { type: Sequelize.INTEGER, references: { model: 'modules', key: 'id', }, onDelete: 'CASCADE', }, feature_id: { type: Sequelize.INTEGER, references: { model: 'features', key: 'id', }, onDelete: 'CASCADE', }, createdAt: { allowNull: false, type: Sequelize.DATE, defaultValue: new Date(), }, updatedAt: { allowNull: false, type: Sequelize.DATE, defaultValue: new Date(), }, }, { schema: config.db.schema, }, { freezeTableName: true, } ); }, async down(queryInterface) { await queryInterface.dropTable('moduleFeatures'); }, };

F. 20230600000006-create-roles.js

const config = require('../src/config/vars'); /* @type {import('sequelize-cli').Migration} / module.exports = { async up(queryInterface, Sequelize) { await queryInterface.createTable( 'roles', { id: { allowNull: false, autoIncrement: true, primaryKey: true, type: Sequelize.INTEGER, }, name: { type: Sequelize.STRING, }, key: { type: Sequelize.STRING, }, created_by: { type: Sequelize.INTEGER, references: { model: 'users', key: 'id', }, onDelete: 'CASCADE', }, updated_by: { type: Sequelize.INTEGER, references: { model: 'users', key: 'id', }, onDelete: 'CASCADE', }, module_id: { type: Sequelize.INTEGER, references: { model: 'modules', key: 'id', }, onDelete: 'CASCADE', }, isActive: { type: Sequelize.BOOLEAN, }, createdAt: { allowNull: false, type: Sequelize.DATE, defaultValue: new Date(), }, updatedAt: { allowNull: false, type: Sequelize.DATE, defaultValue: new Date(), }, }, { schema: config.db.schema, }, { freezeTableName: true, } ); }, async down(queryInterface) { await queryInterface.dropTable('roles'); }, };

G. 20230600000007-create-role-features.js

const config = require('../src/config/vars'); /* @type {import('sequelize-cli').Migration} / module.exports = { async up(queryInterface, Sequelize) { await queryInterface.createTable( 'roleFeatures', { id: { allowNull: false, autoIncrement: true, primaryKey: true, type: Sequelize.INTEGER, }, role_id: { type: Sequelize.INTEGER, references: { model: 'roles', key: 'id', }, onDelete: 'CASCADE', }, feature_id: { type: Sequelize.INTEGER, references: { model: 'features', key: 'id', }, onDelete: 'CASCADE', }, createdAt: { allowNull: false, type: Sequelize.DATE, defaultValue: new Date(), }, updatedAt: { allowNull: false, type: Sequelize.DATE, defaultValue: new Date(), }, }, { schema: config.db.schema, }, { freezeTableName: true, } ); }, async down(queryInterface) { await queryInterface.dropTable('roleFeatures'); }, };

H. 20230600000008-create-user-module-roles.js

const config = require('../src/config/vars'); /* @type {import('sequelize-cli').Migration} / module.exports = { async up(queryInterface, Sequelize) { await queryInterface.createTable( 'userModuleRoles', { id: { allowNull: false, autoIncrement: true, primaryKey: true, type: Sequelize.INTEGER, }, user_id: { type: Sequelize.INTEGER, references: { model: 'users', key: 'id', }, onDelete: 'CASCADE', }, module_id: { type: Sequelize.INTEGER, references: { model: 'modules', key: 'id', }, onDelete: 'CASCADE', }, role_id: { type: Sequelize.INTEGER, references: { model: 'roles', key: 'id', }, onDelete: 'CASCADE', }, created_by: { type: Sequelize.INTEGER, references: { model: 'users', key: 'id', }, onDelete: 'CASCADE', }, updated_by: { type: Sequelize.INTEGER, references: { model: 'users', key: 'id', }, onDelete: 'CASCADE', }, createdAt: { allowNull: false, type: Sequelize.DATE, defaultValue: new Date(), }, updatedAt: { allowNull: false, type: Sequelize.DATE, defaultValue: new Date(), }, }, { schema: config.db.schema, }, { freezeTableName: true, } ); }, async down(queryInterface) { await queryInterface.dropTable('userModuleRoles'); }, };

// 3. models File A. features.js const { Model } = require('sequelize'); const config = require('../src/config/vars');

        module.exports = (sequelize, DataTypes) => {
        class features extends Model {}
        features.init(
            {
            name: DataTypes.STRING,
            key: DataTypes.STRING,
            group_id: DataTypes.INTEGER,
            isProtected: DataTypes.BOOLEAN,
            orderId: DataTypes.INTEGER,
            created_by: DataTypes.INTEGER,
            updated_by: DataTypes.INTEGER,
            isActive: DataTypes.BOOLEAN,
            },
            {
            sequelize,
            modelName: 'features',
            schema: config.db.schema,
            freezeTableName: true,
            }
        );
        features.associate = function (models) {
            features.belongsToMany(models.roles, {
            through: 'roleFeatures',
            as: 'roles',
            foreignKey: 'feature_id',
            });
            features.belongsToMany(models.modules, {
            through: 'moduleFeatures',
            as: 'modules',
            foreignKey: 'feature_id',
            });
            features.belongsTo(models.users, { foreignKey: 'created_by', as: 'createUser' });
            features.belongsTo(models.users, { foreignKey: 'updated_by', as: 'updateUser' });
            // features.belongsTo(models.group, { foreignKey: 'group_id', as: 'group' });
        };
        return features;
        };

                B. index.js

                            /* eslint-disable global-require */
                /* eslint-disable import/no-dynamic-require */
                /* eslint-disable security/detect-non-literal-require */
                const fs = require('fs');
                const path = require('path');
                const Sequelize = require('sequelize');

                const basename = path.basename(__filename);
                const config = require(`../src/config/vars.js`).db;

                const { db } = require('../src/config/vars');

                const sequelize = new Sequelize(config.database, config.username, config.password, {
                host: config.host,
                dialect: config.dialect,
                schema: config.schema,
                logging: false,
                });

                fs.readdirSync(__dirname)
                .filter((file) => {
                    return file.indexOf('.') !== 0 && file !== basename && file.slice(-3) === '.js';
                })
                .forEach((file) => {
                    const model = require(path.join(__dirname, file))(sequelize, Sequelize.DataTypes);
                    db[model.name] = model;
                });

                Object.keys(db).forEach((modelName) => {
                if (db[modelName].associate) {
                    db[modelName].associate(db);
                }
                });

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

                module.exports = db;


           C. modulefeatures.js

            const { Model } = require('sequelize');
            const config = require('../src/config/vars');

            module.exports = (sequelize, DataTypes) => {
            class moduleFeatures extends Model {}
            moduleFeatures.init(
                {
                module_id: DataTypes.INTEGER,
                feature_id: DataTypes.INTEGER,
                },
                {
                sequelize,
                modelName: 'moduleFeatures',
                schema: config.db.schema,
                freezeTableName: true,
                }
            );
            moduleFeatures.associate = function (models) {
                moduleFeatures.belongsTo(models.modules, { foreignKey: 'module_id', as: 'modules' });
                moduleFeatures.belongsTo(models.features, { foreignKey: 'feature_id', as: 'features' });
            };
            return moduleFeatures;
            };
        D.Modules.js

            const { Model } = require('sequelize');
            const config = require('../src/config/vars');

            module.exports = (sequelize, DataTypes) => {
            class modules extends Model {}
            modules.init(
                {
                name: DataTypes.STRING,
                key: DataTypes.STRING,
                created_by: DataTypes.INTEGER,
                updated_by: DataTypes.INTEGER,
                isActive: DataTypes.BOOLEAN,
                orderId: DataTypes.INTEGER,
                isCard: DataTypes.BOOLEAN,
                cardColor: DataTypes.STRING,
                cardBg: DataTypes.STRING,
                redirectURL: DataTypes.STRING,
                },
                {
                sequelize,
                modelName: 'modules',
                schema: config.db.schema,
                freezeTableName: true,
                }
            );
            modules.associate = function (models) {
                modules.belongsToMany(models.features, {
                through: 'moduleFeatures',
                as: 'features',
                foreignKey: 'module_id',
                });
                modules.hasMany(models.userModuleRoles, { foreignKey: 'module_id', as: 'userModuleRoles' });
                modules.belongsTo(models.users, { foreignKey: 'created_by', as: 'createUser' });
                modules.belongsTo(models.users, { foreignKey: 'updated_by', as: 'updateUser' });
                modules.hasMany(models.roles, { foreignKey: 'module_id', as: 'roles' });
                // modules.hasMany(models.jobs, { foreignKey: 'department_id', as: 'departmentJob' });
            };
            return modules;
            };

        E.refreshtoken.js

            const { Model } = require('sequelize');
            const config = require('../src/config/vars');

            module.exports = (sequelize, DataTypes) => {
            class refreshToken extends Model {}
            refreshToken.init(
                {
                userId: DataTypes.INTEGER,
                token: DataTypes.STRING,
                },
                {
                sequelize,
                modelName: 'refreshToken',
                schema: config.db.schema,
                freezeTableName: true,
                }
            );
            return refreshToken;
            };

        F. rolefeatures.js

        const { Model } = require('sequelize');
        const config = require('../src/config/vars');

        module.exports = (sequelize, DataTypes) => {
        class roleFeatures extends Model {}
        roleFeatures.init(
            {
            role_id: DataTypes.INTEGER,
            feature_id: DataTypes.INTEGER,
            },
            {
            sequelize,
            modelName: 'roleFeatures',
            schema: config.db.schema,
            freezeTableName: true,
            }
        );
        roleFeatures.associate = function (models) {
            roleFeatures.belongsTo(models.features, { foreignKey: 'feature_id', as: 'features' });
            roleFeatures.belongsTo(models.roles, { foreignKey: 'role_id', as: 'roles' });
        };
        return roleFeatures;
        };

        G. roles 

        const { Model } = require('sequelize');
        const config = require('../src/config/vars');

        module.exports = (sequelize, DataTypes) => {
        class roles extends Model {}
        roles.init(
            {
            name: DataTypes.STRING,
            key: DataTypes.STRING,
            created_by: DataTypes.INTEGER,
            updated_by: DataTypes.INTEGER,
            module_id: DataTypes.INTEGER,
            isActive: DataTypes.BOOLEAN,
            },
            {
            sequelize,
            modelName: 'roles',
            schema: config.db.schema,
            freezeTableName: true,
            }
        );
        roles.associate = function (models) {
            roles.belongsToMany(models.features, {
            through: 'roleFeatures',
            as: 'features',
            foreignKey: 'role_id',
            });
            roles.hasMany(models.userModuleRoles, { foreignKey: 'role_id', as: 'userModuleRoles' });
            roles.belongsTo(models.users, { foreignKey: 'created_by', as: 'userCreate' });
            roles.belongsTo(models.users, { foreignKey: 'updated_by', as: 'userUpdate' });
            roles.belongsTo(models.modules, { foreignKey: 'module_id', as: 'modules' });
        };
        return roles;
        };

        H.userauthoraccess.js

             const { Model } = require('sequelize');
            const config = require('../src/config/vars');

            module.exports = (sequelize, DataTypes) => {
            class userAuthorAccess extends Model {}
            userAuthorAccess.init(
                {
                user_id: DataTypes.INTEGER,
                user_accessId: DataTypes.INTEGER,
                },
                {
                sequelize,
                modelName: 'userAuthorAccess',
                schema: config.db.schema,
                freezeTableName: true,
                }
            );
            userAuthorAccess.associate = function (models) {
                userAuthorAccess.belongsTo(models.users, { foreignKey: 'user_id', as: 'user' });
                // userAuthorAccess.belongsTo(models.authorAccess, { foreignKey: 'user_accessId', as: 'author' });
            };
            return userAuthorAccess;
            };
       I. usermoduleroles.js

                const { Model } = require('sequelize');
                const config = require('../src/config/vars');

                module.exports = (sequelize, DataTypes) => {
                class userModuleRoles extends Model {}
                userModuleRoles.init(
                    {
                    user_id: DataTypes.INTEGER,
                    module_id: DataTypes.INTEGER,
                    role_id: DataTypes.INTEGER,
                    created_by: DataTypes.INTEGER,
                    updated_by: DataTypes.INTEGER,
                    },
                    {
                    sequelize,
                    modelName: 'userModuleRoles',
                    schema: config.db.schema,
                    freezeTableName: true,
                    }
                );
                userModuleRoles.associate = function (models) {
                    userModuleRoles.belongsTo(models.modules, { foreignKey: 'module_id', as: 'module' });
                    userModuleRoles.belongsTo(models.roles, { foreignKey: 'role_id', as: 'role' });
                    userModuleRoles.belongsTo(models.users, { foreignKey: 'user_id', as: 'user' });
                    userModuleRoles.belongsTo(models.users, { foreignKey: 'created_by', as: 'createUser' });
                    userModuleRoles.belongsTo(models.users, { foreignKey: 'updated_by', as: 'updateUser' });
                };
                return userModuleRoles;
                };

        J. users.js
            const { Model } = require('sequelize');
            const config = require('../src/config/vars');

            module.exports = (sequelize, DataTypes) => {
            class users extends Model {}
            users.init(
                {
                userName: DataTypes.STRING,
                password: DataTypes.STRING,
                email: DataTypes.STRING,
                mobile: DataTypes.STRING,
                firstName: DataTypes.STRING,
                lastName: DataTypes.STRING,
                fatherName: DataTypes.STRING,
                dob: DataTypes.DATEONLY,
                gender: DataTypes.ENUM('Male', 'Female', 'Prefer not to say'),
                street1: DataTypes.STRING,
                street2: DataTypes.STRING,
                pincode: DataTypes.STRING,
                country: DataTypes.STRING,
                state: DataTypes.STRING,
                city: DataTypes.STRING,
                isAdmin: DataTypes.BOOLEAN,
                userStatus: DataTypes.STRING,
                isTrash: DataTypes.BOOLEAN,
                inviteDate: DataTypes.DATE,
                resendLinkCount: DataTypes.INTEGER,
                isResetByMail: DataTypes.BOOLEAN,
                resetMailTime: DataTypes.DATE,
                privacyURL: DataTypes.STRING,
                imageName: DataTypes.STRING,
                created_by: DataTypes.INTEGER,
                updated_by: DataTypes.INTEGER,
                // bio: DataTypes.STRING,
                // authorStatus: DataTypes.STRING,
                // executiveId: DataTypes.INTEGER,
                },
                {
                sequelize,
                modelName: 'users',
                schema: config.db.schema,
                freezeTableName: true,
                }
            );
            users.associate = function (models) {
                users.hasMany(models.userModuleRoles, { foreignKey: 'user_id', as: 'user' });
                users.hasMany(models.userModuleRoles, { foreignKey: 'created_by', as: 'userCreate' });
                users.hasMany(models.userModuleRoles, { foreignKey: 'updated_by', as: 'userUpdate' });

                users.hasMany(models.features, { foreignKey: 'created_by', as: 'featureCreate' });
                users.hasMany(models.features, { foreignKey: 'updated_by', as: 'featureUpdate' });

                users.hasMany(models.modules, { foreignKey: 'created_by', as: 'moduleCreate' });
                users.hasMany(models.modules, { foreignKey: 'updated_by', as: 'moduleUpdate' });

                users.hasMany(models.roles, { foreignKey: 'created_by', as: 'roleCreate' });
                users.hasMany(models.roles, { foreignKey: 'updated_by', as: 'roleUpdate' });

                users.belongsTo(models.users, { foreignKey: 'created_by', as: 'createBy' });
                users.belongsTo(models.users, { foreignKey: 'updated_by', as: 'updateBy' });

            };
            return users;
            };
  1. seeders file
    A.20231016055331-users.js

            const jwt = require('jsonwebtoken');
            const { Sequelize } = require('sequelize');
            const config = require('../src/config/vars');
            /** @type {import('sequelize-cli').Migration} */
            const encryptedPassword = jwt.sign(
            {
                password: 'Demo@123',
            },
            config.app.accesstoken
            );
            module.exports = {
            async up(queryInterface) {
                return queryInterface.bulkInsert(
                { tableName: 'users', schema: config.db.schema },
                [
                    {
                    userName: 'Sheshiadmin',
                    email: 'mahakaal@admin.ai',
                    password: encryptedPassword,
                    mobile: '9855433254',
                    firstName: 'Fernandus',
                    lastName: 'Ferro',
                    gender: 'Male',
                    pincode: '560041',
                    country: 'India',
                    state: 'Karnataka',
                    city: 'Bangalore South',
                    isResetByMail: false,
                    isAdmin: true,
                    userStatus: 'Active',
                    isTrash: false,
                    createdAt: Sequelize.literal('NOW()'),
                    updatedAt: Sequelize.literal('NOW()'),
                    },
                    {
                    userName: 'Jothi2810',
                    email: 'jothi@admin.ai',
                    password: encryptedPassword,
                    mobile: '9855433200',
                    firstName: 'Jothi',
                    lastName: 'Krishana',
                    gender: 'Male',
                    pincode: '560041',
                    country: 'India',
                    state: 'Karnataka',
                    city: 'Bangalore South',
                    isResetByMail: false,
                    isAdmin: false,
                    userStatus: 'Active',
                    isTrash: false,
                    createdAt: Sequelize.literal('NOW()'),
                    updatedAt: Sequelize.literal('NOW()'),
                    },
                ],
                {}
                );
            },

            async down(queryInterface) {
                return queryInterface.bulkDelete({ tableName: 'users', schema: config.db.schema }, null, {});
            },
            };


            B.20231016055332-modules.js

                    const config = require('../src/config/vars');
                    /** @type {import('sequelize-cli').Migration} */
                    module.exports = {
                    async up(queryInterface) {
                        return queryInterface.bulkInsert(
                        { tableName: 'modules', schema: config.db.schema },
                        [
                            {
                            name: 'Sales',
                            key: 'sales',
                            created_by: 1,
                            updated_by: 1,
                            isActive: true,
                            orderId: 1,
                            isCard: true,
                            cardColor: '',
                            cardBg: '',
                            redirectURL: '',
                            },
                            {
                            name: 'Marketing',
                            key: 'marketing',
                            created_by: 1,
                            updated_by: 1,
                            isActive: true,
                            orderId: 2,
                            isCard: true,
                            cardColor: '',
                            cardBg: '',
                            redirectURL: '',
                            },
                            {
                            name: 'Product',
                            key: 'product',
                            created_by: 1,
                            updated_by: 1,
                            isActive: true,
                            orderId: 3,
                            isCard: true,
                            cardColor: '',
                            cardBg: '',
                            redirectURL: '',
                            },
                            {
                            name: 'Design',
                            key: 'design',
                            created_by: 1,
                            updated_by: 1,
                            isActive: true,
                            orderId: 4,
                            isCard: true,
                            cardColor: '',
                            cardBg: '',
                            redirectURL: '',
                            },
                            {
                            name: 'Customer Success',
                            key: 'customerSuccess',
                            created_by: 1,
                            updated_by: 1,
                            isActive: true,
                            orderId: 5,
                            isCard: true,
                            cardColor: '',
                            cardBg: '',
                            redirectURL: '',
                            },
                            {
                            name: 'Development',
                            key: 'development',
                            created_by: 1,
                            updated_by: 1,
                            isActive: true,
                            orderId: 6,
                            isCard: true,
                            cardColor: '',
                            cardBg: '',
                            redirectURL: '',
                            },
                            {
                            name: 'Web Content',
                            key: 'webContent',
                            created_by: 1,
                            updated_by: 1,
                            isActive: true,
                            orderId: 7,
                            isCard: true,
                            cardColor: '',
                            cardBg: '',
                            redirectURL: '',
                            },
                            {
                            name: 'Human Resources',
                            key: 'humanResources',
                            created_by: 1,
                            updated_by: 1,
                            isActive: true,
                            orderId: 8,
                            isCard: true,
                            cardColor: '',
                            cardBg: '',
                            redirectURL: '',
                            },
                        ],
                        {}
                        );
                    },

                    async down(queryInterface) {
                        return queryInterface.bulkDelete({ tableName: 'modules', schema: config.db.schema }, null, {});
                    },
                    };

        C.20231016055333-features.js

                const { Sequelize } = require('sequelize');
                const config = require('../src/config/vars');
                /** @type {import('sequelize-cli').Migration} */
                module.exports = {
                async up(queryInterface) {
                    return queryInterface.bulkInsert(
                    { tableName: 'features', schema: config.db.schema },
                    [
                        {
                        name: 'Add Users',
                        key: 'addUsers',
                        isActive: true,
                        group_id: 1,
                        isProtected: true,
                        orderId: 1,
                        created_by: 1,
                        updated_by: 1,
                        createdAt: Sequelize.literal('NOW()'),
                        updatedAt: Sequelize.literal('NOW()'),
                        },
                        {
                        name: 'Add/Edit Roles',
                        key: 'addeditRoles',
                        isActive: true,
                        group_id: 1,
                        isProtected: true,
                        orderId: 2,
                        created_by: 1,
                        updated_by: 1,
                        createdAt: Sequelize.literal('NOW()'),
                        updatedAt: Sequelize.literal('NOW()'),
                        },
                        {
                        name: 'Add Organization',
                        key: 'addOrganization',
                        isActive: true,
                        group_id: 2,
                        isProtected: false,
                        orderId: 3,
                        created_by: 1,
                        updated_by: 1,
                        createdAt: Sequelize.literal('NOW()'),
                        updatedAt: Sequelize.literal('NOW()'),
                        },
                        {
                        name: 'Extend Plan',
                        key: 'extendPlan',
                        isActive: true,
                        group_id: 2,
                        isProtected: false,
                        orderId: 4,
                        created_by: 1,
                        updated_by: 1,
                        createdAt: Sequelize.literal('NOW()'),
                        updatedAt: Sequelize.literal('NOW()'),
                        },
                        {
                        name: 'Upgrade Plan',
                        key: 'upgradePlan',
                        isActive: true,
                        group_id: 2,
                        isProtected: false,
                        orderId: 5,
                        created_by: 1,
                        updated_by: 1,
                        createdAt: Sequelize.literal('NOW()'),
                        updatedAt: Sequelize.literal('NOW()'),
                        },
                        {
                        name: 'Block Organization',
                        key: 'blockOrganization',
                        isActive: true,
                        group_id: 2,
                        isProtected: false,
                        orderId: 6,
                        created_by: 1,
                        updated_by: 1,
                        createdAt: Sequelize.literal('NOW()'),
                        updatedAt: Sequelize.literal('NOW()'),
                        },
                        {
                        name: 'Unblock Organization',
                        key: 'unblockOrganization',
                        isActive: true,
                        group_id: 2,
                        isProtected: false,
                        orderId: 7,
                        created_by: 1,
                        updated_by: 1,
                        createdAt: Sequelize.literal('NOW()'),
                        updatedAt: Sequelize.literal('NOW()'),
                        },
                        {
                        name: 'Reset Password',
                        key: 'resetPassword',
                        isActive: true,
                        group_id: 2,
                        isProtected: false,
                        orderId: 8,
                        created_by: 1,
                        updated_by: 1,
                        createdAt: Sequelize.literal('NOW()'),
                        updatedAt: Sequelize.literal('NOW()'),
                        },
                        {
                        name: 'Add Plans',
                        key: 'addPlans',
                        isActive: true,
                        group_id: 3,
                        isProtected: false,
                        orderId: 9,
                        created_by: 1,
                        updated_by: 1,
                        createdAt: Sequelize.literal('NOW()'),
                        updatedAt: Sequelize.literal('NOW()'),
                        },
                        {
                        name: 'Activate / Deactivate Plan',
                        key: 'activateDeactivatePlan',
                        isActive: true,
                        group_id: 3,
                        isProtected: false,
                        orderId: 10,
                        created_by: 1,
                        updated_by: 1,
                        createdAt: Sequelize.literal('NOW()'),
                        updatedAt: Sequelize.literal('NOW()'),
                        },
                        {
                        name: 'Plan Search',
                        key: 'planSearch',
                        isActive: true,
                        group_id: 3,
                        isProtected: false,
                        orderId: 11,
                        created_by: 1,
                        updated_by: 1,
                        createdAt: Sequelize.literal('NOW()'),
                        updatedAt: Sequelize.literal('NOW()'),
                        },
                        {
                        name: 'Plan Downloads',
                        key: 'planDownloads',
                        isActive: true,
                        group_id: 3,
                        isProtected: false,
                        orderId: 12,
                        created_by: 1,
                        updated_by: 1,
                        createdAt: Sequelize.literal('NOW()'),
                        updatedAt: Sequelize.literal('NOW()'),
                        },
                        {
                        name: 'Organization Search',
                        key: 'organizationSearch',
                        isActive: true,
                        group_id: 2,
                        isProtected: false,
                        orderId: 13,
                        created_by: 1,
                        updated_by: 1,
                        createdAt: Sequelize.literal('NOW()'),
                        updatedAt: Sequelize.literal('NOW()'),
                        },
                        {
                        name: 'Organization Downloads',
                        key: 'organizationDownloads',
                        isActive: true,
                        group_id: 2,
                        isProtected: false,
                        orderId: 14,
                        created_by: 1,
                        updated_by: 1,
                        createdAt: Sequelize.literal('NOW()'),
                        updatedAt: Sequelize.literal('NOW()'),
                        },
                        {
                        name: 'Others',
                        key: 'others',
                        isActive: true,
                        group_id: 1,
                        isProtected: false,
                        orderId: 15,
                        created_by: 1,
                        updated_by: 1,
                        createdAt: Sequelize.literal('NOW()'),
                        updatedAt: Sequelize.literal('NOW()'),
                        },
                        {
                        name: 'Delete Role',
                        key: 'deleteRole',
                        isActive: true,
                        group_id: 1,
                        isProtected: true,
                        orderId: 2,
                        created_by: 1,
                        updated_by: 1,
                        createdAt: Sequelize.literal('NOW()'),
                        updatedAt: Sequelize.literal('NOW()'),
                        },
                        {
                        name: 'Edit Users',
                        key: 'editUsers',
                        isActive: true,
                        group_id: 1,
                        isProtected: true,
                        orderId: 2,
                        created_by: 1,
                        updated_by: 1,
                        createdAt: Sequelize.literal('NOW()'),
                        updatedAt: Sequelize.literal('NOW()'),
                        },
                        {
                        name: 'Delete Users',
                        key: 'deleteUsers',
                        isActive: true,
                        group_id: 1,
                        isProtected: true,
                        orderId: 2,
                        created_by: 1,
                        updated_by: 1,
                        createdAt: Sequelize.literal('NOW()'),
                        updatedAt: Sequelize.literal('NOW()'),
                        },
                        {
                        name: 'Permanent Delete',
                        key: 'permanentDelete',
                        isActive: true,
                        group_id: 4,
                        isProtected: false,
                        orderId: 16,
                        created_by: 1,
                        updated_by: 1,
                        createdAt: Sequelize.literal('NOW()'),
                        updatedAt: Sequelize.literal('NOW()'),
                        },
                        {
                        name: 'View Author',
                        key: 'viewAuthor',
                        isActive: true,
                        group_id: 4,
                        isProtected: false,
                        orderId: 17,
                        created_by: 1,
                        updated_by: 1,
                        createdAt: Sequelize.literal('NOW()'),
                        updatedAt: Sequelize.literal('NOW()'),
                        },
                        {
                        name: 'Add Author',
                        key: 'addAuthor',
                        isActive: true,
                        group_id: 4,
                        isProtected: false,
                        orderId: 18,
                        created_by: 1,
                        updated_by: 1,
                        createdAt: Sequelize.literal('NOW()'),
                        updatedAt: Sequelize.literal('NOW()'),
                        },
                        {
                        name: 'Edit Author Self',
                        key: 'editAuthorSelf',
                        isActive: true,
                        group_id: 4,
                        isProtected: false,
                        orderId: 19,
                        created_by: 1,
                        updated_by: 1,
                        createdAt: Sequelize.literal('NOW()'),
                        updatedAt: Sequelize.literal('NOW()'),
                        },
                        {
                        name: 'Add Category',
                        key: 'addCategory',
                        isActive: true,
                        group_id: 4,
                        isProtected: false,
                        orderId: 20,
                        created_by: 1,
                        updated_by: 1,
                        createdAt: Sequelize.literal('NOW()'),
                        updatedAt: Sequelize.literal('NOW()'),
                        },
                        {
                        name: 'Edit Category',
                        key: 'editCategory',
                        isActive: true,
                        group_id: 4,
                        isProtected: false,
                        orderId: 21,
                        created_by: 1,
                        updated_by: 1,
                        createdAt: Sequelize.literal('NOW()'),
                        updatedAt: Sequelize.literal('NOW()'),
                        },
                        {
                        name: 'Draft Publish',
                        key: 'draftPublish',
                        isActive: true,
                        group_id: 4,
                        isProtected: false,
                        orderId: 22,
                        created_by: 1,
                        updated_by: 1,
                        createdAt: Sequelize.literal('NOW()'),
                        updatedAt: Sequelize.literal('NOW()'),
                        },
                        {
                        name: 'Publish Draft',
                        key: 'publishDraft',
                        isActive: true,
                        group_id: 4,
                        isProtected: false,
                        orderId: 23,
                        created_by: 1,
                        updated_by: 1,
                        createdAt: Sequelize.literal('NOW()'),
                        updatedAt: Sequelize.literal('NOW()'),
                        },
                        {
                        name: 'Delete Draft',
                        key: 'deleteDraft',
                        isActive: true,
                        group_id: 4,
                        isProtected: false,
                        orderId: 24,
                        created_by: 1,
                        updated_by: 1,
                        createdAt: Sequelize.literal('NOW()'),
                        updatedAt: Sequelize.literal('NOW()'),
                        },
                        {
                        name: 'Edit Draft Any',
                        key: 'editDraftAny',
                        isActive: true,
                        group_id: 4,
                        isProtected: false,
                        orderId: 25,
                        created_by: 1,
                        updated_by: 1,
                        createdAt: Sequelize.literal('NOW()'),
                        updatedAt: Sequelize.literal('NOW()'),
                        },
                        {
                        name: 'Add Draft',
                        key: 'addDraft',
                        isActive: true,
                        group_id: 4,
                        isProtected: false,
                        orderId: 26,
                        created_by: 1,
                        updated_by: 1,
                        createdAt: Sequelize.literal('NOW()'),
                        updatedAt: Sequelize.literal('NOW()'),
                        },
                        {
                        name: 'View Published',
                        key: 'viewPublished',
                        isActive: true,
                        group_id: 4,
                        isProtected: false,
                        orderId: 27,
                        created_by: 1,
                        updated_by: 1,
                        createdAt: Sequelize.literal('NOW()'),
                        updatedAt: Sequelize.literal('NOW()'),
                        },
                        {
                        name: 'Draft Deleted Any',
                        key: 'draftDeletedAny',
                        isActive: true,
                        group_id: 4,
                        isProtected: false,
                        orderId: 28,
                        created_by: 1,
                        updated_by: 1,
                        createdAt: Sequelize.literal('NOW()'),
                        updatedAt: Sequelize.literal('NOW()'),
                        },
                        {
                        name: 'Draft Deleted Self',
                        key: 'draftDeletedSelf',
                        isActive: true,
                        group_id: 4,
                        isProtected: false,
                        orderId: 29,
                        created_by: 1,
                        updated_by: 1,
                        createdAt: Sequelize.literal('NOW()'),
                        updatedAt: Sequelize.literal('NOW()'),
                        },
                        {
                        name: 'Edit Draft Self',
                        key: 'editDraftSelf',
                        isActive: true,
                        group_id: 4,
                        isProtected: false,
                        orderId: 30,
                        created_by: 1,
                        updated_by: 1,
                        createdAt: Sequelize.literal('NOW()'),
                        updatedAt: Sequelize.literal('NOW()'),
                        },
                        {
                        name: 'Author Status Update',
                        key: 'authorStatusUpdate',
                        isActive: true,
                        group_id: 4,
                        isProtected: false,
                        orderId: 31,
                        created_by: 1,
                        updated_by: 1,
                        createdAt: Sequelize.literal('NOW()'),
                        updatedAt: Sequelize.literal('NOW()'),
                        },
                        {
                        name: 'Edit Author Any',
                        key: 'editAuthorAny',
                        isActive: true,
                        group_id: 4,
                        isProtected: false,
                        orderId: 32,
                        created_by: 1,
                        updated_by: 1,
                        createdAt: Sequelize.literal('NOW()'),
                        updatedAt: Sequelize.literal('NOW()'),
                        },
                        {
                        name: 'Add Rating Feature',
                        key: 'addRatingFeature',
                        isActive: true,
                        group_id: 4,
                        isProtected: false,
                        orderId: 33,
                        created_by: 1,
                        updated_by: 1,
                        createdAt: Sequelize.literal('NOW()'),
                        updatedAt: Sequelize.literal('NOW()'),
                        },
                        {
                        name: 'Delete Category',
                        key: 'deleteCategory',
                        isActive: true,
                        group_id: 4,
                        isProtected: false,
                        orderId: 34,
                        created_by: 1,
                        updated_by: 1,
                        createdAt: Sequelize.literal('NOW()'),
                        updatedAt: Sequelize.literal('NOW()'),
                        },
                        {
                        name: 'Add Applicant',
                        key: 'addApplicant',
                        isActive: true,
                        group_id: 6,
                        isProtected: false,
                        orderId: 35,
                        created_by: 1,
                        updated_by: 1,
                        createdAt: Sequelize.literal('NOW()'),
                        updatedAt: Sequelize.literal('NOW()'),
                        },
                        {
                        name: 'Change Applicant Status',
                        key: 'changeApplicantStatus',
                        isActive: true,
                        group_id: 6,
                        isProtected: false,
                        orderId: 36,
                        created_by: 1,
                        updated_by: 1,
                        createdAt: Sequelize.literal('NOW()'),
                        updatedAt: Sequelize.literal('NOW()'),
                        },
                        {
                        name: 'Edit Application',
                        key: 'editApplication',
                        isActive: true,
                        group_id: 6,
                        isProtected: false,
                        orderId: 37,
                        created_by: 1,
                        updated_by: 1,
                        createdAt: Sequelize.literal('NOW()'),
                        updatedAt: Sequelize.literal('NOW()'),
                        },
                        {
                        name: 'Application Download',
                        key: 'applicationDownload',
                        isActive: true,
                        group_id: 6,
                        isProtected: false,
                        orderId: 38,
                        created_by: 1,
                        updated_by: 1,
                        createdAt: Sequelize.literal('NOW()'),
                        updatedAt: Sequelize.literal('NOW()'),
                        },
                        {
                        name: 'Download Resume',
                        key: 'downloadResume',
                        isActive: true,
                        group_id: 6,
                        isProtected: false,
                        orderId: 39,
                        created_by: 1,
                        updated_by: 1,
                        createdAt: Sequelize.literal('NOW()'),
                        updatedAt: Sequelize.literal('NOW()'),
                        },
                        {
                        name: 'Add Job',
                        key: 'addJob',
                        isActive: true,
                        group_id: 5,
                        isProtected: false,
                        orderId: 40,
                        created_by: 1,
                        updated_by: 1,
                        createdAt: Sequelize.literal('NOW()'),
                        updatedAt: Sequelize.literal('NOW()'),
                        },
                        {
                        name: 'Post Job',
                        key: 'postJob',
                        isActive: true,
                        group_id: 5,
                        isProtected: false,
                        orderId: 41,
                        created_by: 1,
                        updated_by: 1,
                        createdAt: Sequelize.literal('NOW()'),
                        updatedAt: Sequelize.literal('NOW()'),
                        },
                        {
                        name: 'Close Job',
                        key: 'closeJob',
                        isActive: true,
                        group_id: 5,
                        isProtected: false,
                        orderId: 40,
                        created_by: 1,
                        updated_by: 1,
                        createdAt: Sequelize.literal('NOW()'),
                        updatedAt: Sequelize.literal('NOW()'),
                        },
                        {
                        name: 'Job Move To Draft',
                        key: 'jobMoveToDraft',
                        isActive: true,
                        group_id: 5,
                        isProtected: false,
                        orderId: 41,
                        created_by: 1,
                        updated_by: 1,
                        createdAt: Sequelize.literal('NOW()'),
                        updatedAt: Sequelize.literal('NOW()'),
                        },
                        {
                        name: 'Delete Job',
                        key: 'deleteJob',
                        isActive: true,
                        group_id: 5,
                        isProtected: false,
                        orderId: 42,
                        created_by: 1,
                        updated_by: 1,
                        createdAt: Sequelize.literal('NOW()'),
                        updatedAt: Sequelize.literal('NOW()'),
                        },
                        {
                        name: 'Duplicate Job',
                        key: 'duplicateJob',
                        isActive: true,
                        group_id: 5,
                        isProtected: false,
                        orderId: 43,
                        created_by: 1,
                        updated_by: 1,
                        createdAt: Sequelize.literal('NOW()'),
                        updatedAt: Sequelize.literal('NOW()'),
                        },
                        {
                        name: 'Edit Job',
                        key: 'editJob',
                        isActive: true,
                        group_id: 5,
                        isProtected: false,
                        orderId: 44,
                        created_by: 1,
                        updated_by: 1,
                        createdAt: Sequelize.literal('NOW()'),
                        updatedAt: Sequelize.literal('NOW()'),
                        },
                        {
                        name: 'Job Downloads',
                        key: 'jobDownloads',
                        isActive: true,
                        group_id: 5,
                        isProtected: false,
                        orderId: 45,
                        created_by: 1,
                        updated_by: 1,
                        createdAt: Sequelize.literal('NOW()'),
                        updatedAt: Sequelize.literal('NOW()'),
                        },
                    ],
                    {}
                    );
                },