Use sequelize
This commit is contained in:
3
.gitignore
vendored
3
.gitignore
vendored
@@ -2,6 +2,9 @@
|
||||
# Created by https://www.toptal.com/developers/gitignore/api/node
|
||||
# Edit at https://www.toptal.com/developers/gitignore?templates=node
|
||||
|
||||
### Visual Studio Code ###
|
||||
.vscode
|
||||
|
||||
### Node ###
|
||||
# Logs
|
||||
logs
|
||||
|
||||
8
index.js
8
index.js
@@ -39,10 +39,10 @@ for (const file of eventFiles) {
|
||||
logger.log(`Registered event: ${event.name}`);
|
||||
}
|
||||
|
||||
logger.log("Connecting to database...");
|
||||
dbUtil.initDb();
|
||||
logger.log("Connected to database!");
|
||||
logger.log("Starting bot...");
|
||||
|
||||
|
||||
logger.log("Syncing database...");
|
||||
dbUtil.syncDb();
|
||||
client.login(process.env.TOKEN);
|
||||
|
||||
|
||||
|
||||
33
migrations/20220417130917-create-guild.js
Normal file
33
migrations/20220417130917-create-guild.js
Normal 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
25
models/guild.js
Normal 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
36
models/index.js
Normal 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
1201
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -15,6 +15,8 @@
|
||||
"discord.js": "^13.6.0",
|
||||
"dotenv": "^16.0.0",
|
||||
"mysql2": "^2.3.3",
|
||||
"nodemon": "^2.0.15"
|
||||
"nodemon": "^2.0.15",
|
||||
"sequelize": "^6.19.0",
|
||||
"sequelize-cli": "^6.4.1"
|
||||
}
|
||||
}
|
||||
|
||||
37
util/db.js
37
util/db.js
@@ -1,33 +1,20 @@
|
||||
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() {
|
||||
return _db;
|
||||
return db;
|
||||
}
|
||||
|
||||
|
||||
//function to sync all database models
|
||||
async function syncDb() {
|
||||
return await db.sequelize.sync();
|
||||
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
initDb,
|
||||
getDb
|
||||
getDb,
|
||||
syncDb
|
||||
}
|
||||
Reference in New Issue
Block a user