From d303560f5395e6d8d1cc580f8fca616b333715e4 Mon Sep 17 00:00:00 2001 From: chiko Date: Fri, 24 Oct 2025 02:55:33 +0200 Subject: [PATCH] rearranged some code. splited function main() to 2 seperate functions. --- src/app.ts | 148 ++++++++++++++++++++++++++++++++--------------------- 1 file changed, 89 insertions(+), 59 deletions(-) diff --git a/src/app.ts b/src/app.ts index 1f6863f..bf8b110 100644 --- a/src/app.ts +++ b/src/app.ts @@ -1,4 +1,4 @@ -import { TEventType } from "./component/event/event.types"; +import { TEventType, type TEvent } from "./component/event"; import { db } from "./sql"; import { Event, type TEventEntityNew, type TGetEventsOptions } from "./component/event/events"; import { createPlaceholders, getTsNow, pad_l2 } from "./util"; @@ -8,34 +8,65 @@ const argv = minimist(process.argv.slice(2)) console.log("App started"); console.dir({argv}) -async function main ( ) { - console.log("Excecuting main()"); - const TODAY = getTsNow(); - console.dir(TODAY); - const events_currentMonth = await Event.fetch_events( TODAY.year, TODAY.month , -120 ); - console.log("events_currentMonth.length:" + events_currentMonth.length ); - const events_nextMonth = await Event.fetch_events( TODAY.year, TODAY.month + 1 , -120 ); - console.log("events_nextMonth.length:" + events_nextMonth.length ); - const events = [...events_currentMonth, ...events_nextMonth]; - console.log("events.length:" + events.length ); - - // const TS_TODAY = new Date(); - // 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 TODAY = getTsNow(); +console.dir({TODAY}); - const allEventUids = events.map( event => { return event.uid; }); - console.dir(allEventUids ); - const placeholders = createPlaceholders( allEventUids ); +function getBodyFromEvent( event: TEvent): string { + const body = [ + `Title: ${event.title}`, + `Date: ${event.date_at}`, + `Time: ${event.time_start}`, + `Type: ${ TEventType[ event.event_type ] }`, + `Location: ${event.location}`, + `By: ${event.posted_by}`, + `Link: ${event.link}`, + ].join("\n"); + return body; +} + +function isEventToday (event: Event | TEvent ) { + 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 ) ) + ) { + return true; + } + return false; +} + +async function events_update_db() { + const events_fetched_currentMonth = await Event.fetch_events( TODAY.year, TODAY.month , -120 ); + console.log("events_fetched_currentMonth.length: " + events_fetched_currentMonth.length ); + const events_fetched_nextMonth = await Event.fetch_events( TODAY.year, TODAY.month + 1 , -120 ); + console.log("events_fetched_nextMonth.length: " + events_fetched_nextMonth.length ); + const events_fetched = [...events_fetched_currentMonth, ...events_fetched_nextMonth]; + console.log("events_fetched.length: " + events_fetched.length ); + + const events_fetched_list_of_uids = events_fetched.map( event => { return event.uid; }); + console.dir({events_fetched_list_of_uids} ); + + const events_db_currentMonth = Event.get_events({month: {year: TODAY.year, month: TODAY.month}}, db); + const events_removed: Event[] = events_db_currentMonth.filter( (ev) => { + return ! events_fetched_list_of_uids.includes(ev.uid); + }); + + console.dir({events_removed}); + + events_removed.forEach( ev => { + ev.set_notification("removed", db); + }); + + const placeholders = createPlaceholders( events_fetched_list_of_uids ); const getAllRelevantEventsQuery = db.query( - `SELECT * FROM events WHERE uid IN (${placeholders}); ` + `SELECT * FROM events WHERE uid IN (${placeholders}) AND deleteDate IS NULL;` ).as(Event ); - const AllRelevantEvents = getAllRelevantEventsQuery.all(...allEventUids); - console.log("AllRelevantEvents.length:" + AllRelevantEvents.length ); + const AllRelevantEvents = getAllRelevantEventsQuery.all(...events_fetched_list_of_uids); + console.log("AllRelevantEvents.length: " + AllRelevantEvents.length ); const eventsToInsert: TEventEntityNew[] = []; - for ( const ev of events ) { + for ( const ev of events_fetched ) { console.log("loop ev: " + [ ev.uid, ev.title, ev.date_at ].join( ", " ) ); const found = AllRelevantEvents.find(event => event.uid === ev.uid); if ( found ) { @@ -62,10 +93,15 @@ async function main ( ) { eventsToInsert.push( newEventToInsert ); } } - console.dir(eventsToInsert) + console.dir({eventsToInsert}) Event.insert( eventsToInsert, db); - const where: TGetEventsOptions = {} - where.notification = ["new", "changed"] +} + +async function events_check_for_notification() { + const where: TGetEventsOptions = { + notification: ["new", "changed", "removed"], + deleted: false + } if ( argv.today ) { where.date = { year: TODAY.year, @@ -79,46 +115,40 @@ async function main ( ) { where }); for ( const ev of list_of_events ) { - console.log("loop list_of_events - ev: " + [ev.uid, ev.title, ev.date_at, "notification:" + ev.notification].join( ", " ) ); - 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"); - console.log("loop list_of_events - ev 'body': " + body ); - const notification_prefix = ( (event: Event) => { - switch( event.notification) { + console.log("loop list_of_events - ev: " + [ ev.uid, ev.title, ev.date_at, "notification: " + ev.notification ].join( ", " ) ); + const body = getBodyFromEvent( ev ); + // console.log("loop list_of_events - ev 'body': " + body ); + const type_of_notification = ( (event: Event) => { + switch ( event.notification ) { case "new": return "New"; case "changed": return "Changed"; - case "deleted": - return "Deleted"; + case "removed": + return "Removed"; 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 ); - const title = `${today_prefix ? "TODAY " : ""}${notification_prefix ? notification_prefix + ": " : ""} ${ev.title} (${ TEventType[ ev.event_type ] })`; + const title_prefix_arr = []; + if ( type_of_notification ) title_prefix_arr.push( "<" + type_of_notification + ">" ); + if ( isEventToday( ev ) ) title_prefix_arr.push( "" ) + const title = `${title_prefix_arr.length >= 1 ? ( title_prefix_arr.join(" " ) + " - ") : "" }${ev.title} (${ TEventType[ ev.event_type ] })`; console.log("loop list_of_events - ev 'title': " + title ); - await sendNotification( title, body, ev.link ? ev.link : null); + await sendNotification( title, body); + if( ev.notification == "removed" ) { + ev.set_deleted( db ); + } ev.set_notification("done", db); } +} + +async function main ( ) { + console.log("Excecuting main()"); + + await events_update_db(); + await events_check_for_notification(); }; -main(); \ No newline at end of file + +main(); +