Iniciativa Cidadã Independente · Transparência Parlamentar
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 }