games-express-api/controllers/adminGames.js

136 lines
5.2 KiB
JavaScript
Raw Permalink Normal View History

2024-09-12 15:48:27 -04:00
import Game from '../models/Game.js'
import steamScraper from '../scripts/scraper.js'
import asyncHandler from '../middleware/async.js'
import ErrorResponse from '../utils/errorResponse.js'
const checkForHexRegExp = new RegExp('^[0-9a-fA-F]{24}$')
const checkForTwelveRegExp = new RegExp('^[0-9a-fA-F]{12}$')
import {decode, isValid} from 'js-base64'
/**
* games.js
*
* @description :: Server-side logic for managing games.
*/
/**
* gameController.list()
*/
export const list = asyncHandler(async (req, res, next) => {
return res.status(200).json(res.advancedResults)
})
/**
* gameController.show()
*/
export const show = asyncHandler(async (req, res, next) => {
const { id } = req.params
const gameId =
id === id.match(checkForTwelveRegExp) || id.match(checkForHexRegExp)
? '_id'
: 'steamId'
const game = await Game.findOne({ [gameId]: id }).select('-__v')
return res.status(200).json({
success: true,
data: game,
})
})
/**
* gameController.create()
*/
export const create = asyncHandler(async (req, res, next) => {
let oldGame
req.body.steamId.length > 0
? (oldGame = await Game.findOne({ steamId: req.body.steamId }))
: (oldGame = await Game.findOne({ title: req.body.title }))
if (oldGame)
return next(
new ErrorResponse(`The game ${oldGame.title} already exists`, 400)
)
req.body.createdBy = req.user.id
req.body.lastModifiedBy = req.user.id
req.body.accessedBy[0].user = req.user.id
const data =
req.body.scrape === true ? await steamScraper(req.body) : req.body
if (req.body.scrape === false) {
if (req.body.shortDesc && isValid(req.body.shortDesc)) req.body.shortDesc = decode(req.body.shortDesc)
if (req.body.reviews && isValid(req.body.reviews)) req.body.reviews = decode(req.body.reviews)
if (req.body.summary && isValid(req.body.summary)) req.body.summary = decode(req.body.summary)
isValid(req.body.systemRequirements?.windows?.minimum) ? req.body.systemRequirements.windows.minimum = decode(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) : ''
}
const game = await Game.create(data)
res.status(200).json({
success: true,
data: game,
})
})
/**
* gameController.update()
*/
export const update = asyncHandler(async (req, res, next) => {
const { id } = req.params
const gameId =
id === id.match(checkForTwelveRegExp) || id.match(checkForHexRegExp)
? '_id'
: 'steamId'
let game = await Game.findOne({ [gameId]: id })
if (!game)
return next(
ErrorResponse(`A game with the id of ${id} does not exist`, 401),
)
req.body.lastModifiedBy = req.user.id
if (req.body.shortDesc && isValid(req.body.shortDesc)) req.body.shortDesc = decode(req.body.shortDesc)
if (req.body.reviews && isValid(req.body.reviews)) req.body.reviews = decode(req.body.reviews)
if (req.body.summary && isValid(req.body.summary)) req.body.summary = decode(req.body.summary)
isValid(req.body.systemRequirements?.windows?.minimum) ? req.body.systemRequirements.windows.minimum = decode(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) : ''
const data =
req.body.scrape === true ? await steamScraper(req.body) : req.body
game = await Game.findOneAndUpdate({ [gameId]: id }, data, {
new: true,
runValidators: true,
})
res.status(200).json({
success: true,
data: game,
})
})
/**
* gameController.remove()
*/
export const remove = asyncHandler(async (req, res, next) => {
const { id } = req.params
const gameId =
id === id.match(checkForTwelveRegExp) || id.match(checkForHexRegExp)
? '_id'
: 'steamId'
await Game.findOneAndDelete({ [gameId]: id })
res.status(200).json({ success: true, data: {} })
})