98 lines
2.5 KiB
JavaScript
98 lines
2.5 KiB
JavaScript
//environment variables
|
|
require('dotenv').config();
|
|
|
|
//utilities
|
|
let { log } = require('../common/utilities.js');
|
|
|
|
const statistics = (connection, req, res, cb) => {
|
|
return cb(undefined, { 'statistics': require('./equipment_statistics.json') });
|
|
};
|
|
|
|
const owned = (connection, req, res, cb) => {
|
|
//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, results) => {
|
|
if (err) throw err;
|
|
|
|
if (results[0].total !== 1) {
|
|
return cb('Invalid equipment owned credentials');
|
|
}
|
|
|
|
let query = 'SELECT name, quantity FROM equipment WHERE accountId = ?;';
|
|
connection.query(query, [req.body.id], (err, results) => {
|
|
if (err) throw err;
|
|
|
|
let res = {}
|
|
|
|
Object.keys(results).map((key) => {
|
|
if (res[results[key].name] !== undefined) {
|
|
log('WARNING: Invalid database state, equipment owned', JSON.stringify(results));
|
|
}
|
|
res[results[key].name] = results[key].quantity;
|
|
});
|
|
|
|
return cb(undefined, { 'owned': res });
|
|
});
|
|
});
|
|
};
|
|
|
|
const equipmentRequest = (connection) => (req, res) => {
|
|
//if no field received, send everything
|
|
if (!req.body.field) {
|
|
//compose the returned objects
|
|
statistics(connection, req, res, (err, statisticsObj) => {
|
|
if (err) {
|
|
res.status(400).write(log(err, req.body.id, req.body.token, req.body.field));
|
|
res.end();
|
|
return;
|
|
}
|
|
|
|
return owned(connection, req, res, (err, ownedObj) => {
|
|
if (err) {
|
|
res.status(400).write(log(err, req.body.id, req.body.token, req.body.field));
|
|
res.end();
|
|
return;
|
|
}
|
|
|
|
//finally, compose the resulting objects
|
|
res.status(200).json(Object.assign({}, statisticsObj, ownedObj));
|
|
res.end();
|
|
});
|
|
});
|
|
|
|
return;
|
|
}
|
|
|
|
//send specific fields
|
|
switch(req.body.field) {
|
|
case 'statistics':
|
|
return statistics(connection, req, res, (err, obj) => {
|
|
if (err) {
|
|
res.status(400).write(log(err, req.body.id, req.body.token, req.body.field));
|
|
} else {
|
|
res.status(200).json(obj);
|
|
}
|
|
|
|
res.end();
|
|
});
|
|
|
|
case 'owned':
|
|
return owned(connection, req, res, (err, obj) => {
|
|
if (err) {
|
|
res.status(400).write(log(err, req.body.id, req.body.token, req.body.field));
|
|
} else {
|
|
res.status(200).json(obj);
|
|
}
|
|
|
|
res.end();
|
|
});
|
|
|
|
default:
|
|
res.status(400).write(log('Unknown field received', req.body.id, req.body.token, req.body.field));
|
|
res.end();
|
|
}
|
|
};
|
|
|
|
module.exports = {
|
|
equipmentRequest: equipmentRequest
|
|
}; |