feat: new DatabaseInstance class for universal database management, W.I.P
This commit is contained in:
parent
123fce455b
commit
b7de4d9614
5 changed files with 61 additions and 15 deletions
|
@ -1,4 +1,4 @@
|
||||||
FROM node:21
|
FROM oven/bun:latest
|
||||||
|
|
||||||
# Install netcat
|
# Install netcat
|
||||||
RUN apt-get update && apt-get install -y netcat-traditional
|
RUN apt-get update && apt-get install -y netcat-traditional
|
||||||
|
@ -6,9 +6,10 @@ RUN apt-get update && apt-get install -y netcat-traditional
|
||||||
WORKDIR /usr/src/app
|
WORKDIR /usr/src/app
|
||||||
|
|
||||||
# Copy package.json and package-lock.json to the working directory
|
# Copy package.json and package-lock.json to the working directory
|
||||||
COPY package*.json ./
|
COPY package.json ./
|
||||||
|
copy bun.lockb ./
|
||||||
|
|
||||||
RUN npm install
|
RUN bun install
|
||||||
|
|
||||||
COPY . .
|
COPY . .
|
||||||
|
|
||||||
|
|
49
Structures/Classes/DatabaseInstance.js
Normal file
49
Structures/Classes/DatabaseInstance.js
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
const mysql = require("mysql2");
|
||||||
|
const { readdir } = require("fs");
|
||||||
|
const path = require("path");
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Universal database instance to be used for any database operations
|
||||||
|
*/
|
||||||
|
class DatabaseInstance {
|
||||||
|
/**
|
||||||
|
* Construct the DatabaseInstance using the database credentials
|
||||||
|
*
|
||||||
|
* @param {Object} credentials The database credentils in a standard mysql format
|
||||||
|
*/
|
||||||
|
constructor(credentials) {
|
||||||
|
this.pool = mysql.createPool({
|
||||||
|
database: credentials.database,
|
||||||
|
user: credentials.user,
|
||||||
|
password: credentials.password,
|
||||||
|
host: credentials.host,
|
||||||
|
port: credentials.port,
|
||||||
|
enableKeepAlive: true,
|
||||||
|
waitForConnections: true,
|
||||||
|
connectionLimit: 10
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log("[JET » DatabaseInstance] Successfully initialized database connection")
|
||||||
|
|
||||||
|
this.pool.on("connection", (err) => {
|
||||||
|
if (err) console.log("[JET » DatabaseInstance] Error occurred during connection");
|
||||||
|
else console.log("[JET » DatabaseInstance » client] Successfully created new connection");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param {String} query
|
||||||
|
* @param {Array} values
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
async execute(query, values, callback) {
|
||||||
|
this.pool.execute(query, values, callback);
|
||||||
|
}
|
||||||
|
|
||||||
|
async query(query, callback) {
|
||||||
|
this.pool.query(query, callback);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = { DatabaseInstance };
|
18
app.js
18
app.js
|
@ -12,12 +12,17 @@
|
||||||
// Imports
|
// Imports
|
||||||
//------------------------------------------------>
|
//------------------------------------------------>
|
||||||
|
|
||||||
|
// Packages
|
||||||
const express = require("express");
|
const express = require("express");
|
||||||
const bodyParser = require("body-parser");
|
const bodyParser = require("body-parser");
|
||||||
const cookieParser = require("cookie-parser");
|
const cookieParser = require("cookie-parser");
|
||||||
const mysql = require("mysql2");
|
const mysql = require("mysql2");
|
||||||
const path = require("path");
|
const path = require("path");
|
||||||
|
|
||||||
|
// Classes
|
||||||
|
const { DatabaseInstance } = require("./Structures/Classes/DatabaseInstance");
|
||||||
|
|
||||||
|
// Load environment variables when not using docker
|
||||||
if (!process.env.DOCKER) {
|
if (!process.env.DOCKER) {
|
||||||
const dotenv = require("dotenv");
|
const dotenv = require("dotenv");
|
||||||
dotenv.config();
|
dotenv.config();
|
||||||
|
@ -43,11 +48,10 @@ app.use(bodyParser.urlencoded({ extended: false }));
|
||||||
app.use(cookieParser());
|
app.use(cookieParser());
|
||||||
|
|
||||||
//------------------------------------------------>
|
//------------------------------------------------>
|
||||||
// MySQL connection
|
// Initialize database
|
||||||
//------------------------------------------------>
|
//------------------------------------------------>
|
||||||
|
|
||||||
//! Make extra sure these values are loaded correctly, if you experience any connection issues.
|
const db = new DatabaseInstance({
|
||||||
const db = mysql.createConnection({
|
|
||||||
database: process.env.DB_NAME,
|
database: process.env.DB_NAME,
|
||||||
user: process.env.DB_USER,
|
user: process.env.DB_USER,
|
||||||
password: process.env.DB_PASSWORD,
|
password: process.env.DB_PASSWORD,
|
||||||
|
@ -55,14 +59,6 @@ const db = mysql.createConnection({
|
||||||
port: process.env.DB_PORT
|
port: process.env.DB_PORT
|
||||||
});
|
});
|
||||||
|
|
||||||
db.connect((error) => {
|
|
||||||
if (error) {
|
|
||||||
console.error("[JET] Error connecting to MySQL database:", error);
|
|
||||||
} else {
|
|
||||||
console.log("[JET] Database connected successfully");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
//------------------------------------------------>
|
//------------------------------------------------>
|
||||||
// Routing
|
// Routing
|
||||||
//------------------------------------------------>
|
//------------------------------------------------>
|
||||||
|
|
BIN
bun.lockb
Executable file
BIN
bun.lockb
Executable file
Binary file not shown.
|
@ -14,4 +14,4 @@ check_database() {
|
||||||
check_database
|
check_database
|
||||||
|
|
||||||
# Start the Express app
|
# Start the Express app
|
||||||
exec npm run start
|
exec bun run start
|
||||||
|
|
Loading…
Reference in a new issue