diff --git a/package-lock.json b/package-lock.json index 17905e2..fc09eb3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -57,7 +57,6 @@ "eslint-plugin-prettier": "^3.1.1", "eslint-plugin-security": "^1.4.0", "faker": "^5.1.0", - "husky": "7.0.4", "jest": "^26.0.1", "lint-staged": "^11.0.0", "node-mocks-http": "^1.8.0", @@ -6183,22 +6182,6 @@ "node": ">=8.12.0" } }, - "node_modules/husky": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/husky/-/husky-7.0.4.tgz", - "integrity": "sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ==", - "dev": true, - "license": "MIT", - "bin": { - "husky": "lib/bin.js" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/typicode" - } - }, "node_modules/iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", diff --git a/src/routes/api/getGameData.js b/src/routes/api/getGameData.js new file mode 100644 index 0000000..496c5ea --- /dev/null +++ b/src/routes/api/getGameData.js @@ -0,0 +1,147 @@ +require("dotenv").config(); +const express = require("express"); +const mariadb = require("mariadb"); + +const router = express.Router(); + +// Create MariaDB connection pool +const pool = mariadb.createPool({ + host: '172.17.0.1', + user: 'root', + password: '0000', + database: 'game', + connectionLimit: 5 +}); + +const getGameData = async (req, res) => { + let conn; + let items = 'ws2gamelink'; + try { + const { wsname } = req.query; + if (!items || !wsname) { + return res.status(400).json({ error: "Missing items or wsname parameter" }); + } + + console.log("Fetching game data from table:", items); + + conn = await pool.getConnection(); + + // Fetching the first dataset + const ws2gamelinkQuery = `SELECT * FROM \`${items}\` WHERE wsname = ?`; + const rows = await conn.query(ws2gamelinkQuery, [wsname]); + + if (!rows.length) { + return res.status(404).json({ error: "No data found" }); + } + + let gamelinkArray = rows[0].gamelink; + + // Ensure gamelinkArray is an array + if (typeof gamelinkArray === "string") { + gamelinkArray = [gamelinkArray]; // Convert to array if it's a string + } + if (!Array.isArray(gamelinkArray)) { + return res.status(500).json({ error: "Invalid gamelink data format" }); + } + + const gameDataResults = []; + + for (const link of gamelinkArray) { + const gameLinkParts = link.split('/'); + let gameNameFromUrl = ''; + let gameIdData = ''; + let gameTableName = ''; + let gameVersion = ''; + + if (gameLinkParts.length === 5) { + gameNameFromUrl = gameLinkParts[3]; + gameIdData = gameLinkParts[4].split('=')[1]; // Extracting ID + } else if (gameLinkParts.length === 6) { + gameNameFromUrl = gameLinkParts[3]; + gameVersion = gameLinkParts[4]; + gameIdData = gameLinkParts[5].split('=')[1]; // Extracting ID + } + + if (gameNameFromUrl === 'drawing' && gameVersion === 'v2') { + gameTableName = 'game_drawing_v2'; + } else if (gameNameFromUrl === 'drawing' && gameVersion === 'v3') { + gameTableName = 'game_drawing_v3'; + } else if (gameNameFromUrl === 'drawing' && gameVersion === 'drawing_writo') { + gameTableName = 'drawing_writo'; + } else if (gameNameFromUrl === 'drawing' && gameVersion === 'drawing_phonics') { + gameTableName = 'drawing_phonics'; + } else if (gameNameFromUrl === 'drawing') { + gameTableName = 'game_drawing'; // General case, only if no version is specified + } else if (gameNameFromUrl === 'drag' && gameVersion === 'v2') { + gameTableName = 'game_drag_v2'; + } else if (gameNameFromUrl === 'drag' && gameVersion === 'v4') { + gameTableName = 'game_drag_v4'; + } else if (gameNameFromUrl === 'drag' && gameVersion === 'dragdrop_phonics') { + gameTableName = 'drag_drop_phonics'; + } else if (gameNameFromUrl === 'drag' && gameVersion === 'match_phonics') { + gameTableName = 'drag_phonics'; + } else if (gameNameFromUrl === 'drag') { + gameTableName = 'game_drag'; // General case for "drag" + } else if (gameNameFromUrl === 'tick' && gameVersion === 'tick_phonics_v1') { + gameTableName = 'tick_phonics_option_6'; + } else if (gameNameFromUrl === 'tick' && gameVersion === 'tick_phonics_v2') { + gameTableName = 'tick_phonics_option_9'; + } else if (gameNameFromUrl === 'tick' && gameVersion === 'tick_phonics_v3') { + gameTableName = 'game_tick_v3_phonics'; + } else if (gameNameFromUrl === 'tick' && gameVersion === 'v1') { + gameTableName = 'game_tick_variant1'; + } else if (gameNameFromUrl === 'tick' && gameVersion === 'v2') { + gameTableName = 'game_tick_variant2'; + } else if (gameNameFromUrl === 'tick' && gameVersion === 'v3') { + gameTableName = 'game_tick_varient3'; + } else if (gameNameFromUrl === 'cross' && gameVersion === 'cross_phonics_v1') { + gameTableName = 'cross_phonics_option_6'; + } else if (gameNameFromUrl === 'cross' && gameVersion === 'cross_phonics_v2') { + gameTableName = 'cross_phonics_option_9'; + } else if (gameNameFromUrl === 'cross' && gameVersion === 'v1') { + gameTableName = 'game_cross_varient1'; + } else if (gameNameFromUrl === 'cross' && gameVersion === 'v2') { + gameTableName = 'game_cross_varient2'; + } else if (gameNameFromUrl === 'cross' && gameVersion === 'v3') { + gameTableName = 'game_cross_varient3'; + } + + + + + // else if (gameNameFromUrl === 'cross' && gameVersion === 'v2') { + // gameTableName = 'game_cross_varient2'; + // } + + + + + + + // console.log('Game Info:', { gameTableName, gameVersion, gameIdData }); + + if (gameTableName && gameIdData) { + let gameConn; + try { + gameConn = await pool.getConnection(); + const gameDataQuery = `SELECT * FROM \`${gameTableName}\` WHERE id = ?`; + const gameDataRows = await gameConn.query(gameDataQuery, [gameIdData]); + gameDataResults.push({ link, data: gameDataRows }); + } catch (gameError) { + console.error("Error fetching game data:", gameError); + } finally { + if (gameConn) gameConn.release(); + } + } + } + + res.json({ wsData: rows, gameData: gameDataResults }); + } catch (err) { + console.error("Database error:", err); + res.status(500).json({ error: "Database error" }); + } finally { + if (conn) conn.release(); + } +}; + +module.exports = getGameData; diff --git a/src/routes/v1/api.route.js b/src/routes/v1/api.route.js index fe33f84..e139358 100644 --- a/src/routes/v1/api.route.js +++ b/src/routes/v1/api.route.js @@ -34,6 +34,7 @@ const aiEvaluateImageToStar = require("../api/aiEvaluateImageToStar"); const getGameInfo = require("../api/getGameInfo"); const saveGalleryImage = require("../api/saveGalleryImage"); const getGalleryImage = require("../api/getGalleryImage"); +const getGameData = require("../api/getGameData"); // const aiTest = require("../api/aiTest"); @@ -209,6 +210,10 @@ router.get("/ping", (req, res) => { getGalleryImage(req, res); }); + router.get("/getGameData", (req, res) => { + getGameData(req, res); + }); + // Get Drawing Game Gallery Image // router.post("/aiTest", (req, res) => { // aiTest(req, res);