const errorHandling = require('../../utils/errorHandling') const moment = require('moment') const { requiredFields } = require('../../config/errors') function calculateAge (currentDate, { birthDateDay, birthDateMonth, birthDateYear }) { const day = currentDate.getDate() const month = currentDate.getMonth() const currentDateMoment = moment([currentDate.getFullYear(), month, day]) const birthDateMoment = moment([birthDateYear, birthDateMonth, birthDateDay]) // Calcule l'âge - Moment.js const ageYears = currentDateMoment.diff(birthDateMoment, 'year') birthDateMoment.add(ageYears, 'years') const ageMonths = currentDateMoment.diff(birthDateMoment, 'months') birthDateMoment.add(ageMonths, 'months') const ageDays = currentDateMoment.diff(birthDateMoment, 'days') const isBirthday = (birthDateDay === day && birthDateMonth === month) return { ageYears, ageMonths, ageDays, isBirthday } } /* OUTPUTS */ module.exports = ({ res, next }, argsObject) => { const { birthDate } = argsObject // S'il n'y a pas les champs obligatoire if (!(birthDate)) { return errorHandling(next, requiredFields) } const birthDateDay = parseInt(birthDate.substring(0, 2)) const birthDateMonth = parseInt((birthDate.substring(3, 5)) - 1) const birthDateYear = parseInt(birthDate.substring(6, 10)) // Si ce n'est pas une date valide const currentDate = new Date() const birthDateObject = new Date(birthDateYear, birthDateMonth, birthDateDay) const result = calculateAge(currentDate, { birthDateYear, birthDateMonth, birthDateDay }) if ((currentDate < birthDateObject) || isNaN(result.ageYears)) { return errorHandling(next, { message: 'Veuillez rentré une date valide...', statusCode: 400 }) } let resultHTML if (result.isBirthday) { resultHTML = `
Vous avez ${result.ageYears} ans. Joyeux Anniversaire! 🥳
` } else { resultHTML = `Vous avez ${result.ageYears} ans, ${result.ageMonths} mois et ${result.ageDays} jour(s).
` } return res.status(200).json({ ...result, resultHTML }) }