in backend/Functions/Main/playerprogression_put/app.js [40:90]
async function updateXP(playerName, experience, wins) {
const Key = { playerName };
let current;
try {
current = await ddb.get({
TableName: playerProgressTable,
Key,
}).promise();
} catch (e) {
console.error(`Error getting player record ${JSON.stringify(e.stack)}`);
console.error(`get${JSON.stringify(Key)}`);
}
let result;
if (!Object.prototype.hasOwnProperty.call(current, 'Item')) {
// no item was retrieved - player has no current progress
const level = await getLevel(experience);
const parms = {
TableName: playerProgressTable,
Item: {
playerName, experience, level, wins,
},
};
try {
result = await ddb.put(parms).promise();
} catch (e) {
console.error(`error storing ${playerName} - ${experience.toString()}`);
console.error(`${JSON.stringify(e.stack)}`);
}
} else {
const newxp = current.Item.experience + experience;
const newwins = current.Item.wins + wins;
const newlevel = await getLevel(newxp);
const updateParms = {
TableName: playerProgressTable,
Key: { playerName },
ExpressionAttributeNames: { '#xp': 'experience', '#lvl': 'level', '#wins': 'wins' },
ExpressionAttributeValues: {
':xp': newxp, ':lvl': newlevel, ':wins': newwins, ':curxp': current.Item.experience,
},
ConditionExpression: '#xp = :curxp',
UpdateExpression: 'set #xp = :xp, #lvl = :lvl, #wins = :wins',
};
try {
result = await ddb.update(updateParms).promise();
} catch (e) {
console.error(`error updating xp for ${playerName} - ${newxp.toString}`);
console.error(`Error: ${JSON.stringify(e.stack)}`);
}
}
return result;
}