70 lines
1.7 KiB
JavaScript
70 lines
1.7 KiB
JavaScript
const { Sequelize } = require('sequelize');
|
|
const dotenv = require('dotenv');
|
|
|
|
dotenv.config();
|
|
|
|
// Create Sequelize instance
|
|
let sequelize;
|
|
|
|
if (process.env.DATABASE_URL) {
|
|
// Use connection string if available
|
|
sequelize = new Sequelize(process.env.DATABASE_URL, {
|
|
logging: process.env.NODE_ENV === 'development' ? console.log : false,
|
|
define: {
|
|
freezeTableName: true // Prevent Sequelize from pluralizing table names
|
|
},
|
|
dialectOptions: {
|
|
ssl: {
|
|
require: true,
|
|
rejectUnauthorized: false
|
|
}
|
|
},
|
|
pool: {
|
|
max: 5,
|
|
min: 0,
|
|
acquire: 30000,
|
|
idle: 10000
|
|
}
|
|
});
|
|
} else {
|
|
// Fall back to individual parameters
|
|
sequelize = new Sequelize(
|
|
process.env.DB_NAME || 'postgres',
|
|
process.env.DB_USER || 'postgres',
|
|
process.env.DB_PASSWORD || 'postgres',
|
|
{
|
|
host: process.env.DB_HOST || 'localhost',
|
|
port: process.env.DB_PORT || 5432,
|
|
dialect: 'postgres',
|
|
logging: process.env.NODE_ENV === 'development' ? console.log : false,
|
|
define: {
|
|
freezeTableName: true // Prevent Sequelize from pluralizing table names
|
|
},
|
|
dialectOptions: {
|
|
ssl: process.env.NODE_ENV === 'production' ? {
|
|
require: true,
|
|
rejectUnauthorized: false
|
|
} : false
|
|
},
|
|
pool: {
|
|
max: 5,
|
|
min: 0,
|
|
acquire: 30000,
|
|
idle: 10000
|
|
}
|
|
}
|
|
);
|
|
}
|
|
|
|
// Test the connection
|
|
const connectDB = async () => {
|
|
try {
|
|
await sequelize.authenticate();
|
|
console.log('Database connection established successfully.');
|
|
} catch (error) {
|
|
console.error('Unable to connect to the database:', error);
|
|
process.exit(1);
|
|
}
|
|
};
|
|
|
|
module.exports = { sequelize, connectDB }; |