diff --git a/migrations/20250715014215-fix-interface-screens.js b/migrations/20250715014215-fix-interface-screens.js new file mode 100644 index 00000000..ff669fe3 --- /dev/null +++ b/migrations/20250715014215-fix-interface-screens.js @@ -0,0 +1,45 @@ +/** @type {import('sequelize-cli').Migration} */ +module.exports = { + async up(queryInterface, Sequelize) { + await queryInterface.dropTable('interface_screens'); + await queryInterface.addColumn('screens', 'position', { + type: Sequelize.INTEGER, + }); + await queryInterface.sequelize.query('ALTER TABLE "screens" ALTER COLUMN "interface_id" SET NOT NULL;'); + }, + + async down(queryInterface, Sequelize) { + await queryInterface.sequelize.query('ALTER TABLE "screens" ALTER COLUMN "interface_id" DROP NOT NULL;'); + await queryInterface.removeColumn('screens', 'position'); + await queryInterface.createTable('interface_screens', { + id: { + allowNull: false, + defaultValue: Sequelize.literal('gen_random_uuid()'), + primaryKey: true, + type: Sequelize.UUID, + }, + interface_id: { + type: Sequelize.UUID, + references: { + model: { + tableName: 'interfaces', + }, + key: 'id', + }, + }, + screen_id: { + type: Sequelize.UUID, + references: { + model: { + tableName: 'screens', + }, + key: 'id', + }, + }, + position: { + type: Sequelize.UUID, + }, + }); + await queryInterface.addIndex('interface_screens', ['interface_id', 'screen_id'], { unique: true }); + }, +}; diff --git a/models/interface.js b/models/interface.js index 2feeb89f..76557aff 100644 --- a/models/interface.js +++ b/models/interface.js @@ -5,7 +5,6 @@ module.exports = (sequelize, DataTypes) => { static associate(models) { Interface.belongsTo(models.User, { as: 'createdBy' }); Interface.belongsTo(models.User, { as: 'updatedBy' }); - Interface.hasMany(models.InterfaceScreen, { as: 'interfaceScreens' }); Interface.hasMany(models.Screen, { as: 'screens' }); } } diff --git a/models/interfaceScreen.js b/models/interfaceScreen.js deleted file mode 100644 index 4be2d630..00000000 --- a/models/interfaceScreen.js +++ /dev/null @@ -1,22 +0,0 @@ -const { Model } = require('sequelize'); - -module.exports = (sequelize, DataTypes) => { - class InterfaceScreen extends Model { - static associate(models) { - InterfaceScreen.belongsTo(models.Interface, { as: 'interface' }); - InterfaceScreen.belongsTo(models.Screen, { as: 'screen' }); - } - } - InterfaceScreen.init( - { - position: DataTypes.STRING, - }, - { - sequelize, - modelName: 'InterfaceScreen', - tableName: 'interface_screens', - underscored: true, - }, - ); - return InterfaceScreen; -}; diff --git a/models/screen.js b/models/screen.js index c6a2806d..334829bf 100644 --- a/models/screen.js +++ b/models/screen.js @@ -4,7 +4,6 @@ module.exports = (sequelize, DataTypes) => { class Screen extends Model { static associate(models) { Screen.belongsTo(models.Interface, { as: 'interface' }); - Screen.hasOne(models.InterfaceScreen, { as: 'interfaceScreen' }); Screen.belongsTo(models.User, { as: 'createdBy' }); Screen.belongsTo(models.User, { as: 'updatedBy' }); Screen.hasMany(models.Section, { as: 'sections' });