diff --git a/database/mongod.js b/database/mongod.js index ddcca29..61b7ebd 100644 --- a/database/mongod.js +++ b/database/mongod.js @@ -20,9 +20,9 @@ module.exports.initMongoDBInstance = async (client,config,callback) => { list: async (table , callback) => { var collection = db.collection(table); - var data = await collection.find(data); + var found_data = await collection.find(data); - callback(data); + callback(found_data); }, insert: async (table, data,callback) => { @@ -49,9 +49,9 @@ module.exports.initMongoDBInstance = async (client,config,callback) => { search: async (table, data , callback) => { var collection = db.collection(table); - var data = await collection.findOne(data); + var found_data = await collection.findOne(data); - callback(data); + callback(found_data); }, edit: async (table, uuid, data , callback) => { diff --git a/database/mysqld.js b/database/mysqld.js index 9636481..de91994 100644 --- a/database/mysqld.js +++ b/database/mysqld.js @@ -1 +1,77 @@ -// [WIP] \ No newline at end of file +/** + * + * @param {import('mysql2').Connection} client + * @param {*} callback + */ +module.exports.initMYSQL2Connection = async (client,config,callback) => { + var call_data = { + createStore: async (name, callback) => { + client.query( + `CREATE TABLE ${name.replace(".","")} (id INT NOT NULL AUTO_INCREMENT , uuid VARCHAR(256) NOT NULL , data LONGTEXT NOT NULL, timestamp VARCHAR(16) NOT NULL , PRIMARY KEY (id)) ENGINE = ${config.database_engine};`, + async function(err,results,fields) { + callback(true); + } + ) + }, + + list: async (table , callback) => { + var fetchData = []; + + client.query( + `SELECT * FROM ${table.replace(".","")}`, + async function(err,results,fields) { + for(var element of results) { + var data = JSON.parse(element['data']); + await fetchData.push({ + uuid: element['uuid'], + ...data + }); + + await callback(fetchData); + } + } + ) + }, + + search: async (table , data , callback) => { + var fetchData = []; + + client.query( + `SELECT * FROM ${table.replace(".","")}`, + async function(err,results,fields) { + for(var element of results) { + var data = JSON.parse(element['data']); + if(data) + await fetchData.push({ + uuid: element['uuid'], + ...data + }); + + await callback(fetchData); + } + } + ) + }, + + insert: async (table, data,callback) => { + var uuid = require('node:crypto').randomUUID(); + + client.query( + `INSERT INTO ${table.replace(".","")} (uuid, data, timestamp) VALUES + ('${uuid}', '${JSON.stringify(data)}', '${Date.now()}')`, + async function(err,result,fields) { + callback(uuid) + } + ) + }, + + build: async () => { + var tables = require("./collection_tables.json"); + for(var table of tables){ + call_data.createStore(table , (state) => {}); + } + } + } + + callback(call_data); +} \ No newline at end of file diff --git a/src/config/prod.js b/src/config/prod.js index 9ce5661..4cf66b5 100644 --- a/src/config/prod.js +++ b/src/config/prod.js @@ -9,12 +9,13 @@ module.exports = { // Database Configurations // Possible Options ["mongod" , "mysqld"] - database_adapter: "mongod", + database_adapter: "mysqld", // If using MongoDB database_uri: process.env['database_uri'] || "", database_name: "xantic", // If using MySQL database_host: "localhost", database_user: "root", - datbase_password: process.env['database_password'] || "" + database_password: process.env['database_password'] || "", + database_engine: "InnoDB" } \ No newline at end of file diff --git a/src/index.js b/src/index.js index a7f3843..2104568 100644 --- a/src/index.js +++ b/src/index.js @@ -4,6 +4,7 @@ const config = require("./config/prod"); const fs = require('node:fs'); const path = require('node:path'); const { MongoClient } = require("mongodb"); +const mysql = require('mysql2'); const { Client, Events, GatewayIntentBits, Collection } = require('discord.js'); const client = new Client({ @@ -24,7 +25,17 @@ async function main() { require("../database/mongod").initMongoDBInstance(mongo_client, config, (back) => initMessageManager(back)); } else if (config.database_adapter == "mysqld") { + const mysql_connection = mysql.createConnection({ + host: config.database_host, + user: config.database_user, + password: config.database_password, + database: config.database_name, + }); + mysql_connection.connect(); + mysql_connection.on('error', (error) => console.error); + + require("../database/mysqld").initMYSQL2Connection(mysql_connection, config, (back) => initMessageManager(back)); } }