Added badge selection
This commit is contained in:
@@ -0,0 +1,132 @@
|
||||
//environment variables
|
||||
require('dotenv').config();
|
||||
|
||||
//utilities
|
||||
let { log } = require('../common/utilities.js');
|
||||
|
||||
let { logActivity } = require('./utilities.js');
|
||||
|
||||
const getBadgesStatistics = (cb) => {
|
||||
//TODO: apiVisible field
|
||||
return cb(undefined, { 'statistics': require('./badge_statistics.json') });
|
||||
};
|
||||
|
||||
const getBadgesOwned = (connection, id, cb) => {
|
||||
let query = 'SELECT name, active FROM badges WHERE accountId = ?;';
|
||||
connection.query(query, [id], (err, results) => {
|
||||
if (err) throw err;
|
||||
|
||||
let ret = {}; //names, active
|
||||
|
||||
Object.keys(results).map((key) => {
|
||||
if (ret[results[key].name] !== undefined) {
|
||||
log('WARNING: Invalid database state, badges owned', id, JSON.stringify(results));
|
||||
}
|
||||
ret[results[key].name] = { active: results[key].active };
|
||||
});
|
||||
|
||||
return cb(undefined, { 'owned': ret });
|
||||
});
|
||||
}
|
||||
|
||||
const listRequest = (connection) => (req, res) => {
|
||||
getBadgesStatistics((err, results) => {
|
||||
if (err) throw err;
|
||||
|
||||
res.status(200).json(results);
|
||||
res.end();
|
||||
|
||||
log('Badge list sent');
|
||||
});
|
||||
}
|
||||
|
||||
const ownedRequest = (connection) => (req, res) => {
|
||||
//validate the credentials
|
||||
let query = 'SELECT COUNT(*) AS total FROM sessions WHERE accountId = ? AND token = ?;';
|
||||
connection.query(query, [req.body.id, req.body.token], (err, credentials) => {
|
||||
if (err) throw err;
|
||||
|
||||
if (credentials[0].total !== 1) {
|
||||
res.status(400).write(log('Invalid badges owned credentials', JSON.stringify(body), body.id, body.token));
|
||||
res.end();
|
||||
return;
|
||||
}
|
||||
|
||||
//get stats and owned
|
||||
getBadgesStatistics((err, badgesStatistics) => {
|
||||
if (err) throw err;
|
||||
|
||||
getBadgesOwned(connection, req.body.id, (err, badgesOWned) => {
|
||||
if (err) throw err;
|
||||
|
||||
res.status(200).json(Object.assign({}, badgesStatistics, badgesOWned));
|
||||
res.end();
|
||||
|
||||
log('Badges owned sent', req.body.id);
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
const selectActiveBadge = (connection) => (req, res) => {
|
||||
//validate the credentials
|
||||
let query = 'SELECT COUNT(*) AS total FROM sessions WHERE accountId = ? AND token = ?;';
|
||||
connection.query(query, [req.body.id, req.body.token], (err, credentials) => {
|
||||
if (err) throw err;
|
||||
|
||||
if (credentials[0].total !== 1) {
|
||||
res.status(400).write(log('Invalid active badge select credentials', JSON.stringify(body), body.id, body.token));
|
||||
res.end();
|
||||
return;
|
||||
}
|
||||
|
||||
//check to see if the player owns this badge
|
||||
getBadgesOwned(connection, req.body.id, (err, { owned }) => {
|
||||
if (err) throw err;
|
||||
|
||||
if (req.body.name !== null && !owned[req.body.name]) {
|
||||
res.status(400).write('You don\'t own that badge');
|
||||
res.end();
|
||||
return;
|
||||
}
|
||||
|
||||
//zero out the user's selection
|
||||
let query = 'UPDATE badges SET active = FALSE WHERE accountId = ?;';
|
||||
connection.query(query, [req.body.id], (err) => {
|
||||
if (err) throw err;
|
||||
|
||||
//update the user's selection
|
||||
let query = 'UPDATE badges SET active = TRUE WHERE accountId = ? AND name = ?;';
|
||||
connection.query(query, [req.body.id, req.body.name], (err) => {
|
||||
if (err) throw err;
|
||||
|
||||
//re-grab the owned badges (with updated info)
|
||||
getBadgesOwned(connection, req.body.id, (err, results) => {
|
||||
if (err) throw err;
|
||||
|
||||
res.status(200).json(results);
|
||||
res.end();
|
||||
|
||||
log('Updated badge selection', req.body.id, req.body.name);
|
||||
logActivity(connection, req.body.id);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
const rewardBadge = (connection, id, badgeName) => {
|
||||
//TODO: constants as badge/equipment names?
|
||||
let query = 'INSERT IGNORE badges (accountId, name) VALUES (?, ?);';
|
||||
connection.query(query, [id, badgeName], (err) => {
|
||||
if (err) throw err;
|
||||
});
|
||||
};
|
||||
|
||||
module.exports = {
|
||||
listRequest: listRequest,
|
||||
ownedRequest: ownedRequest,
|
||||
selectActiveBadge: selectActiveBadge,
|
||||
rewardBadge: rewardBadge
|
||||
};
|
||||
Reference in New Issue
Block a user