diff --git a/backend/.sequelizerc b/backend/.sequelizerc new file mode 100644 index 0000000..3b252eb --- /dev/null +++ b/backend/.sequelizerc @@ -0,0 +1,7 @@ +const path = require('path'); + +module.exports = { + 'config': path.resolve('config', 'database.js'), + 'migrations-path': path.resolve('migrations'), + 'models-path': path.resolve('models'), +}; diff --git a/backend/config/database.js b/backend/config/database.js index e54fbaf..1056288 100644 --- a/backend/config/database.js +++ b/backend/config/database.js @@ -1,21 +1,62 @@ -const { Sequelize } = require('sequelize'); +const { Sequelize } = require("sequelize"); +// Load environment variables based on NODE_ENV +// This ensures variables are available for both CLI and programmatic usage +if (!process.env.DB_NAME && process.env.NODE_ENV) { + const dotenv = require("dotenv"); + const envFile = `.env.${process.env.NODE_ENV}`; + const result = dotenv.config({ path: envFile }); + if (result.error && process.env.NODE_ENV !== "production") { + console.warn( + `Warning: Could not load ${envFile}, using existing environment variables` + ); + } +} + +// Database configuration object +// Used by both Sequelize CLI and programmatic initialization +const dbConfig = { + username: process.env.DB_USER, + password: process.env.DB_PASSWORD, + database: process.env.DB_NAME, + host: process.env.DB_HOST, + port: process.env.DB_PORT || 5432, + dialect: "postgres", + logging: false, + pool: { + max: 5, + min: 0, + acquire: 10000, + idle: 10000, + }, +}; + +// Configuration for Sequelize CLI (supports multiple environments) +// All environments use the same configuration from environment variables +const cliConfig = { + development: dbConfig, + dev: dbConfig, + test: dbConfig, + qa: dbConfig, + production: dbConfig, + prod: dbConfig, +}; + +// Create Sequelize instance for programmatic use const sequelize = new Sequelize( - process.env.DB_NAME, - process.env.DB_USER, - process.env.DB_PASSWORD, + dbConfig.database, + dbConfig.username, + dbConfig.password, { - host: process.env.DB_HOST, - port: process.env.DB_PORT, - dialect: 'postgres', - logging: false, - pool: { - max: 5, - min: 0, - acquire: 30000, - idle: 10000 - } + host: dbConfig.host, + port: dbConfig.port, + dialect: dbConfig.dialect, + logging: dbConfig.logging, + pool: dbConfig.pool, } ); -module.exports = sequelize; \ No newline at end of file +// Export the sequelize instance as default (for backward compatibility) +// Also export all environment configs for Sequelize CLI +module.exports = sequelize; +Object.assign(module.exports, cliConfig); diff --git a/backend/package.json b/backend/package.json index 02e5365..de9d797 100644 --- a/backend/package.json +++ b/backend/package.json @@ -16,6 +16,12 @@ "test:unit": "NODE_ENV=test jest tests/unit", "test:integration": "NODE_ENV=test jest tests/integration", "test:ci": "NODE_ENV=test jest --ci --coverage --maxWorkers=2", + "db:migrate": "sequelize-cli db:migrate", + "db:migrate:undo": "sequelize-cli db:migrate:undo", + "db:migrate:undo:all": "sequelize-cli db:migrate:undo:all", + "db:migrate:status": "sequelize-cli db:migrate:status", + "db:create": "sequelize-cli db:create", + "test:migrations": "node scripts/test-migrations.js", "alpha:add": "NODE_ENV=dev node scripts/manageAlphaInvitations.js add", "alpha:list": "NODE_ENV=dev node scripts/manageAlphaInvitations.js list", "alpha:revoke": "NODE_ENV=dev node scripts/manageAlphaInvitations.js revoke",