feat(hail-recon): enable live API — USE_MOCK off, KV dynamic import for graceful degradation

This commit is contained in:
Satyam-Rastogi
2026-05-18 16:13:29 +05:30
parent 9e2173fd43
commit 4c1c454681
3 changed files with 27 additions and 20 deletions
+19 -13
View File
@@ -4,10 +4,11 @@
*
* Configure in Hail Recon dashboard:
* Webhook URL: https://yourapp.vercel.app/api/hail-webhook?secret=YOUR_WEBHOOK_SECRET
*
* Requires Vercel KV to be connected for persistence.
* Without KV: logs the event but auto Storm Mode won't trigger on next poll.
*/
import { kv } from '@vercel/kv';
export default async function handler(req, res) {
if (req.method !== 'POST') {
return res.status(405).json({ error: 'Method not allowed' });
@@ -21,19 +22,24 @@ export default async function handler(req, res) {
const payload = req.body || {};
const stormEvent = {
address: payload.address || payload.street || 'Unknown address',
city: payload.city || '',
state: payload.state || 'TX',
zip: payload.zip || '',
hailSize: payload.hailSize || payload.hail_size || payload.size || null,
stormDate: payload.stormDate || payload.storm_date || payload.date || new Date().toISOString(),
markerId: payload.markerId || payload.AddressMarker_id || null,
receivedAt: Date.now(),
address: payload.address || payload.street || 'Unknown address',
city: payload.city || '',
state: payload.state || 'TX',
zip: payload.zip || '',
hailSize: payload.hailSize || payload.hail_size || payload.size || null,
stormDate: payload.stormDate || payload.storm_date || payload.date || new Date().toISOString(),
markerId: payload.markerId || payload.AddressMarker_id || null,
receivedAt: Date.now(),
};
await kv.set('lastStormEvent', stormEvent);
console.log('[hail-webhook] Storm event stored:', stormEvent);
try {
const { kv } = await import('@vercel/kv');
await kv.set('lastStormEvent', stormEvent);
console.log('[hail-webhook] Storm event stored in KV:', stormEvent);
} catch {
// KV not configured — log only, auto Storm Mode won't trigger
console.log('[hail-webhook] KV unavailable. Event received but not persisted:', stormEvent);
}
return res.status(200).json({ ok: true, received: stormEvent });
}