From 66eab742d9dc3fc34229618a9bcfecca41f3f16f Mon Sep 17 00:00:00 2001 From: amhsirak Date: Thu, 27 Mar 2025 16:42:56 +0530 Subject: [PATCH] chore: airtable migration --- .../20250327111003-add-airtable-columns.js | 84 +++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 server/src/db/migrations/20250327111003-add-airtable-columns.js diff --git a/server/src/db/migrations/20250327111003-add-airtable-columns.js b/server/src/db/migrations/20250327111003-add-airtable-columns.js new file mode 100644 index 00000000..7cbb1e02 --- /dev/null +++ b/server/src/db/migrations/20250327111003-add-airtable-columns.js @@ -0,0 +1,84 @@ +'use strict'; + +module.exports = { + up: async (queryInterface, Sequelize) => { + // Add Airtable related columns + return queryInterface.sequelize.transaction(async (transaction) => { + try { + // Check if columns already exist first to make the migration idempotent + const tableInfo = await queryInterface.describeTable('robot', { transaction }); + + // Add airtable_base_id if it doesn't exist + if (!tableInfo.airtable_base_id) { + await queryInterface.addColumn('robot', 'airtable_base_id', { + type: Sequelize.STRING, + allowNull: true + }, { transaction }); + } + + // Add airtable_base_name if it doesn't exist + if (!tableInfo.airtable_base_name) { + await queryInterface.addColumn('robot', 'airtable_base_name', { + type: Sequelize.STRING, + allowNull: true + }, { transaction }); + } + + // Add airtable_table_name if it doesn't exist + if (!tableInfo.airtable_table_name) { + await queryInterface.addColumn('robot', 'airtable_table_name', { + type: Sequelize.STRING, + allowNull: true + }, { transaction }); + } + + // Add airtable_table_id if it doesn't exist + if (!tableInfo.airtable_table_id) { + await queryInterface.addColumn('robot', 'airtable_table_id', { + type: Sequelize.STRING, + allowNull: true + }, { transaction }); + } + + // Add airtable_access_token if it doesn't exist + if (!tableInfo.airtable_access_token) { + await queryInterface.addColumn('robot', 'airtable_access_token', { + type: Sequelize.TEXT, // Using TEXT for potentially long tokens + allowNull: true + }, { transaction }); + } + + // Add airtable_refresh_token if it doesn't exist + if (!tableInfo.airtable_refresh_token) { + await queryInterface.addColumn('robot', 'airtable_refresh_token', { + type: Sequelize.TEXT, // Using TEXT for potentially long tokens + allowNull: true + }, { transaction }); + } + + return Promise.resolve(); + } catch (error) { + return Promise.reject(error); + } + }); + }, + + down: async (queryInterface, Sequelize) => { + // Remove Airtable related columns + return queryInterface.sequelize.transaction(async (transaction) => { + try { + // Remove columns in reverse order + await queryInterface.removeColumn('robot', 'airtable_refresh_token', { transaction }); + await queryInterface.removeColumn('robot', 'airtable_access_token', { transaction }); + await queryInterface.removeColumn('robot', 'airtable_table_id', { transaction }); + await queryInterface.removeColumn('robot', 'airtable_table_name', { transaction }); + await queryInterface.removeColumn('robot', 'airtable_base_name', { transaction }); + await queryInterface.removeColumn('robot', 'airtable_base_id', { transaction }); + + return Promise.resolve(); + } catch (error) { + return Promise.reject(error); + } + }); + } +}; \ No newline at end of file