mirror of
https://github.com/fsolla/teqo.git
synced 2026-11-13 15:13:07 +00:00
sectionPotential.ts parseia/valida o shard (ordem fail-closed), busca por
seção e computa o cenário aprovado — válidos = nominais, X₁ = comparecimento
− Lula − Flávio (todos os terceiros; o bulk tem 13 candidaturas) e X₂ =
aptos − Lula − Flávio — com formatadores pt-BR e o nome do PNG. O loader
server-only lê os shards por fs com cache por processo; as rotas públicas
/api/potencial/{municipios,secao} aplicam same-origin, rate-limit e zod
strict, com 404 honesto e cache de um dia. O story 1080×1920 é desenhado
por um renderer puro com contexto estrutural. 'potencial' entra nos slugs
reservados e o módulo novo no pin do top-level de utilities.
21 lines
817 B
TypeScript
21 lines
817 B
TypeScript
import { z } from 'zod'
|
||
|
||
import { POTENTIAL_UFS } from '@/lib/sectionPotential'
|
||
|
||
/**
|
||
* S46 — wire contract of the public `/api/potencial` reads. Strict objects:
|
||
* an extra query key is malformed, never silently ignored. The section numbers
|
||
* follow the title's shapes (zona 2–4 dígitos, seção até 4) and are normalized
|
||
* by the callers; the município is the TSE code the combobox picked.
|
||
*/
|
||
export const potentialMunicipiosQuerySchema = z.strictObject({
|
||
uf: z.enum(POTENTIAL_UFS),
|
||
})
|
||
|
||
export const potentialSectionQuerySchema = z.strictObject({
|
||
uf: z.enum(POTENTIAL_UFS),
|
||
/** Código TSE do município (`CD_MUNICIPIO`) — não é slug de URL. */
|
||
codigo: z.coerce.number().int().positive(),
|
||
zona: z.coerce.number().int().min(1).max(9999),
|
||
secao: z.coerce.number().int().min(1).max(9999),
|
||
})
|