Timestamp microservice com NodeJS e Express
Uma requisição a api/:date
com uma data válida retorna um objeto JSON (nosso timestamp) com um key unix
contendo um timestamp em milisegundos.
O timestamp também retorna uma key utc
contendo um valor no formato Thu, 01 Jan 1970 00:00:00 GMT
O parametro /:date
aceita uma data unix
em milisegundos, o timestamp permanece com as mesmas especificações
Caso o parametro /:date
passado seja inválido, o objeto JSON deve ter a estrutura { error: 'Invalid Date' }
Um parametro /:date
vazio deve retornar uma timestamp com a data atual
Uma requisição para /api/1451001600000
deverá retornar { unix: 1451001600000, utc: "Fri, 25 Dec 2015 00:00:00 GMT" }
Segue o código:
app.get('/', (req,res)=>{
res.send(
'use /api/your_date to get a timestamp, please use a month-day-year format'
)
})
//a função dateToUtc faz o handle do parametro date e retorna um objeto pronto
const dateToUtc = date =>{
if(date !== ''){
date = (parseInt(date) <= 12 && date.includes('-') ) ? date :
parseInt(date)
}
const objDate = {
unix: date==='' ? Date.now() : Date.parse(new Date(date)),
utc: date==='' ? new Date().toUTCString() : new Date(date).toUTCString()
}
return objDate
}
app.get('/api/:date?', (req,res) => {
/*o primeiros verificamos se o parametro date foi definido, caso não,
invocamos a função dateToUtc com uma string vazia como parametro.*/
objDate = !req.params.date ? dateToUtc('') : dateToUtc(req.params.date)
/*caso a resposta a data seja inválida, o objeto gerado pela função conterá
o valor 'Invalid Date', caso a key utc contenha esse valor,
geramos um objeto de erro, caso não, retornamos o objeto original*/
objDate.utc === 'Invalid Date' ?
res.send({error: objDate.utc}) : res.send(objDate)
})