const axios = require('axios') const Queue = require('smart-request-balancer') const errorHandling = require('../../utils/errorHandling') const { requiredFields } = require('../../config/errors') const { WEATHER_API_KEY } = require('../../config/config') const dateTimeUTC = require('../secondary/dateTimeManagement') const capitalize = require('../secondary/capitalize') const queue = new Queue({ /* rate: number of requests per limit: number of seconds */ rules: { weatherRequest: { rate: 50, limit: 60, priority: 1 } } }) /* OUTPUTS */ module.exports = ({ res, next }, argsObject) => { let { cityName } = argsObject // S'il n'y a pas les champs obligatoire if (!(cityName)) { return errorHandling(next, requiredFields) } cityName = cityName.split(' ').join('+') // Récupère les données météo grâce à l'API : openweathermap.org. (→ avec limite de 50 requêtes par minute) queue.request(() => { axios.get(`https://api.openweathermap.org/data/2.5/weather?q=${cityName}&lang=fr&units=metric&appid=${WEATHER_API_KEY}`) .then((response) => { const json = response.data const showDateTimeValue = dateTimeUTC((json.timezone / 60 / 60).toString()).showDateTimeValue const resultHTML = `

🌎 Position : ${json.name}, ${json.sys.country}
⏰ Date et heure : ${showDateTimeValue}
☁️ Météo : ${capitalize(json.weather[0].description)}
🌡️ Température : ${json.main.temp} °C
💧 Humidité : ${json.main.humidity}%

` return res.status(200).json({ result: json, resultHTML }) }) .catch(() => errorHandling(next, { message: "La ville n'existe pas (dans l'API de openweathermap.org).", statusCode: 404 })) }, 'everyone', 'weatherRequest') }