diff --git a/.gitignore b/.gitignore index cf333bc..58de429 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ /node_modules .env +package-lock.json sslcert/privkey.pem sslcert/fullchain.pem \ No newline at end of file diff --git a/api/v1/admin/addGames.js b/api/v1/admin/addGames.js new file mode 100644 index 0000000..8d39429 --- /dev/null +++ b/api/v1/admin/addGames.js @@ -0,0 +1,76 @@ +const express = require('express'); +const multer = require('multer') +const upload = multer() + +const { getConnection, getGame, addGame } = require("../../../libs/mysql.js") + +const router = express.Router(); + +router.post('/', upload.single('file'), async (req, res) => { + const file = req.file.buffer.toString().replace(/"/g, ""); + const lines = file.split("\n"); + const fields = lines[0].split(";"); + + const assoc = { + 'ID': 'id', + 'Titre': 'title', + 'Sous-titre': 'subtitle', + 'Édition': 'edition', + 'Type': 'type', + 'Joueur(s)': 'players', + 'Durée': 'duration', + 'Age(s)': 'ages', + 'Langues': 'language', + 'Univers': 'universe', + 'Gamme(s)': 'ranges', + 'Catégorie(s)': "categories", + 'Thème(s)': 'themes', + 'Mécanisme(s)': 'mecanisms', + 'Éditeur(s)': 'editor', + 'Auteur(s)': 'authors', + 'Illustrateur(s)': 'illustrators' + } + + const positions = {} + for (i = 0; i < fields.length; i++) { + if (assoc[fields[i]]) { + positions[assoc[fields[i]]] = i; + } + } + + const games = [] + for (i = 1; i < lines.length; i++) { + games.push(lines[i].split(";")) + } + + const connection = await getConnection(); + games.forEach(async game => { + const game_db = await getGame(connection, game[positions['id']]); + + if (!game_db[0]) { + addGame(connection, + game[positions['id']], + game[positions['title']], + game[positions['subtitle']] ? game[positions['subtitle']] : "NULL", + game[positions['edition']] ? game[positions['edition']] : "NULL", + game[positions['type']] ? game[positions['type']] : "NULL", + game[positions['players']] ? game[positions['players']] : "NULL", + game[positions['duration']] ? game[positions['duration']] : "NULL", + game[positions['ages']] ? game[positions['ages']] : "NULL", + game[positions['language']] ? game[positions['language']] : "NULL", + game[positions['universe']] ? game[positions['universe']] : "NULL", + game[positions['ranges']] ? game[positions['ranges']] : "NULL", + game[positions['categories']] ? game[positions['categories']] : "NULL", + game[positions['themes']] ? game[positions['themes']] : "NULL", + game[positions['mecanisms']] ? game[positions['mecanisms']] : "NULL", + game[positions['editor']], + game[positions['authors']], + game[positions['illustrators']]) + } + }) + //connection.end(); + + res.status(200).send({message: "success"}); +}); + +module.exports = router; \ No newline at end of file diff --git a/libs/mysql.js b/libs/mysql.js index 1f46ef6..a81d02a 100644 --- a/libs/mysql.js +++ b/libs/mysql.js @@ -30,7 +30,7 @@ function getGames(connection) { function getGame(connection, gameid) { return new Promise((resolve, reject) => { connection.query( - `SELECT * FROM games WHERE id = "${gameid}"`, + `SELECT * FROM games WHERE id = ${gameid}`, (error, result) => { if (error) { reject(new Error(error)); @@ -41,6 +41,25 @@ function getGame(connection, gameid) { }) } +function addGame(connection, id, title, subtitle, edition, type, players, duration, ages, languages, universe, ranges, categories, themes, mecanisms, editor, authors, illustrators) { + console.log(`INSERT INTO games (id, title, subtitle, edition, type, players, duration, ages, languages, universe, ranges, categories, themes, mecanisms, editor, authors, illustrators) VALUES (${id}, "${title}", "${subtitle}", ${edition}, "${type}", "${players}", "${duration}", "${ages}", "${languages}", "${universe}", "${ranges}", "${categories}", "${themes}", "${mecanisms}", "${editor}", "${authors}", "${illustrators}")`) + return new Promise((resolve, reject) => { + connection.query( + `INSERT INTO games (id, title, subtitle, edition, type, players, duration, ages, languages, universe, ranges, categories, themes, mecanisms, editor, authors, illustrators) VALUES (${id}, "${title}", "${subtitle}", ${edition}, "${type}", "${players}", "${duration}", "${ages}", "${languages}", "${universe}", "${ranges}", "${categories}", "${themes}", "${mecanisms}", "${editor}", "${authors}", "${illustrators}")`, + (error, result) => { + if (error) { + reject(new Error(error)); + } + resolve(result); + } + ) + }) +} + +// +-----------------------------------+ +// | HELPERS | +// +-----------------------------------+ + function addHelper(connection, game_id, user_id) { return new Promise((resolve, reject) => { connection.query( @@ -148,6 +167,8 @@ module.exports = { getGames, getGame, + addGame, + addHelper, removeHelper, getHelpers, diff --git a/package.json b/package.json index 470ab30..b5c5bba 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,7 @@ "fs": "^0.0.1-security", "https": "^1.0.0", "jsonwebtoken": "^9.0.2", + "multer": "^1.4.5-lts.1", "mysql": "^2.18.1", "nodemon": "^3.1.4", "sha256": "^0.2.0"