All files / framework/src/api/db/migrations 003_init_role_permission.js

100% Statements 26/26
100% Branches 0/0
100% Functions 13/13
100% Lines 20/20
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 441x 1x   48x 48x 48x 48x     48x 48x 48x     48x 48x 48x     48x 48x     48x           48x   144x   48x             1x 1x    
const TABLES = require('../../../constants/tables');
const { initBasicModelTable } = require('../../../constants/migrations');
 
const up = (kn) => kn.transaction(knex => {
    const initRoleTable = () => knex.schema.createTable(TABLES.ROLE_TABLE_NAME, table => {
        initBasicModelTable(table);
        table.string('name');
    });
 
    const initPermissionTable = () => knex.schema.createTable(TABLES.PERMISSION_TABLE_NAME, table => {
        initBasicModelTable(table);
        table.string('name');
    });
 
    const initRoleToPermissionTable = () => knex.schema.createTable(TABLES.ROLE_TO_PERMISSION_TABLE_NAME, table => {
        table.integer('roleId').references('id').inTable(TABLES.ROLE_TABLE_NAME);
        table.integer('permissionId').references('id').inTable(TABLES.PERMISSION_TABLE_NAME);
    });
 
    const initUserRoleRelation = () => knex.schema.table(TABLES.USER_TABLE_NAME, table => {
        table.integer('roleId').references('id').inTable(TABLES.ROLE_TABLE_NAME);
    });
 
    return initRoleTable()
        .then(initPermissionTable)
        .then(initRoleToPermissionTable)
        .then(initUserRoleRelation);
});
 
const down = (kn, Promise) => kn.transaction(knex => {
    function dropTableIfExistsCascade(table) {
        return knex.raw(`DROP TABLE IF EXISTS "${table}" CASCADE;`);
    }
    return Promise.all([
        TABLES.ROLE_TO_PERMISSION_TABLE_NAME,
        TABLES.ROLE_TABLE_NAME,
        TABLES.PERMISSION_TABLE_NAME]
        .map(dropTableIfExistsCascade));
});
 
module.exports.up = up;
module.exports.down = down;