jtlevine's picture
Coverage polish + DPI-style worker pilot with Disbursements drill-down
1b15bc9
import type { VercelRequest, VercelResponse } from '@vercel/node'
import { neon } from '@neondatabase/serverless'
const PRIMARY_CITY = 'Dar es Salaam'
export default async function handler(req: VercelRequest, res: VercelResponse) {
if (!process.env.DATABASE_URL) {
return res.status(500).json({ error: 'DATABASE_URL not set' })
}
const sql = neon(process.env.DATABASE_URL)
const zoneFilter = typeof req.query.zone_id === 'string' ? req.query.zone_id : undefined
const rows = zoneFilter
? await sql`
SELECT w.worker_id, w.name, w.name_swahili, w.nida_id, w.phone,
w.zone_id, w.occupation, w.age, w.years_outdoor,
w.household_size, w.mobile_money, w.tasaf_enrolled,
w.enrolled_at,
z.name AS zone_name, z.settlement_type
FROM workers w
JOIN zones z ON z.zone_id = w.zone_id
WHERE z.city = ${PRIMARY_CITY}
AND w.zone_id = ${zoneFilter}
ORDER BY w.worker_id
`
: await sql`
SELECT w.worker_id, w.name, w.name_swahili, w.nida_id, w.phone,
w.zone_id, w.occupation, w.age, w.years_outdoor,
w.household_size, w.mobile_money, w.tasaf_enrolled,
w.enrolled_at,
z.name AS zone_name, z.settlement_type
FROM workers w
JOIN zones z ON z.zone_id = w.zone_id
WHERE z.city = ${PRIMARY_CITY}
ORDER BY z.name, w.worker_id
`
return res.json({ workers: rows, total: rows.length })
}