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
|
# 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
|
||||||
|
|||||||
8
index.js
8
index.js
@@ -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);
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
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",
|
"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"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
37
util/db.js
37
util/db.js
@@ -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
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user