diff --git a/index.js b/index.ts similarity index 51% rename from index.js rename to index.ts index f29276e..ce19598 100644 --- a/index.js +++ b/index.ts @@ -7,6 +7,13 @@ const db = new Database("database.db"); await Bun.cron("./scripts/sync-rss.js", "*/5 * * * *", "rss-sync"); +interface ServiceAlert { + id: string + date: string + is_collision: number + content: string +} + Bun.serve({ routes: { "/": async () => { @@ -16,24 +23,45 @@ Bun.serve({ ).text(), ); - const latestCollision = await db - .query( + const latestCollision = db + .query( "SELECT * FROM service_alerts WHERE is_collision ORDER BY date DESC LIMIT 1;", ) - .get(); + .get()!; + + const allCollisions = db.query("SELECT * FROM service_alerts WHERE is_collision ORDER BY date ASC").all() + + const last60Days = new Array(60).fill(false) + + for (const collision of allCollisions) { + const collisionDay = startOfDay(new Date(collision.date), { in: tz("America/Denver") }) + const difference = differenceInDays(startOfToday({ in: tz("America/Denver") }), collisionDay) + if (difference > 60) { + continue + } + + last60Days[difference] = true + } + + last60Days.reverse() return new Response( homeTemplate({ daysSince: differenceInDays( startOfToday({ in: tz("America/Denver") }), - startOfDay(new Date(latestCollision.date), { in: tz("America/Denver") }), + startOfDay(new Date(latestCollision.date), { + in: tz("America/Denver"), + }), ), latestCollision: { ...latestCollision, - formattedDate: format(new Date( - latestCollision.date, - ), "LLL d, yyyy", { in: tz("America/Denver") }), + formattedDate: format( + new Date(latestCollision.date), + "LLL d, yyyy", + { in: tz("America/Denver") }, + ), }, + last90Days: last60Days, }), { headers: { "Content-Type": "text/html" }, diff --git a/templates/home.handlebars b/templates/home.handlebars index 39e6abf..1c79d93 100644 --- a/templates/home.handlebars +++ b/templates/home.handlebars @@ -4,8 +4,9 @@ IT HAS BEEN {{ daysSince }} DAYS SINCE A CAR HIT A UTA TRAIN + - +
@@ -23,9 +24,25 @@

-
+
{{ latestCollision.formattedDate }}
{{ latestCollision.content }}
+ +
+ {{#each last90Days }} + {{#if this}} +
+ {{else}} +
+ {{/if}} + {{/each}} +
+ +
+
60 days ago
+
Today
+
+