74 lines
2.6 KiB
JavaScript
74 lines
2.6 KiB
JavaScript
/**
|
|
*
|
|
* @param {Request} request The incoming request
|
|
* @param {Response} response The response to send back
|
|
* @param {Express} app Express app instance
|
|
* @param {Pool} pool MariaDB pool instance
|
|
*/
|
|
function handleIncoming(request, response, app, pool)
|
|
{
|
|
|
|
let query = 'SELECT * FROM Exercise WHERE ExerciseID = ?';
|
|
let parameters = [];
|
|
|
|
if (!request.hasOwnProperty('uid') || typeof request.uid !== 'number')
|
|
{
|
|
query = 'SELECT * FROM Exercise ORDER BY RAND() LIMIT 1';
|
|
} else parameters.push(request.uid);
|
|
|
|
// Acquire database connection
|
|
pool.getConnection()
|
|
.then(conn => {
|
|
conn.query(query, parameters)
|
|
.then(rows => {
|
|
if (rows.length === 0)
|
|
{
|
|
response
|
|
.status(404)
|
|
.send(JSON.stringify({error: 'Exercise not found'}));
|
|
}
|
|
else
|
|
{
|
|
// Send back the data in the right format
|
|
let converted = rows.map(row => {
|
|
return {
|
|
exerciseId: row.ExerciseID,
|
|
name: row.Name,
|
|
muscleGroup: row.MuscleGroup,
|
|
shortDescription: row.ShortDescription,
|
|
description: row.Description,
|
|
imageUrl: row.ImageURL,
|
|
videoUrl: row.VideoURL,
|
|
path: row.Path,
|
|
duration: row.Duration
|
|
};
|
|
})[0];
|
|
|
|
response
|
|
.status(200)
|
|
.send(JSON.stringify(converted));
|
|
}
|
|
})
|
|
.catch(error => {
|
|
console.log(error);
|
|
response
|
|
.status(500)
|
|
.send(JSON.stringify({error: 'Internal server error (Querying)'}));
|
|
})
|
|
.finally(() => {
|
|
conn.end();
|
|
});
|
|
})
|
|
.catch(error => {
|
|
console.log(error);
|
|
response
|
|
.status(500)
|
|
.send(JSON.stringify({error: 'Internal server error (Connection)'}));
|
|
});
|
|
|
|
}
|
|
|
|
// Export the function that registers the incoming request handlers
|
|
module.exports = function(app, pool) {
|
|
app.post('/', (req, res) => handleIncoming(req, res, app, pool));
|
|
}; |