Use sequelize

This commit is contained in:
2022-04-17 15:19:12 +02:00
parent 6eccae8721
commit be2991cd50
8 changed files with 1316 additions and 31 deletions

3
.gitignore vendored
View File

@@ -2,6 +2,9 @@
# Created by https://www.toptal.com/developers/gitignore/api/node # Created by https://www.toptal.com/developers/gitignore/api/node
# Edit at https://www.toptal.com/developers/gitignore?templates=node # Edit at https://www.toptal.com/developers/gitignore?templates=node
### Visual Studio Code ###
.vscode
### Node ### ### Node ###
# Logs # Logs
logs logs

View File

@@ -39,10 +39,10 @@ for (const file of eventFiles) {
logger.log(`Registered event: ${event.name}`); logger.log(`Registered event: ${event.name}`);
} }
logger.log("Connecting to database...");
dbUtil.initDb();
logger.log("Connected to database!"); logger.log("Syncing database...");
logger.log("Starting bot..."); dbUtil.syncDb();
client.login(process.env.TOKEN); client.login(process.env.TOKEN);

View File

@@ -0,0 +1,33 @@
'use strict';
module.exports = {
async up(queryInterface, Sequelize) {
await queryInterface.createTable('Guilds', {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER
},
gid: {
type: Sequelize.STRING
},
adminRole: {
type: Sequelize.STRING
},
owderId: {
type: Sequelize.STRING
},
createdAt: {
allowNull: false,
type: Sequelize.DATE
},
updatedAt: {
allowNull: false,
type: Sequelize.DATE
}
});
},
async down(queryInterface, Sequelize) {
await queryInterface.dropTable('Guilds');
}
};

25
models/guild.js Normal file
View File

@@ -0,0 +1,25 @@
'use strict';
const {
Model
} = require('sequelize');
module.exports = (sequelize, DataTypes) => {
class Guild extends Model {
/**
* Helper method for defining associations.
* This method is not a part of Sequelize lifecycle.
* The `models/index` file will call this method automatically.
*/
static associate(models) {
// define association here
}
}
Guild.init({
gid: DataTypes.STRING,
adminRole: DataTypes.STRING,
owderId: DataTypes.STRING
}, {
sequelize,
modelName: 'Guild',
});
return Guild;
};

36
models/index.js Normal file
View File

@@ -0,0 +1,36 @@
'use strict';
require('dotenv').config();
const fs = require('fs');
const path = require('path');
const Sequelize = require('sequelize');
const basename = path.basename(__filename);
const env = process.env.NODE_ENV || 'development';
const db = {};
let sequelize = new Sequelize(process.env.DB_DATABASE, process.env.DB_USERNAME, process.env.DB_PASSWORD, {
dialect: 'mysql',
host: process.env.DB_HOST,
port: 3306
});
fs
.readdirSync(__dirname)
.filter(file => {
return (file.indexOf('.') !== 0) && (file !== basename) && (file.slice(-3) === '.js');
})
.forEach(file => {
const model = require(path.join(__dirname, file))(sequelize, Sequelize.DataTypes);
db[model.name] = model;
});
Object.keys(db).forEach(modelName => {
if (db[modelName].associate) {
db[modelName].associate(db);
}
});
db.sequelize = sequelize;
db.Sequelize = Sequelize;
module.exports = db;

1201
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -15,6 +15,8 @@
"discord.js": "^13.6.0", "discord.js": "^13.6.0",
"dotenv": "^16.0.0", "dotenv": "^16.0.0",
"mysql2": "^2.3.3", "mysql2": "^2.3.3",
"nodemon": "^2.0.15" "nodemon": "^2.0.15",
"sequelize": "^6.19.0",
"sequelize-cli": "^6.4.1"
} }
} }

View File

@@ -1,33 +1,20 @@
require("dotenv").config(); require("dotenv").config();
const mysql = require("mysql2/promise") const fs = require("fs");
const db = require("../models/index");
let _db;
async function connect() {
const host = process.env.NODE_ENV === "production"
try {
const connection = await mysql.createConnection({
"host" : process.env.DB_HOST,
"port" : 3306,
"user" : process.env.DB_USERNAME,
"password" : process.env.DB_PASSWORD,
"database" : process.env.DB_DATABASE
});
_db = connection;
} catch (err) {
console.log(err);
}
}
function initDb() {
connect();
}
function getDb() { function getDb() {
return _db; return db;
}
//function to sync all database models
async function syncDb() {
return await db.sequelize.sync();
} }
module.exports = { module.exports = {
initDb, getDb,
getDb syncDb
} }