This commit is contained in:
Ken
2026-01-19 09:33:35 +07:00
parent 374dc12b2d
commit 70838a4bc1
103 changed files with 16929 additions and 2 deletions

98
config/database.js Normal file
View File

@@ -0,0 +1,98 @@
const { Sequelize } = require('sequelize');
const config = require('./config.json');
/**
* MySQL Connection Configuration via senaai.tech
* Direct connection to MySQL server (port 11001)
*/
const dbConfig = config.database;
const sequelize = new Sequelize(
dbConfig.database,
dbConfig.username,
dbConfig.password,
{
host: dbConfig.host,
port: dbConfig.port,
dialect: dbConfig.dialect,
dialectOptions: {
connectTimeout: 60000, // 60 seconds for slow networks
},
// Connection Pool Configuration
pool: dbConfig.pool,
// Logging
logging: dbConfig.logging,
// Query options
define: {
timestamps: true,
underscored: true,
freezeTableName: true,
},
// Timezone
timezone: dbConfig.timezone,
// Retry configuration
retry: {
max: 3,
timeout: 3000,
},
}
);
/**
* Test database connection
*/
const testConnection = async () => {
try {
await sequelize.authenticate();
console.log(`✅ MySQL connection established successfully to ${dbConfig.host}:${dbConfig.port}`);
return true;
} catch (error) {
console.error('❌ Unable to connect to MySQL:', error.message);
return false;
}
};
/**
* Initialize database models
*/
const initializeDatabase = async () => {
try {
// Test connection first
const isConnected = await testConnection();
if (!isConnected) {
throw new Error('Failed to connect to database');
}
// Note: Auto-sync disabled in production for safety
console.log('✅ Database connection ready');
return sequelize;
} catch (error) {
console.error('❌ Database initialization failed:', error.message);
throw error;
}
};
/**
* Close database connection
*/
const closeConnection = async () => {
try {
await sequelize.close();
console.log('✅ Database connection closed');
} catch (error) {
console.error('❌ Error closing database connection:', error.message);
}
};
module.exports = {
sequelize,
testConnection,
initializeDatabase,
closeConnection,
};