TS33 linhas905 bytes
apps/worker/src/routes/ceap.ts
SHA-256
7ad96081792f69fdf17f69c34ee51c0ef768f0802f813bc4b4d8038dc504676b
Somente leiturafonte-acf635076da2
import { Hono } from 'hono'
import type { Env } from '../types'
import { getCeapMensal } from '../services/adm'
const ceap = new Hono<{ Bindings: Env }>()
ceap.get('/:codigo', async (c) => {
const codigo = c.req.param('codigo')
const anoParam = c.req.query('ano')
const ano = anoParam ? parseInt(anoParam, 10) : new Date().getFullYear()
if (isNaN(ano) || ano < 2000 || ano > 2099) {
return c.json({ error: 'Ano inválido' }, 400)
}
let meses
try {
meses = await getCeapMensal(c.env, codigo, ano)
} catch (err) {
// Falha de upstream não pode virar "R$ 0,00" na tela do senador.
console.error('[ceap] upstream indisponível:', err)
return c.json({ error: 'Dados de cota indisponíveis no momento' }, 503)
}
return c.json(
{ codigo, ano, meses },
200,
{ 'Cache-Control': 'public, max-age=3600, stale-while-revalidate=600' },
)
})
export { ceap }