2020-03-19 22:59:06 +01:00
|
|
|
const errorHandling = require('../../utils/errorHandling');
|
2020-03-17 18:35:03 +01:00
|
|
|
const { requiredFields, generalError } = require('../../config/errors');
|
|
|
|
|
|
|
|
const correspondancesDistance = ["pm", null, null, "nm", null, null, "µm", null, null, "mm", "cm", "dm", "m", "dam", "hm", "km", null, null, "Mm", null, null, "Gm", null, null, "Tm"];
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @description Convertis la longueur (distance) avec les unités allant de picomètre au Téramètre.
|
|
|
|
* @requires {@link correspondancesDistance}
|
|
|
|
* @param {Number} firstValue - Le nombre que vous voulez convertir
|
|
|
|
* @param {String} unitFirstValue - L'unité du nombre que vous voulez convertir
|
|
|
|
* @param {String} unitFinalValue - L'unité de votre nombre après la conversion
|
|
|
|
* @returns {Object|Boolean} → false si arguments non valides et sinon un objet contenant la string et le nombre résultat
|
|
|
|
* @examples convertDistance(500, 'cm', 'm') → { resultNumber: 5, resultString: "5 m" }
|
|
|
|
*/
|
|
|
|
function convertDistance(firstValue, unitFirstValue, unitFinalValue) {
|
|
|
|
const index1 = correspondancesDistance.indexOf(unitFirstValue);
|
|
|
|
const index2 = correspondancesDistance.indexOf(unitFinalValue);
|
|
|
|
if (index1 !== -1 && index2 !== -1) {
|
|
|
|
const difference = index1 - index2;
|
|
|
|
const result = firstValue * Math.pow(10, difference);
|
|
|
|
return {
|
|
|
|
resultNumber: result,
|
|
|
|
resultString: `${result} ${unitFinalValue}`
|
|
|
|
};
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* OUTPUTS */
|
2020-03-19 22:59:06 +01:00
|
|
|
exports.convertDistanceOutput = ({ res, next }, argsObject) => {
|
2020-03-17 18:35:03 +01:00
|
|
|
let { number, numberUnit, finalUnit } = argsObject;
|
|
|
|
|
|
|
|
// S'il n'y a pas les champs obligatoire
|
|
|
|
if (!(number && numberUnit && finalUnit)) {
|
2020-03-19 22:59:06 +01:00
|
|
|
return errorHandling(next, requiredFields);
|
2020-03-17 18:35:03 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
// Si ce n'est pas un nombre
|
|
|
|
number = parseInt(number);
|
|
|
|
if (isNaN(number)) {
|
2020-03-19 22:59:06 +01:00
|
|
|
return errorHandling(next, { message: "Veuillez rentré un nombre valide.", statusCode: 400 });
|
2020-03-17 18:35:03 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
const result = convertDistance(number, numberUnit, finalUnit);
|
|
|
|
if (!result) {
|
2020-03-20 11:45:19 +01:00
|
|
|
return errorHandling(next, generalError);
|
2020-03-17 18:35:03 +01:00
|
|
|
}
|
|
|
|
|
2020-03-19 22:59:06 +01:00
|
|
|
return res.status(200).json(result);
|
2020-03-17 18:35:03 +01:00
|
|
|
}
|