From c703911f85bbe96a9e76df431cb473155fb3cdab Mon Sep 17 00:00:00 2001 From: chiko Date: Thu, 6 Nov 2025 17:36:54 +0000 Subject: [PATCH] Bugfix: Events marked as "removed" And deleteDate is set so the Notification does not get sent --- docker-compose.yml | 2 +- package.json | 2 +- run/db_fix_events_deleted_set_done.ts | 7 +++++++ run/db_migration_v0.1.3.ts | 4 ++-- src/app.ts | 12 +++++++----- src/component/event/events.ts | 8 +++++--- 6 files changed, 23 insertions(+), 12 deletions(-) create mode 100644 run/db_fix_events_deleted_set_done.ts diff --git a/docker-compose.yml b/docker-compose.yml index b95a7bb..e541745 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,6 +1,6 @@ services: app: - image: chiko/77th_eventcalendarntfy:v0.1.3 + image: chiko/77th_eventcalendarntfy:v0.1.4 build: . volumes: - ./data/db:/opt/app/data/db diff --git a/package.json b/package.json index 25b13d6..d8606d0 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "version": "0.1.3", + "version": "0.1.4", "name": "77th_eventcalendarnotification", "module": "./src/app.ts", "type": "module", diff --git a/run/db_fix_events_deleted_set_done.ts b/run/db_fix_events_deleted_set_done.ts new file mode 100644 index 0000000..2da2087 --- /dev/null +++ b/run/db_fix_events_deleted_set_done.ts @@ -0,0 +1,7 @@ +import db from "../src/sql"; + +db.run( + `UPDATE events + SET notification = 'done' + WHERE deleteDate IS NOT NULL;` +); \ No newline at end of file diff --git a/run/db_migration_v0.1.3.ts b/run/db_migration_v0.1.3.ts index 60aea85..09864e9 100644 --- a/run/db_migration_v0.1.3.ts +++ b/run/db_migration_v0.1.3.ts @@ -1,7 +1,7 @@ import db from "../src/sql"; const run_migration = db.transaction(() => { - // SQL 1: Insert a new user + // SQL 1: remove duplicates by uid db.run(`DELETE FROM events WHERE rowid NOT IN ( SELECT MIN(rowid) @@ -9,7 +9,7 @@ const run_migration = db.transaction(() => { GROUP BY uid );`); - // SQL 2: Update product stock + // SQL 2: create new table with unique key db.run(`CREATE TABLE events_new ( "event_uid" INTEGER PRIMARY KEY, "uid" TEXT NOT NULL UNIQUE, diff --git a/src/app.ts b/src/app.ts index 84045c1..cf1af7c 100644 --- a/src/app.ts +++ b/src/app.ts @@ -19,10 +19,12 @@ async function events_update_db() { 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} ); + 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) => { + const events_db_nextMonth = Event.get_events({month: {year: TODAY.year, month: (TODAY.month + 1)}}, db); + const events_db = [... events_db_currentMonth, ... events_db_nextMonth]; + const events_removed: Event[] = events_db.filter( (ev) => { return ! events_fetched_list_of_uids.includes(ev.uid); }); @@ -43,7 +45,7 @@ async function events_update_db() { console.log("loop ev " + ev.uid + " : " + [ ev.title, ev.date_at ].join( ", " ) ); const found = AllRelevantEvents.find(event => event.uid === ev.uid); if ( found ) { - console.log("loop ev " + ev.uid + " found: " + [ found.title, found.date_at ].join( ", " ) ); + console.log("loop ev " + ev.uid + " f: " + [ found.title, found.date_at ].join( ", " ) ); if ( found.title != ev.title || found.description != ev.description || @@ -56,12 +58,12 @@ async function events_update_db() { found.timezone != ev.timezone || found.link != ev.link ) { - console.log("loop ev " + ev.uid + " different (changed): " + [ ev.title, ev.date_at ].join( ", " ) ); + console.log("loop ev " + ev.uid + " c: " + [ ev.title, ev.date_at ].join( ", " ) ); const newEventToInsert: TEventEntityNew = {... ev, notification: "changed"}; eventsToInsert.push( newEventToInsert ); } } else { - console.log("loop ev " + ev.uid + " added (new): " + [ ev.title, ev.date_at ].join( ", " ) ); + console.log("loop ev " + ev.uid + " n: " + [ ev.title, ev.date_at ].join( ", " ) ); const newEventToInsert: TEventEntityNew = {... ev, notification: "new"}; eventsToInsert.push( newEventToInsert ); } diff --git a/src/component/event/events.ts b/src/component/event/events.ts index b4ef02b..8d5d65a 100644 --- a/src/component/event/events.ts +++ b/src/component/event/events.ts @@ -89,12 +89,12 @@ export class Event implements TEventEntity { return events; } - static get_events (options: TGetEventsOptions, db: Database ) { + static get_events ( options: TGetEventsOptions, db: Database ) { const whereConditions: string[] = []; if ( options.notification ) { whereConditions.push( `notification IN ('${ options.notification.join("', '") }')` ) } - if (options.date) { + if ( options.date ) { whereConditions.push(`date_at = "${options.date.year}-${options.date.month}-${options.date.day}"`); } if ( options.month ) { @@ -114,6 +114,7 @@ export class Event implements TEventEntity { return null; })() const query = db.query(`SELECT * FROM events${ where ? ( " " + where ) : ""};`).as(Event); + console.dir({ db: { action: {get_events: query} } }) return query.all(); } @@ -175,7 +176,8 @@ export class Event implements TEventEntity { set_notification ( newValue: TEventEntity["notification"], db: Database ) { const query = db.prepare( `UPDATE events - SET notification = $notification + SET notification = $notification, + deleteDate = NULL WHERE event_uid = $event_uid;` ); query.get({$notification: newValue, $event_uid: this.event_uid });