in infrastructure/cdk/lambdas/allocateGamer/index.js [71:128]
const allocateSeatForGamer = function (gamerUsername, session, sessionControl, callback) {
let gamerIsAlreadyPlaying = ((sessionControl.PlayingGamers.findIndex((r) => { return (r == gamerUsername) })) != -1 ? true : false);
let gamerHasAlreadyPlayed = ((sessionControl.FinishedGamers.findIndex((r) => { return (r == gamerUsername) })) != -1 ? true : false);
if (gamerIsAlreadyPlaying) {
let message = "Gamer is already playing";
console.log(message);
// If game is already playing, let's let he keep playing
callback(null,"Keep playing.");
}
else {
if (gamerHasAlreadyPlayed && (session.GameType == "SINGLE_TRIAL" || session.GameType == "TIME_CONSTRAINED")) {
let errorMessage = "Session is " + session.GameType + ". Gamer has already played.";
console.log(errorMessage);
let responseError = new Error(errorMessage);
responseError.code = "GamerCannotPlay";
callback(responseError, 422);
}
else {
// Session is (MULTIPLE_TRIAL && gamerHasAlreadyPlayed) || !gamerHasAlreadyPlayed
console.log("Session is (MULTIPLE_TRIAL && gamerHasAlreadyPlayed) || !gamerHasAlreadyPlayed");
if (sessionControl.OccupiedSeats == sessionControl.TotalSeats) {
let errorMessage = "No seats available.";
console.log(errorMessage);
let responseError = new Error(errorMessage);
responseError.code = "NoSeatsAvailable";
callback(responseError, 422);
}
else {
sessionControl.PlayingGamers.push(gamerUsername);
if (gamerHasAlreadyPlayed)
sessionControl.FinishedGamers = sessionControl.FinishedGamers.filter( (g) => { return g!=gamerUsername });
let newNumberOfOccupiedSeats = sessionControl.OccupiedSeats + 1;
let tableName = process.env.SESSION_CONTROL_TABLENAME;
let params = {
"TableName": tableName ,
"Key": { "SessionId": session.SessionId },
"UpdateExpression": "SET OccupiedSeats = :n, PlayingGamers = :p, FinishedGamers = :f",
"ConditionExpression": "OccupiedSeats = :o",
'ExpressionAttributeValues': {
":n": newNumberOfOccupiedSeats,
":p": sessionControl.PlayingGamers,
":o": sessionControl.OccupiedSeats,
":f": sessionControl.FinishedGamers
}
};
DynamoDB.update(params, function (err, data) {
if (err) {
let message = "Error in allocating seats.";
console.log(message);
console.log(err);
callback(new Error(message), 422);
}
else callback(null, ("Success allocating "+gamerUsername));
});
}
}
}
};