style(games): reformat controllers/games.js with Prettier

Apply Prettier default formatting across the games controller with no logic changes:

- single -> double quotes, add missing semicolons

- 2-space indentation and consistent line wrapping

- expand dense ternary/decode blocks in create() and update() for readability

This isolates the upcoming create() Steam URL feature so its functional diff stays small and reviewable.
This commit is contained in:
2026-09-05 19:16:06 -04:00
parent 20c1fd7be9
commit a9b9fe1047
+231 -176
View File
@@ -1,238 +1,293 @@
// noinspection DuplicatedCode // noinspection DuplicatedCode
import Game from '../models/Game.js' import Game from "../models/Game.js";
import steamScraper from '../scripts/scraper.js' import steamScraper from "../scripts/scraper.js";
import asyncHandler from '../middleware/async.js' import asyncHandler from "../middleware/async.js";
import ErrorResponse from '../utils/errorResponse.js' import ErrorResponse from "../utils/errorResponse.js";
import {decode, isValid} from "js-base64"; import { decode, isValid } from "js-base64";
const checkForHexRegExp = new RegExp('^[0-9a-fA-F]{24}$') const checkForHexRegExp = new RegExp("^[0-9a-fA-F]{24}$");
const checkForTwelveRegExp = new RegExp('^[0-9a-fA-F]{12}$') const checkForTwelveRegExp = new RegExp("^[0-9a-fA-F]{12}$");
/** /**
* games.js * games.js
* *
* @description :: Server-side logic for managing games. * @description :: Server-side logic for managing games.
*/ */
/** /**
* gameController.list() * gameController.list()
*/ */
export const list = asyncHandler(async (req, res, next) => { export const list = asyncHandler(async (req, res, next) => {
const data = res.advancedResults.data const data = res.advancedResults.data;
if (data[0]?.accessedBy) { if (data[0]?.accessedBy) {
for (let i = 0; i < data.length; i++) { for (let i = 0; i < data.length; i++) {
for (let x = 0; x < data[i].accessedBy.length; x++) { for (let x = 0; x < data[i].accessedBy.length; x++) {
if (data[i].accessedBy[x].user.toString() !== req.user.id) if (data[i].accessedBy[x].user.toString() !== req.user.id)
data[i].accessedBy.splice(x, 1) data[i].accessedBy.splice(x, 1);
} }
}
} }
return res.status(200).json(res.advancedResults) }
}) return res.status(200).json(res.advancedResults);
});
/** /**
* gameController.show() * gameController.show()
*/ */
export const show = asyncHandler(async (req, res, next) => { export const show = asyncHandler(async (req, res, next) => {
const {id} = req.params const { id } = req.params;
const gameId = const gameId =
id === id.match(checkForTwelveRegExp) || id.match(checkForHexRegExp) id === id.match(checkForTwelveRegExp) || id.match(checkForHexRegExp)
? '_id' ? "_id"
: 'steamId' : "steamId";
const game = await Game.findOne({[gameId]: id}) const game = await Game.findOne({ [gameId]: id });
if (!game) if (!game)
return next( return next(
new ErrorResponse(`Game not found with id of ${req.params.id}`, 404), new ErrorResponse(`Game not found with id of ${req.params.id}`, 404),
) );
if ( if (
!game.accessedBy !game.accessedBy
.map((x) => x.user.toString() === req.user.id) .map((x) => x.user.toString() === req.user.id)
.includes(true) .includes(true)
) )
return next( return next(
new ErrorResponse( new ErrorResponse(
`You do not have permission to access Game ID ${req.params.id}`, `You do not have permission to access Game ID ${req.params.id}`,
401, 401,
), ),
) );
const userGame = await Game.findOne({[gameId]: id}).select( const userGame = await Game.findOne({ [gameId]: id }).select(
'-createdBy -__v', "-createdBy -__v",
) );
for (let i = 0; i < userGame.accessedBy.length; i++) { for (let i = 0; i < userGame.accessedBy.length; i++) {
if (userGame.accessedBy[i].user.toString() !== req.user.id) if (userGame.accessedBy[i].user.toString() !== req.user.id)
userGame.accessedBy.splice(i, 1) userGame.accessedBy.splice(i, 1);
} }
res.status(200).json({success: true, data: userGame}) res.status(200).json({ success: true, data: userGame });
}) });
/** /**
* gameController.create() * gameController.create()
*/ */
export const create = asyncHandler(async (req, res, next) => { export const create = asyncHandler(async (req, res, next) => {
let oldGame let oldGame;
if (req.body.shortDesc && isValid(req.body.shortDesc)) req.body.shortDesc = decode(req.body.shortDesc) if (req.body.shortDesc && isValid(req.body.shortDesc))
if (req.body.reviews && isValid(req.body.reviews)) req.body.reviews = decode(req.body.reviews) req.body.shortDesc = decode(req.body.shortDesc);
if (req.body.summary && isValid(req.body.summary)) req.body.summary = decode(req.body.summary) if (req.body.reviews && isValid(req.body.reviews))
isValid(req.body.systemRequirements?.windows?.minimum) ? req.body.systemRequirements.windows.minimum = decode(req.body.systemRequirements.windows.minimum) : '' req.body.reviews = decode(req.body.reviews);
isValid(req.body.systemRequirements?.windows?.recommended) ? req.body.systemRequirements.windows.recommended = decode(req.body.systemRequirements.windows.recommended) : '' if (req.body.summary && isValid(req.body.summary))
isValid(req.body.systemRequirements?.mac?.minimum) ? req.body.systemRequirements.mac.minimum = decode(req.body.systemRequirements.mac.minimum) : '' req.body.summary = decode(req.body.summary);
isValid(req.body.systemRequirements?.mac?.recommended) ? req.body.systemRequirements.mac.recommended = decode(req.body.systemRequirements.mac.recommended) : '' isValid(req.body.systemRequirements?.windows?.minimum)
isValid(req.body.systemRequirements?.linux?.minimum) ? req.body.systemRequirements.linux.minimum = decode(req.body.systemRequirements.linux.minimum) : '' ? (req.body.systemRequirements.windows.minimum = decode(
isValid(req.body.systemRequirements?.linux?.recommended) ? req.body.systemRequirements.linux.recommended = decode(req.body.systemRequirements.linux.recommended) : '' req.body.systemRequirements.windows.minimum,
))
: "";
isValid(req.body.systemRequirements?.windows?.recommended)
? (req.body.systemRequirements.windows.recommended = decode(
req.body.systemRequirements.windows.recommended,
))
: "";
isValid(req.body.systemRequirements?.mac?.minimum)
? (req.body.systemRequirements.mac.minimum = decode(
req.body.systemRequirements.mac.minimum,
))
: "";
isValid(req.body.systemRequirements?.mac?.recommended)
? (req.body.systemRequirements.mac.recommended = decode(
req.body.systemRequirements.mac.recommended,
))
: "";
isValid(req.body.systemRequirements?.linux?.minimum)
? (req.body.systemRequirements.linux.minimum = decode(
req.body.systemRequirements.linux.minimum,
))
: "";
isValid(req.body.systemRequirements?.linux?.recommended)
? (req.body.systemRequirements.linux.recommended = decode(
req.body.systemRequirements.linux.recommended,
))
: "";
req.body.steamId.length > 0 req.body.steamId.length > 0
? (oldGame = await Game.findOne({ ? (oldGame = await Game.findOne({
steamId: req.body.steamId, steamId: req.body.steamId,
'accessedBy.user': req.user.id, "accessedBy.user": req.user.id,
})) }))
: (oldGame = await Game.findOne({ : (oldGame = await Game.findOne({
title: req.body.title, title: req.body.title,
'accessedBy.user': req.user.id, "accessedBy.user": req.user.id,
})) }));
if (oldGame) if (oldGame)
return next( return next(
new ErrorResponse(`The game ${oldGame.title} already exists in users account.`, 400) new ErrorResponse(
) `The game ${oldGame.title} already exists in users account.`,
400,
),
);
req.body.steamId.length > 0 req.body.steamId.length > 0
? (oldGame = await Game.findOne({steamId: req.body.steamId})) ? (oldGame = await Game.findOne({ steamId: req.body.steamId }))
: (oldGame = await Game.findOne({title: req.body.title})) : (oldGame = await Game.findOne({ title: req.body.title }));
if (oldGame) { if (oldGame) {
oldGame.accessedBy.push({ oldGame.accessedBy.push({
user: req.user.id, user: req.user.id,
store: req.body.accessedBy[0].store, store: req.body.accessedBy[0].store,
playStatus: req.body.accessedBy[0].playStatus, playStatus: req.body.accessedBy[0].playStatus,
soundtrack: req.body.accessedBy[0].soundtrack, soundtrack: req.body.accessedBy[0].soundtrack,
rating: req.body.accessedBy[0].rating, rating: req.body.accessedBy[0].rating,
}) });
oldGame.lastModifiedBy = req.user.id oldGame.lastModifiedBy = req.user.id;
await oldGame.save() await oldGame.save();
return res.status(200).json({ return res.status(200).json({
success: true, success: true,
data: oldGame, data: oldGame,
}) });
} }
req.body.createdBy = req.user.id req.body.createdBy = req.user.id;
req.body.lastModifiedBy = req.user.id req.body.lastModifiedBy = req.user.id;
req.body.accessedBy[0].user = req.user.id req.body.accessedBy[0].user = req.user.id;
const data = const data =
req.body.scrape === true ? await steamScraper(req.body) : req.body req.body.scrape === true ? await steamScraper(req.body) : req.body;
const game = await Game.create(data) const game = await Game.create(data);
res.status(200).json({ res.status(200).json({
success: true, success: true,
data: game, data: game,
}) });
}) });
/** /**
* gameController.update() * gameController.update()
*/ */
export const update = asyncHandler(async (req, res, next) => { export const update = asyncHandler(async (req, res, next) => {
const {id} = req.params const { id } = req.params;
const gameId = const gameId =
id === id.match(checkForTwelveRegExp) || id.match(checkForHexRegExp) id === id.match(checkForTwelveRegExp) || id.match(checkForHexRegExp)
? '_id' ? "_id"
: 'steamId' : "steamId";
if (req.body.shortDesc && isValid(req.body.shortDesc)) req.body.shortDesc = decode(req.body.shortDesc) if (req.body.shortDesc && isValid(req.body.shortDesc))
if (req.body.reviews && isValid(req.body.reviews)) req.body.reviews = decode(req.body.reviews) req.body.shortDesc = decode(req.body.shortDesc);
if (req.body.summary && isValid(req.body.summary)) req.body.summary = decode(req.body.summary) if (req.body.reviews && isValid(req.body.reviews))
isValid(req.body.systemRequirements?.windows?.minimum) ? req.body.systemRequirements.windows.minimum = decode(req.body.systemRequirements.windows.minimum) : '' req.body.reviews = decode(req.body.reviews);
isValid(req.body.systemRequirements?.windows?.recommended) ? req.body.systemRequirements.windows.recommended = decode(req.body.systemRequirements.windows.recommended) : '' if (req.body.summary && isValid(req.body.summary))
isValid(req.body.systemRequirements?.mac?.minimum) ? req.body.systemRequirements.mac.minimum = decode(req.body.systemRequirements.mac.minimum) : '' req.body.summary = decode(req.body.summary);
isValid(req.body.systemRequirements?.mac?.recommended) ? req.body.systemRequirements.mac.recommended = decode(req.body.systemRequirements.mac.recommended) : '' isValid(req.body.systemRequirements?.windows?.minimum)
isValid(req.body.systemRequirements?.linux?.minimum) ? req.body.systemRequirements.linux.minimum = decode(req.body.systemRequirements.linux.minimum) : '' ? (req.body.systemRequirements.windows.minimum = decode(
isValid(req.body.systemRequirements?.linux?.recommended) ? req.body.systemRequirements.linux.recommended = decode(req.body.systemRequirements.linux.recommended) : '' req.body.systemRequirements.windows.minimum,
))
: "";
isValid(req.body.systemRequirements?.windows?.recommended)
? (req.body.systemRequirements.windows.recommended = decode(
req.body.systemRequirements.windows.recommended,
))
: "";
isValid(req.body.systemRequirements?.mac?.minimum)
? (req.body.systemRequirements.mac.minimum = decode(
req.body.systemRequirements.mac.minimum,
))
: "";
isValid(req.body.systemRequirements?.mac?.recommended)
? (req.body.systemRequirements.mac.recommended = decode(
req.body.systemRequirements.mac.recommended,
))
: "";
isValid(req.body.systemRequirements?.linux?.minimum)
? (req.body.systemRequirements.linux.minimum = decode(
req.body.systemRequirements.linux.minimum,
))
: "";
isValid(req.body.systemRequirements?.linux?.recommended)
? (req.body.systemRequirements.linux.recommended = decode(
req.body.systemRequirements.linux.recommended,
))
: "";
let game = await Game.findOne({ let game = await Game.findOne({
[gameId]: id, [gameId]: id,
'accessedBy.user': req.user.id, "accessedBy.user": req.user.id,
}) });
if (!game) if (!game)
return next( return next(
new ErrorResponse(`A game with the id of ${id} does not exist`, 401), new ErrorResponse(`A game with the id of ${id} does not exist`, 401),
) );
game = await Game.findOneAndUpdate( game = await Game.findOneAndUpdate(
{[gameId]: id, 'accessedBy.user': req.user.id}, { [gameId]: id, "accessedBy.user": req.user.id },
{ {
$set: { $set: {
series: req.body.series, series: req.body.series,
intel: req.body.intel, intel: req.body.intel,
genre: req.body.genre, genre: req.body.genre,
wine: req.body.wine, wine: req.body.wine,
lastModifiedBy: req.user.id, lastModifiedBy: req.user.id,
'accessedBy.$.store': req.body.accessedBy[0].store, "accessedBy.$.store": req.body.accessedBy[0].store,
'accessedBy.$.playStatus': req.body.accessedBy[0].playStatus, "accessedBy.$.playStatus": req.body.accessedBy[0].playStatus,
'accessedBy.$.soundtrack': req.body.accessedBy[0].soundtrack, "accessedBy.$.soundtrack": req.body.accessedBy[0].soundtrack,
'accessedBy.$.rating': req.body.accessedBy[0].rating, "accessedBy.$.rating": req.body.accessedBy[0].rating,
}, },
}, },
{new: true, runValidators: true}, { new: true, runValidators: true },
) );
res.status(200).json({ res.status(200).json({
success: true, success: true,
data: game, data: game,
}) });
}) });
/** /**
* gameController.remove() * gameController.remove()
*/ */
export const remove = asyncHandler(async (req, res, next) => { export const remove = asyncHandler(async (req, res, next) => {
const {id} = req.params const { id } = req.params;
const gameId = const gameId =
id === id.match(checkForTwelveRegExp) || id.match(checkForHexRegExp) id === id.match(checkForTwelveRegExp) || id.match(checkForHexRegExp)
? '_id' ? "_id"
: 'steamId' : "steamId";
let game = await Game.findOne({ let game = await Game.findOne({
[gameId]: id, [gameId]: id,
'accessedBy.user': req.user.id, "accessedBy.user": req.user.id,
}) });
if (!game) if (!game)
return next( return next(
new ErrorResponse(`A game with the id of ${id} does not exist`, 401), new ErrorResponse(`A game with the id of ${id} does not exist`, 401),
) );
if (game.accessedBy.length > 1) { if (game.accessedBy.length > 1) {
await Game.findOneAndUpdate( await Game.findOneAndUpdate(
{[gameId]: id, 'accessedBy.user': req.user.id}, { [gameId]: id, "accessedBy.user": req.user.id },
{ {
$pull: { $pull: {
accessedBy: {user: req.user.id}, accessedBy: { user: req.user.id },
}, },
}, },
{new: true, runValidators: true}, { new: true, runValidators: true },
) );
} else { } else {
await Game.findOneAndDelete({[gameId]: id}) await Game.findOneAndDelete({ [gameId]: id });
} }
res.status(200).json({
res.status(200).json({ success: true,
success: true, data: {},
data: {}, });
}) });
})