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 }) }