Source: route-score/controller.js

/**
 * @module  score-route-controller
 * @desc    The leaderboard-api score controller module.
 * @version 1.0.0
 * @author  Essam A. El-Sherif
 */

/* Import local dependencies */
import { LeaderBoard } from './model.js';

/**
 * @func
 * @async
 * @static
 * @param  {object} req - The request object.
 * @param  {object} res - The response object.
 * @return {Promise}
 * @desc   Router-level middleware function to submits user's score for an activity that will be created if nonexistent.
 * @requires module:redis-leaderboard.LeaderBoard.addUserScore
 */
export async function addUserScoreMiddleware(req, res){

	res.setHeader('Server', req.app.get('serverName'));

	if(Object.keys(req.body).length === 0){
		res.status(400).send('Submission Error: none or invalid request payload');
		return;
	}

	if(!('activity' in req.body || 'score' in req.body)){
		res.status(400).send('Submission Error: no activity/score given');
		return;
	}

	if(!('activity' in req.body) || !req.body.activity){
		res.status(400).send('Submission Error: no activity given');
		return false;
	}

	if(!('score' in req.body) || !req.body.score){
		res.status(400).send('Submission Error: no score given');
		return false;
	}

	const redisKeyA = req.app.get('redisKeyActivity');
	const redisKeyT = req.app.get('redisKeyTimestamp');

	const leaderboardObj = new LeaderBoard(req.app.get('clientRd'), redisKeyT, redisKeyA);

	try{
		let activities = await leaderboardObj.addUserScore(req.body.activity, req.auth.username, req.body.score);
		res.status(201).send(activities);
	}
	catch(err){
		res.status(401).send(`Submission Error: ${err.message}`);
	}
}

/**
 * @func
 * @async
 * @static
 * @param  {object} req - The request object.
 * @param  {object} res - The response object.
 * @return {Promise}
 * @desc   Router-level middleware function to remove a user's score for an activity.
 * @requires module:redis-leaderboard.LeaderBoard.removeUserScore
 */
export async function removeUserScoreMiddleware(req, res){

	res.setHeader('Server', req.app.get('serverName'));

	if(req.method.toUpperCase() === 'PATCH'){
		if(Object.keys(req.body).length === 0){
			res.status(400).send('Submission Error: none or invalid request payload');
			return;
		}

		if(!('activity' in req.body && req.body.activity)){
			res.status(400).send('Submission Error: no activity given');
			return;
		}
	}

	const redisKeyA = req.app.get('redisKeyActivity');
	const redisKeyT = req.app.get('redisKeyTimestamp');

	const leaderboardObj = new LeaderBoard(req.app.get('clientRd'), redisKeyT, redisKeyA);

	try{
		await leaderboardObj.removeUserScore(req.auth.username, req.body.activity);
		res.status(204).send();
	}
	catch(err){
		res.status(401).send(`Submission Error: ${err.message}`);
	}
}