diff --git a/src/index.js b/src/index.js index 3ae5b71..0e67195 100644 --- a/src/index.js +++ b/src/index.js @@ -426,4 +426,83 @@ app.notFound(c => { return c.html(`
Page not found
Go Home`, 404); }); -export default app; +// ── SCHEDULED: daily document expiry notifications ─────────────────────────── +async function scheduled(event, env, ctx) { + const today = new Date(); + const in30 = new Date(today); in30.setDate(in30.getDate() + 30); + const in7 = new Date(today); in7.setDate(in7.getDate() + 7); + + // Get all expiring documents with user details + const { results } = await env.DB.prepare(` + SELECT d.id, d.doc_label, d.expiry_date, d.user_id, + u.full_name, u.email, u.phone + FROM document_expiries d + JOIN users u ON u.id = d.user_id + WHERE d.expiry_date <= ? + ORDER BY d.expiry_date ASC + `).bind(in30.toISOString().split('T')[0]).all(); + + if (!results || results.length === 0) return; + + // Group by urgency + const expired = results.filter(d => new Date(d.expiry_date) < today); + const urgent = results.filter(d => { const dt = new Date(d.expiry_date); return dt >= today && dt <= in7; }); + const upcoming = results.filter(d => { const dt = new Date(d.expiry_date); return dt > in7 && dt <= in30; }); + + const fmt = d => new Date(d.expiry_date).toLocaleDateString('en-AU', { day: 'numeric', month: 'short', year: 'numeric' }); + const row = d => `| Document | Client | Phone | Expiry |
|---|