origintrail-node
Version:
OriginTrail Node - Decentralized Knowledge Graph Node Library
71 lines (63 loc) • 1.96 kB
JavaScript
const newRoutes = ['BID-SUGGESTION', 'LOCAL-STORE'];
async function getRoleAbilities(names, queryInterface, transaction) {
const [abilities] = await queryInterface.sequelize.query(
`SELECT id from ability where name IN (${names.map((name) => `'${name}'`).join(', ')})`,
{
transaction,
},
);
const [[role]] = await queryInterface.sequelize.query(
"SELECT id from role where name='ADMIN'",
{
transaction,
},
);
return abilities.map((ability) => ({
ability_id: ability.id,
role_id: role.id,
}));
}
async function removeAbilities(names, queryInterface, transaction) {
await queryInterface.bulkDelete(
'role_ability',
await getRoleAbilities(names, queryInterface, transaction),
{ transaction },
);
await queryInterface.bulkDelete(
'ability',
names.map((name) => ({ name })),
{ transaction },
);
}
async function addAbilities(names, queryInterface, transaction) {
await queryInterface.bulkInsert(
'ability',
names.map((name) => ({ name })),
{ transaction },
);
await queryInterface.bulkInsert(
'role_ability',
await getRoleAbilities(names, queryInterface, transaction),
{ transaction },
);
}
export async function up({ context: { queryInterface } }) {
const transaction = await queryInterface.sequelize.transaction();
try {
await addAbilities(newRoutes, queryInterface, transaction);
transaction.commit();
} catch (e) {
transaction.rollback();
throw e;
}
}
export async function down({ context: { queryInterface } }) {
const transaction = await queryInterface.sequelize.transaction();
try {
await removeAbilities(newRoutes, queryInterface, transaction);
transaction.commit();
} catch (e) {
transaction.rollback();
throw e;
}
}