diff --git a/server/index.js b/server/index.js index 7ae715e..05b1100 100644 --- a/server/index.js +++ b/server/index.js @@ -156,32 +156,33 @@ async function startServer() { await sequelize.authenticate(); console.log('Database connected successfully.'); - // Run migrations first - try { - await runMigrations(); - } catch (migrationError) { - console.error('Migration error:', migrationError); - console.log('Continuing with database sync...'); - } - - // Always sync database in containerized environments or development - // Check if tables exist before syncing + // STEP 1: Sync database first to create base tables try { // Use alter: false to prevent destructive changes in production await sequelize.sync({ force: false, alter: false }); console.log('Database synchronized.'); - - // Seed database with initial data - await seedDatabase(); } catch (syncError) { console.error('Database sync error:', syncError); // If sync fails, try force sync (this will drop and recreate tables) console.log('Attempting force sync...'); await sequelize.sync({ force: true }); console.log('Database force synchronized.'); - - // Seed database with initial data + } + + // STEP 2: Run migrations after tables exist + try { + await runMigrations(); + } catch (migrationError) { + console.error('Migration error:', migrationError); + throw migrationError; // Fatal error - don't continue + } + + // STEP 3: Seed database with initial data + try { await seedDatabase(); + } catch (seedError) { + console.error('Seeding error:', seedError); + throw seedError; // Fatal error - don't continue } server.listen(PORT, () => { diff --git a/server/migrations/20250828000001-add-device-approval.js b/server/migrations/20250828000001-add-device-approval.js index e45ccaf..e5ccecd 100644 --- a/server/migrations/20250828000001-add-device-approval.js +++ b/server/migrations/20250828000001-add-device-approval.js @@ -7,44 +7,32 @@ module.exports = { async up(queryInterface, Sequelize) { - try { - // Check if devices table exists first - const tables = await queryInterface.showAllTables(); - if (!tables.includes('devices')) { - console.log('⚠️ Devices table does not exist yet, skipping device approval migration...'); - return; - } + // Check if is_approved column already exists + const tableDescription = await queryInterface.describeTable('devices'); + + if (!tableDescription.is_approved) { + // Add is_approved column to devices table + await queryInterface.addColumn('devices', 'is_approved', { + type: Sequelize.BOOLEAN, + defaultValue: false, + allowNull: false, + comment: 'Whether the device is approved to send data' + }); - // Check if is_approved column already exists - const tableDescription = await queryInterface.describeTable('devices'); - - if (!tableDescription.is_approved) { - // Add is_approved column to devices table - await queryInterface.addColumn('devices', 'is_approved', { - type: Sequelize.BOOLEAN, - defaultValue: false, - allowNull: false, - comment: 'Whether the device is approved to send data' - }); + // Add index for is_approved for better query performance + await queryInterface.addIndex('devices', ['is_approved'], { + name: 'devices_is_approved_idx' + }); - // Add index for is_approved for better query performance - await queryInterface.addIndex('devices', ['is_approved'], { - name: 'devices_is_approved_idx' - }); + // Approve all existing devices by default (backward compatibility) + await queryInterface.sequelize.query( + 'UPDATE devices SET is_approved = true WHERE created_at < NOW()' + ); - // Approve all existing devices by default (backward compatibility) - await queryInterface.sequelize.query( - 'UPDATE devices SET is_approved = true WHERE created_at < NOW()' - ); - - console.log('✅ Added is_approved field to devices table'); - console.log('✅ Approved all existing devices for backward compatibility'); - } else { - console.log('⚠️ Column is_approved already exists, skipping...'); - } - } catch (error) { - console.log('⚠️ Migration skipped - tables may not exist yet:', error.message); - // Don't throw error, just skip this migration if tables don't exist + console.log('✅ Added is_approved field to devices table'); + console.log('✅ Approved all existing devices for backward compatibility'); + } else { + console.log('⚠️ Column is_approved already exists, skipping...'); } },