soundbirder/controllers/api.js

89 lines
2.3 KiB
JavaScript
Raw Normal View History

require('dotenv').config();
const debug = require('debug')('soundbirder:api');
const debugLocale = require('debug')('soundbirder:locale');
const debugResponses = require('debug')('soundbirder:api:responses');
const quizzController = require('./quizz');
const { getRegion } = require('./region');
const QUIZZ_SIZE = process.env.QUIZZ_SIZE ? process.env.QUIZZ_SIZE : 5;
2022-08-29 10:38:42 +02:00
function getHome(req, res) {
res.render('api', {
2024-01-08 23:02:04 +01:00
title: "SoundBirder API",
2022-08-29 10:38:42 +02:00
version: 0
});
}
async function region(req, res) {
let {lat, lon} = req.query;
lat = parseFloat(lat);
lon = parseFloat(lon);
const region = await getRegion(lat, lon);
res.json({
region
})
}
2024-01-08 23:02:04 +01:00
async function quizz(req, res) {
debug('Generating quizz');
const { region } = req.query;
// debug(`Coordinates: ${lat}, ${lng}`);
const locale = req.i18n.locale;
debugLocale("Locale:", locale);
quizzController.getQuizzCached(region, locale, QUIZZ_SIZE)
2022-08-29 10:38:42 +02:00
.then(({ species, answer, audio }) => {
req.session.answer = answer;
res.json({ species, audio }).send();
debug("Quizz sent");
quizzController.cacheQuizz(); // Prepare the next question in advance.
debug("New quizz cached");
})
.catch(error => {
debug("Faced error while generating quizz");
debug(error)
});
}
2022-08-29 10:38:42 +02:00
function check(req, res) {
2022-08-29 14:05:34 +02:00
let answer, correct;
try {
answer = req.query.species;
correct = req.session.answer;
} catch (error) {
console.error(error);
}
2022-08-29 10:38:42 +02:00
let result = {};
2022-08-29 14:05:34 +02:00
try {
if (correct === undefined) {
console.error("No answer found in session");
} else if (answer === correct.speciesCode) {
debug("Correct answer");
result = {
correct: true,
message: req.i18n.__('Correct!'),
answer: correct
};
} else {
debug("Wrong answer");
result = {
correct: false,
message: req.i18n.__('Wrong!'),
answer: correct
};
}
} catch (error) {
console.error(error);
2022-08-29 10:38:42 +02:00
}
res.json(result);
}
const game = {
check,
quizz
}
module.exports = {
getHome,
game,
region
}