DiscordTickets/src/database/index.js

75 lines
1.7 KiB
JavaScript
Raw Normal View History

2021-04-07 02:02:07 +03:00
const { Sequelize } = require('sequelize');
const fs = require('fs');
2021-02-16 16:48:04 +02:00
const { path } = require('../utils/fs');
const types = require('./dialects');
2021-04-05 20:38:00 +03:00
module.exports = async (client) => {
2021-02-16 16:48:04 +02:00
const {
DB_TYPE,
DB_HOST,
DB_PORT,
2021-02-16 16:48:04 +02:00
DB_USER,
DB_PASS,
2021-04-07 02:02:07 +03:00
DB_NAME
2021-02-16 16:48:04 +02:00
} = process.env;
let type = (DB_TYPE || 'sqlite').toLowerCase();
const supported = Object.keys(types);
2021-02-16 16:48:04 +02:00
if (!supported.includes(type)) {
2021-04-05 20:38:00 +03:00
client.log.error(new Error(`DB_TYPE (${type}) is not a valid type`));
2021-02-17 00:34:20 +02:00
return process.exit();
2021-02-16 16:48:04 +02:00
}
try {
types[type].packages.forEach(pkg => require(pkg));
} catch {
let required = types[type].packages.map(i => `"${i}"`).join(' and ');
2021-04-05 20:38:00 +03:00
client.log.error(new Error(`Please install the package(s) for your selected database type: ${required}`));
2021-02-17 00:34:20 +02:00
return process.exit();
2021-02-16 16:48:04 +02:00
}
let sequelize;
if (type === 'sqlite') {
2021-04-05 20:38:00 +03:00
client.log.info('Using SQLite storage');
2021-02-16 16:48:04 +02:00
sequelize = new Sequelize({
dialect: types[type].dialect,
storage: path('./user/database.sqlite'),
2021-04-05 20:38:00 +03:00
logging: text => client.log.debug(text)
2021-02-16 16:48:04 +02:00
});
} else {
2021-04-05 20:38:00 +03:00
client.log.info(`Connecting to ${types[type].name} database...`);
2021-02-16 16:48:04 +02:00
sequelize = new Sequelize(DB_NAME, DB_USER, DB_PASS, {
dialect: types[type].dialect,
host: DB_HOST,
port: DB_PORT,
2021-04-05 20:38:00 +03:00
logging: text => client.log.debug(text)
2021-02-16 16:48:04 +02:00
});
}
try {
await sequelize.authenticate();
2021-04-05 20:38:00 +03:00
client.log.success('Connected to database successfully');
2021-02-16 16:48:04 +02:00
} catch (error) {
2021-04-05 20:38:00 +03:00
client.log.warn('Failed to connect to database');
client.log.error(error);
2021-02-17 00:34:20 +02:00
return process.exit();
2021-02-16 16:48:04 +02:00
}
2021-04-07 02:02:07 +03:00
const models = fs.readdirSync(path('./src/database/models'))
.filter(filename => filename.endsWith('.model.js'));
2021-03-15 23:12:58 +02:00
2021-04-07 02:02:07 +03:00
for (const model of models) {
require(`./models/${model}`)(client, sequelize);
}
2021-03-15 23:12:58 +02:00
2021-04-07 02:02:07 +03:00
sequelize.sync({
alter: {
drop: false
}
2021-03-15 23:12:58 +02:00
});
2021-02-17 15:24:33 +02:00
return sequelize;
2021-02-16 16:48:04 +02:00
};