synt_backend
Version:
Synt light-weight node backend service
155 lines (147 loc) • 3.9 kB
JavaScript
module.exports = {
async up(queryInterface, Sequelize) {
/**
* Add altering commands here.
*
* Example:
* await queryInterface.createTable('users', { id: Sequelize.INTEGER });
*/
await queryInterface.sequelize.transaction(async (t) => {
const [reminders] = await queryInterface.sequelize.query(
`SELECT * FROM DefaultReminders`,
{
transaction: t,
}
);
await queryInterface.removeColumn("DefaultReminders", "message", {
transaction: t,
});
await queryInterface.addColumn(
"DefaultReminders",
"LabelId",
{
type: Sequelize.INTEGER,
allowNull: true,
defaultValue: null,
},
{ transaction: t }
);
await reminders.reduce(
(res, reminder) =>
res
.then(() =>
queryInterface.bulkInsert(
"Labels",
[
{
createdAt: new Date(),
updatedAt: new Date(),
},
],
{ transaction: t }
)
)
.then((labelId) =>
Promise.all([
queryInterface.bulkInsert(
"Translations",
[
{
LabelId: labelId,
language: "en",
value: reminder.message,
createdAt: new Date(),
updatedAt: new Date(),
},
],
{ transaction: t }
),
queryInterface.bulkUpdate(
"DefaultReminders",
{
LabelId: labelId,
},
{
id: reminder.id,
},
{ transaction: t }
),
])
),
Promise.resolve()
);
await queryInterface.changeColumn(
"DefaultReminders",
"LabelId",
{
type: Sequelize.INTEGER,
references: {
model: "Labels",
key: "id",
},
allowNull: false,
defaultValue: null,
onUpdate: "CASCADE",
onDelete: "CASCADE",
},
{ transaction: t }
);
});
},
async down(queryInterface, Sequelize) {
/**
* Add reverting commands here.
*
* Example:
* await queryInterface.dropTable('users');
*/
await queryInterface.sequelize.transaction(async (t) => {
const [reminders] = await queryInterface.sequelize.query(
`SELECT dr.id, t.value FROM DefaultReminders dr INNER JOIN Translations t on t.LabelId = dr.LabelId AND t.language = 'en'`,
{
transaction: t,
}
);
await queryInterface.addColumn(
"DefaultReminders",
"message",
{
type: Sequelize.STRING,
allowNull: true,
},
{ transaction: t }
);
await reminders.reduce(
(res, reminder) =>
res.then(() =>
queryInterface.bulkUpdate(
"DefaultReminders",
{
message: reminder.value ?? "No value",
},
{
id: reminder.id,
},
{ transaction: t }
)
),
Promise.resolve()
);
await Promise.all([
queryInterface.removeColumn("DefaultReminders", "LabelId", {
transaction: t,
}),
queryInterface.changeColumn(
"DefaultReminders",
"message",
{
type: Sequelize.STRING,
allowNull: false,
},
{ transaction: t }
),
]);
});
},
};
;