gimm285-api-project/server/model/games.js
2023-04-18 14:41:16 -06:00

101 lines
3.4 KiB
JavaScript

const connection = require('./connection');
async function getAllGames(parameters = {}) {
let selectSql = `SELECT
m.id AS appID,
m.game_title AS title,
d.name AS developer,
p.name AS publisher,
m.release_date AS releaseDate,
m.short_description AS summary,
m.win_supported AS win,
m.mac_supported AS mac,
m.linux_supported AS linux
FROM games_master_table m
INNER JOIN developers d ON m.developer_id = d.id
INNER JOIN publishers p ON m.publisher_id = p.id`,
whereStatements = [],
orderByStatements = [],
queryParameters = [];
if (typeof parameters.win !== 'undefined' && parseInt(parameters.win) === 1) {
whereStatements.push("m.win_supported = 1");
}
if (typeof parameters.mac !== 'undefined' && parseInt(parameters.mac) === 1) {
whereStatements.push("m.mac_supported = 1");
}
if (typeof parameters.linux !== 'undefined' && parseInt(parameters.linux) === 1) {
whereStatements.push("m.linux_supported = 1");
}
if (typeof parameters.appID !== 'undefined' && parameters.appID.length > 0) {
const appID = parameters.appID;
whereStatements.push("m.id LIKE ?");
queryParameters.push('%' + appID + '%');
}
if (typeof parameters.title !== 'undefined' && parameters.title.length > 0) {
const title = parameters.title;
whereStatements.push("m.game_title LIKE ?");
queryParameters.push('%' + title + '%');
}
if (typeof parameters.developer !== 'undefined' && parameters.developer.length > 0) {
const developer = parameters.developer;
whereStatements.push("d.name LIKE ?");
queryParameters.push('%' + developer + '%');
}
if (typeof parameters.publisher !== 'undefined' && parameters.publisher.length > 0) {
const publisher = parameters.publisher;
whereStatements.push("p.name LIKE ?");
queryParameters.push('%' + publisher + '%');
}
if (typeof parameters.releaseDate !== 'undefined' && parameters.releaseDate.length > 0) {
const releaseDate = parameters.releaseDate;
whereStatements.push("m.release_date LIKE ?");
queryParameters.push('%' + releaseDate + '%');
}
if (typeof parameters.orderBy !== 'undefined') {
const sort = parameters.orderBy;
if (sort === 'ASC') {
orderByStatements.push('m.id ASC');
} else if (sort === 'DESC') {
orderByStatements.push('m.id DESC')
}
}
//Dynamically add WHERE expressions to SELECT statements if needed
if (whereStatements.length > 0) {
selectSql = selectSql + ' WHERE ' + whereStatements.join(' AND ');
}
//Dynamically add ORDER BY expressions to SELECT statements if needed
if (orderByStatements.length > 0) {
selectSql = selectSql + ' ORDER BY ' + orderByStatements.join(', ');
}
//Dynamically add ORDER BY expressions to SELECT statements if needed
if (typeof parameters.limitNumber !== 'undefined' && parameters.limitNumber > 0 && parameters.limitNumber < 6) {
selectSql = selectSql + ' LIMIT ' + parameters.limitNumber;
}
return await connection.query(selectSql, queryParameters);
}
async function addNewGame() {
let insertSql = `INSERT INTO games_master_table`;
let queryParameters = [];
return await connection.query(insertSql, queryParameters);
}
module.exports = {
getAllGames,
addNewGame
}