import { TEventType } from "./component/event/event.types"; import { db } from "./sql"; import { Event, type TEventEntityNew } from "./component/event/events"; import { sendNotification } from "./sendNotification"; import { createPlaceholders } from "./util"; const argv = require('minimist')(process.argv.slice(2)); console.dir(argv) const TS_TODAY = new Date(); function pad_l2 ( _thing: string | number ): string { if ( typeof _thing == "number" ) { _thing = JSON.stringify(_thing); }; return _thing.padStart(2, "0"); } function getTsNow() { const now = new Date(); const rtn = { year: now.getFullYear(), month: now.getMonth() + 1, day: now.getDate(), minute: now.getMinutes(), seconds: now.getSeconds() } return rtn; } async function main( ) { const events = await Event.fetch_events( TS_TODAY.getFullYear(), TS_TODAY.getMonth() + 1 , -120 ); // Write to JSON File Section START // const data = JSON.stringify(events, null, 2); // const TS = `${TS_TODAY.getFullYear()}-${TS_TODAY.getMonth() + 1}-${TS_TODAY.getDate()}_${TS_TODAY.getHours()}-${TS_TODAY.getMinutes()}-${TS_TODAY.getSeconds()}`; // await Bun.write(path.join(import.meta.dir, "output", `output_${TS}.json`), data ); // Write to JSON File Section END const allEventUids = events.map( event => { return event.uid; }); const placeholders = createPlaceholders( allEventUids ); const getAllRelevantEventsQuery = db.query( `SELECT * FROM events WHERE uid IN (${placeholders}); ` ).as(Event ); const AllRelevantEvents = getAllRelevantEventsQuery.all(...allEventUids); const eventsToInsert: TEventEntityNew[] = []; for ( const ev of events ) { const found = AllRelevantEvents.find(event => event.uid === ev.uid); if ( found ) { if ( found.title != ev.title || found.description != ev.description || found.date_at != ev.date_at || found.time_start != ev.time_start || found.time_end != ev.time_end || found.posted_by != ev.posted_by || found.location != ev.location || found.event_type != ev.event_type || found.timezone != ev.timezone || found.link != ev.link ) { const newEventToInsert: TEventEntityNew = {... ev, notification: "changed"}; eventsToInsert.push( newEventToInsert ); } } else { const newEventToInsert: TEventEntityNew = {... ev, notification: "new"}; eventsToInsert.push( newEventToInsert ); } } Event.insert( eventsToInsert, db); const list_of_events = Event.get_events(["new", "changed"], db); for ( const ev of list_of_events ) { const body = [ `Title: ${ev.title}`, `Location: ${ev.location}`, `Type: ${ TEventType[ ev.event_type ] }`, `Date: ${ev.date_at}`, `Time: ${ev.time_start}`, `By: ${ev.posted_by}`, `Link: ${ev.link}`, ].join("\n"); const notification_prefix = ( (event: Event) => { switch( event.notification) { case "new": return "New"; case "changed": return "Changed"; case "deleted": return "Deleted"; default: return null; } } ) ( ev ); const today_prefix = ( (ev: Event) => { const now = getTsNow(); const [year, month, day] = ev.date_at.split("-") if ( year == String(now.year) && month == pad_l2( String(now.month) ) && day == pad_l2( String( now.day ) ) ) { return true; } return false; })( ev ); sendNotification( `${today_prefix ? "TODAY " : ""}${notification_prefix ? notification_prefix + ": " : ""} ${ev.title} (${ TEventType[ ev.event_type ] })`, `${body}`, `${ev.link || "https://77th-jsoc.com/#/events"}` ); ev.set_notification("done", db); } // events.forEach( event => { // const now = getTsNow(); // const [year, month, day] = event.date_at.split("-") // if ( // year == String(now.year) && // month == pad_l2( String(now.month) ) && // day == pad_l2( String( now.day ) ) // ) { // // console.dir( event ); // const body = [ // `Title: ${event.title}`, // `Location: ${event.location}`, // `Type: ${ TEventType[ event.event_type ] }`, // `Date: ${event.date_at}`, // `Time: ${event.time_start}`, // `By: ${event.posted_by}`, // `Link: ${event.link}`, // ].join("\n"); // sendNotification( // `TODAY ${ TEventType[ event.event_type ] } - ${event.title}`, // `${body}`, // `${event.link || "https://77th-jsoc.com/#/events"}` // ); // } // }); }; main(); // do { // await getEvents(TS_TODAY.getFullYear(), TS_TODAY.getMonth() + 1 , -120); // await Bun.sleep(1000 * 60 * 60 * 24); // } // while( true )