From c5c5d872d7b35066ef96f6abaa6190fe3a1fc7cb Mon Sep 17 00:00:00 2001 From: chiko Date: Mon, 27 Oct 2025 20:01:29 +0100 Subject: [PATCH 01/15] Added Event.toString() --- src/component/event/events.ts | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/component/event/events.ts b/src/component/event/events.ts index d02b6ec..84b84fb 100644 --- a/src/component/event/events.ts +++ b/src/component/event/events.ts @@ -135,6 +135,25 @@ export class Event implements TEventEntity { this.notification = notification; this.deleteDate = deleteDate; } + toString() { + return { + event_uid: this.event_uid, + uid: this.uid, + title: this.title, + description: this.description, + date_at: this.date_at, + time_start: this.time_start, + time_end: this.time_end, + posted_by: this.posted_by, + location: this.location, + event_type: this.event_type, + timezone: this.timezone, + link: this.link, + notification: this.notification, + deleteDate: this.deleteDate + } + } + syncWithDb ( db: Database ) { const query = db.prepare( `SELECT * FROM events WHERE event_uid = $event_uid;`).as(Event); const entity = query.get({$event_uid: this.event_uid }); -- 2.49.1 From d22dbaf971ba2756f0a9da21f481b29cba1fbc5e Mon Sep 17 00:00:00 2001 From: chiko Date: Mon, 27 Oct 2025 20:02:21 +0100 Subject: [PATCH 02/15] Event.get_body() does only print the Diff to Optime if its not 00:00 --- src/component/event/events.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/component/event/events.ts b/src/component/event/events.ts index 84b84fb..4dffdfd 100644 --- a/src/component/event/events.ts +++ b/src/component/event/events.ts @@ -220,7 +220,7 @@ export class Event implements TEventEntity { const body = [ `Title: ${this.title}`, `Date: ${this.date_at}`, - `Time: ${this.get_time_start()}${ TimeDiff ? ` (Optime ${TimeDiff})` : "" }`, + `Time: ${this.get_time_start()}${ TimeDiff && TimeDiff == "00:00" ? ` (Optime ${TimeDiff})` : "" }`, `Type: ${ TEventType[ this.event_type ] }`, `Location: ${this.location}`, `By: ${this.posted_by}`, -- 2.49.1 From f1bc30a64d592a705bb777734a32d13b8f200e45 Mon Sep 17 00:00:00 2001 From: chiko Date: Mon, 27 Oct 2025 20:11:28 +0100 Subject: [PATCH 03/15] exclude any kind of .env from docker and git --- .dockerignore | 2 +- .gitignore | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.dockerignore b/.dockerignore index 9c94fbb..b97a4e1 100644 --- a/.dockerignore +++ b/.dockerignore @@ -9,7 +9,7 @@ LICENSE .vscode Makefile helm-charts -.env +.env* .editorconfig .idea coverage* diff --git a/.gitignore b/.gitignore index 5d4c927..38107cf 100644 --- a/.gitignore +++ b/.gitignore @@ -23,6 +23,7 @@ report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json .env.test.local .env.production.local .env.local +.env.* # caches .eslintcache -- 2.49.1 From 6e34f30d4ab3d27ca272f60ce3aee2fcc65c2edd Mon Sep 17 00:00:00 2001 From: chiko Date: Mon, 27 Oct 2025 20:16:53 +0100 Subject: [PATCH 04/15] added some scripts for the sqlite db for cleanup --- package.json | 13 +++++++------ run/db_event_delete_duplicates.ts | 10 ++++++++++ run/{db_deleteall.ts => db_event_deleteall.ts} | 0 3 files changed, 17 insertions(+), 6 deletions(-) create mode 100644 run/db_event_delete_duplicates.ts rename run/{db_deleteall.ts => db_event_deleteall.ts} (100%) diff --git a/package.json b/package.json index 139d992..b7b4043 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "version": "0.1.3", - "name": "77th_eventcalendernotification", + "name": "77th_eventcalendarnotification", "module": "./src/app.ts", "type": "module", "private": true, @@ -16,12 +16,13 @@ "typescript-eslint": "^8.46.2" }, "scripts": { - "dev": "bun run ./src/app.ts", - "dev:init": "bun run ./src/app.ts --init", + "start": "NODE_ENV=production bun run ./src/app.ts", + "dev": "NODE_ENV=development bun ./src/app.ts", "db:init": "bun run ./run/db_init.ts", - "db:deleteall": "bun run ./run/db_deleteall.ts", - "build": "bun build --compile --minify --sourcemap ./src/app.ts --outfile ./build/77th_eventcalendernotification", - "build:linux": "bun build --compile --minify --sourcemap --target=bun-linux-arm64 ./src/app.ts --outfile ./build/77th_eventcalendernotification", + "db:deleteall": "bun run ./run/db_event_deleteall.ts", + "db:event:dedup": "bun run ./run/db_event_delete_duplicates.ts", + "build": "bun build --compile --minify --sourcemap ./src/app.ts --outfile ./build/77th_eventcalendarnotification", + "build:linux": "bun build --compile --minify --sourcemap --target=bun-linux-arm64 ./src/app.ts --outfile ./build/77th_eventcalendarnotification", "docker:build": "docker build -t chiko/77th_eventcalendarntfy:0.1.0 ." }, "peerDependencies": { diff --git a/run/db_event_delete_duplicates.ts b/run/db_event_delete_duplicates.ts new file mode 100644 index 0000000..16e4e6c --- /dev/null +++ b/run/db_event_delete_duplicates.ts @@ -0,0 +1,10 @@ +import * as db from "../src/sql"; + +const query = db.db.query(`DELETE FROM events +WHERE rowid NOT IN ( + SELECT MIN(rowid) + FROM events + GROUP BY uid +);`); + +query.run(); \ No newline at end of file diff --git a/run/db_deleteall.ts b/run/db_event_deleteall.ts similarity index 100% rename from run/db_deleteall.ts rename to run/db_event_deleteall.ts -- 2.49.1 From dc76e14c9d6efa8b7a2d3a009f088a032219a238 Mon Sep 17 00:00:00 2001 From: chiko Date: Mon, 27 Oct 2025 20:17:52 +0100 Subject: [PATCH 05/15] changed start script to add env prod and dev --- package.json | 2 +- run-task.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index b7b4043..884299b 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "typescript-eslint": "^8.46.2" }, "scripts": { - "start": "NODE_ENV=production bun run ./src/app.ts", + "prod": "NODE_ENV=production bun run ./src/app.ts", "dev": "NODE_ENV=development bun ./src/app.ts", "db:init": "bun run ./run/db_init.ts", "db:deleteall": "bun run ./run/db_event_deleteall.ts", diff --git a/run-task.sh b/run-task.sh index dc5e2bb..41c4fc3 100644 --- a/run-task.sh +++ b/run-task.sh @@ -18,7 +18,7 @@ log_info "Starting task with args: $*" cd /opt/app -if bun run ./src/app.ts "$@" >> /proc/1/fd/1 2>> /proc/1/fd/2; then +if bun run start "$@" >> /proc/1/fd/1 2>> /proc/1/fd/2; then log_info "Task completed successfully." else log_error "Task failed!" -- 2.49.1 From c69eca5c08f2d5b3b3e9ec2c1de15a2a60572f41 Mon Sep 17 00:00:00 2001 From: chiko Date: Mon, 27 Oct 2025 20:18:40 +0100 Subject: [PATCH 06/15] updated README --- README.md | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 8373cfa..72eb260 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,27 @@ -# 77th Event Calender Notifcations +# 77th Event Calendar Notifcations To install dependencies: -```bashe +```bash bun install ``` To run: ```bash -bun run index.ts +bun run ./src/app.ts +bun run start +bun run dev ``` -This project was created using `bun init` in bun v1.3.0. [Bun](https://bun.com) is a fast all-in-one JavaScript runtime. +## Docker + +```bash +docker compose build +docker compose up -d +``` + +## Parameter + +### --today +fetch all Events, track all Changes (new, changed and deleted Events) and additionally Send a Notification for todays mission \ No newline at end of file -- 2.49.1 From 12e57a97f5cbcb0dffa242c1adc29c83ad381e64 Mon Sep 17 00:00:00 2001 From: chiko Date: Wed, 29 Oct 2025 23:38:45 +0100 Subject: [PATCH 07/15] some minor fixes to the logging texts --- src/app.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/app.ts b/src/app.ts index 0ac2b5a..4685a8d 100644 --- a/src/app.ts +++ b/src/app.ts @@ -40,10 +40,10 @@ async function events_update_db() { console.log("AllRelevantEvents.length: " + AllRelevantEvents.length ); const eventsToInsert: TEventEntityNew[] = []; for ( const ev of events_fetched ) { - console.log("loop ev: " + [ ev.uid, ev.title, ev.date_at ].join( ", " ) ); + 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 found: " + [ found.uid, found.title, found.date_at ].join( ", " ) ); + console.log("loop ev " + ev.uid + " found: " + [ found.title, found.date_at ].join( ", " ) ); if ( found.title != ev.title || found.description != ev.description || @@ -56,12 +56,12 @@ async function events_update_db() { found.timezone != ev.timezone || found.link != ev.link ) { - console.log("loop ev different (changed): " + [ ev.uid, ev.title, ev.date_at ].join( ", " ) ); + console.log("loop ev " + ev.uid + " different (changed): " + [ ev.title, ev.date_at ].join( ", " ) ); const newEventToInsert: TEventEntityNew = {... ev, notification: "changed"}; eventsToInsert.push( newEventToInsert ); } } else { - console.log("loop ev added (new): " + [ ev.uid, ev.title, ev.date_at ].join( ", " ) ); + console.log("loop ev " + ev.uid + " added (new): " + [ ev.title, ev.date_at ].join( ", " ) ); const newEventToInsert: TEventEntityNew = {... ev, notification: "new"}; eventsToInsert.push( newEventToInsert ); } -- 2.49.1 From 9ec83d8b876f0686a4cf6cc38da7cf9429abfec9 Mon Sep 17 00:00:00 2001 From: chiko Date: Wed, 29 Oct 2025 23:47:04 +0100 Subject: [PATCH 08/15] adding a Helper Function to create QueryStrings for URLs --- src/util.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/util.ts b/src/util.ts index fff08e5..74c0126 100644 --- a/src/util.ts +++ b/src/util.ts @@ -88,4 +88,11 @@ export function isEuropeanDST( date: Date ) { // Return true if within DST period return date >= start && date < end; +} + +export function createQS (params: Record): string { + const queryString = Object.entries(params) + .map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(value)}`) + .join("&"); + return queryString; } \ No newline at end of file -- 2.49.1 From a57e4efd4c60ed758634a1d691363a9b45106823 Mon Sep 17 00:00:00 2001 From: chiko Date: Wed, 29 Oct 2025 23:48:09 +0100 Subject: [PATCH 09/15] adding a file "config.ts" for adjustable configurations like URLs for Apprise --- src/config.ts | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 src/config.ts diff --git a/src/config.ts b/src/config.ts new file mode 100644 index 0000000..ec28254 --- /dev/null +++ b/src/config.ts @@ -0,0 +1,16 @@ +export const config = { + apprise: { + services: { + ntfy: { + url: `ntfys://${process.env.ntfy_username}:${process.env.ntfy_password}@${process.env.ntfy_host}/${process.env.ntfy_topic}`, + defaults: { + + } + } + }, + urls: [ + `ntfys://${process.env.ntfy_username}:${process.env.ntfy_password}@${process.env.ntfy_host}/${process.env.ntfy_topic}`, + `discord://${process.env.dc_webhook}?avatar_url=${process.env.dc_avatar_url}&botname=${process.env.dc_botname}` + ] + } +} as const \ No newline at end of file -- 2.49.1 From 4bbda5dcf85c2ae901577e44d03d3fb54f3533aa Mon Sep 17 00:00:00 2001 From: chiko Date: Wed, 29 Oct 2025 23:49:48 +0100 Subject: [PATCH 10/15] Adding a parameter for the URLs for the Notification URLs of Services. --- src/app.ts | 9 ++++++++- src/sendNotification.ts | 26 +++++++++++++++++++++----- 2 files changed, 29 insertions(+), 6 deletions(-) diff --git a/src/app.ts b/src/app.ts index 4685a8d..84045c1 100644 --- a/src/app.ts +++ b/src/app.ts @@ -90,7 +90,14 @@ async function events_check_for_notification() { 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( ", " ) ); console.log("loop list_of_events - ev 'title': " + ev.get_title() ); - await sendNotification( ev.get_title(), ev.get_body() ); + const notificationOptions = { + ntfy: null, + discord: { + avatar_url: ( process.env.dc_avatar_url as string), + botname: ( process.env.dc_botname as string) + } + }; + await sendNotification( ev.get_title(), ev.get_body(), notificationOptions ); if ( ev.notification == "removed" ) { ev.set_deleted( db ); } diff --git a/src/sendNotification.ts b/src/sendNotification.ts index a310afb..f553424 100644 --- a/src/sendNotification.ts +++ b/src/sendNotification.ts @@ -1,11 +1,27 @@ -export async function sendNotification(title: string, body: string, link?: string | null) { +import { createQS } from "./util"; + +type TSendNotificationOptions = { + ntfy: { + link?: string; + } | null, + discord: { + href?: string + avatar_url: string, + botname: string + } +} + +export async function sendNotification( title: string, body: string, options: TSendNotificationOptions ) { console.dir({ sendNotification: { title, - body, - link + body } }); + const QS = { + ntfy: options.ntfy ? createQS(options.ntfy) : null, + discord: createQS(options.discord) + } if ( ! ( process.env.notification_mock == "true" ) ) { const response = await fetch(`${ process.env.apprise_https == "true" ? "https" : "http"}://${process.env.apprise_host ? process.env.apprise_host : "apprise"}:${process.env.apprise_port ? String(process.env.apprise_port) : "80" }/notify`, { method: "POST", @@ -14,8 +30,8 @@ export async function sendNotification(title: string, body: string, link?: strin }, body: JSON.stringify({ urls: [ - `ntfys://${process.env.ntfy_username}:${process.env.ntfy_password}@${process.env.ntfy_host}/${process.env.ntfy_topic}${ link ? `?click=${link}`: "?click=https://77th-jsoc.com/#/events" }`, - `discord://${process.env.dc_webhook}?avatar_url=${process.env.dc_avatar_url}&botname=${process.env.dc_botname}` + `ntfys://${process.env.ntfy_username}:${process.env.ntfy_password}@${process.env.ntfy_host}/${process.env.ntfy_topic}${ QS.ntfy ? "?" + QS.ntfy : ""}`, + `discord://${process.env.dc_webhook}?${QS.discord}` ].join(","), title: title, body: body, -- 2.49.1 From 1a7de55da8e0ee29d41192722e0a595d507413be Mon Sep 17 00:00:00 2001 From: chiko Date: Sun, 2 Nov 2025 21:11:37 +0000 Subject: [PATCH 11/15] Prints "Optime" and a Diff to Optime for a Events thats not on Optime --- src/component/event/events.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/component/event/events.ts b/src/component/event/events.ts index 4dffdfd..59ea846 100644 --- a/src/component/event/events.ts +++ b/src/component/event/events.ts @@ -220,7 +220,7 @@ export class Event implements TEventEntity { const body = [ `Title: ${this.title}`, `Date: ${this.date_at}`, - `Time: ${this.get_time_start()}${ TimeDiff && TimeDiff == "00:00" ? ` (Optime ${TimeDiff})` : "" }`, + `Time: ${this.get_time_start()} (OP Time${ TimeDiff != "00:00" ? ` ${TimeDiff}` : "" })`, `Type: ${ TEventType[ this.event_type ] }`, `Location: ${this.location}`, `By: ${this.posted_by}`, -- 2.49.1 From eea37b3df527119ea0bc9cf52c4eae9436b2219d Mon Sep 17 00:00:00 2001 From: chiko Date: Mon, 3 Nov 2025 00:22:01 +0000 Subject: [PATCH 12/15] Fixing the uid Column isn't unique. uid is required to be unique for the the Changed Events (with the new Data) to be inserted without creating new Rows. --- run/db_migration_v0.1.3.ts | 39 +++++++++++++++++++ sql/events/events_create_unique_index_uid.sql | 1 + sql/events/events_delete_duplicate_rows.sql | 6 +++ sql/events/events_find_duplicate_uid.sql | 4 ++ sql/sql_migration_v0.1.3.sql | 29 ++++++++++++++ src/component/event/events.ts | 12 +++--- src/sql.ts | 2 + 7 files changed, 86 insertions(+), 7 deletions(-) create mode 100644 run/db_migration_v0.1.3.ts create mode 100644 sql/events/events_create_unique_index_uid.sql create mode 100644 sql/events/events_delete_duplicate_rows.sql create mode 100644 sql/events/events_find_duplicate_uid.sql create mode 100644 sql/sql_migration_v0.1.3.sql diff --git a/run/db_migration_v0.1.3.ts b/run/db_migration_v0.1.3.ts new file mode 100644 index 0000000..60aea85 --- /dev/null +++ b/run/db_migration_v0.1.3.ts @@ -0,0 +1,39 @@ +import db from "../src/sql"; + +const run_migration = db.transaction(() => { + // SQL 1: Insert a new user + db.run(`DELETE FROM events + WHERE rowid NOT IN ( + SELECT MIN(rowid) + FROM events + GROUP BY uid + );`); + + // SQL 2: Update product stock + db.run(`CREATE TABLE events_new ( + "event_uid" INTEGER PRIMARY KEY, + "uid" TEXT NOT NULL UNIQUE, + "title" TEXT NOT NULL, + "date_at" DATETIME NOT NULL, + "time_start" TEXT NOT NULL, + "time_end" TEXT NOT NULL, + "posted_by" TEXT NOT NULL, + "location" TEXT NOT NULL, + "event_type" TEXT NOT NULL, + "link" TEXT NOT NULL, + "description" TEXT NOT NULL, + "timezone" TEXT NOT NULL, + "notification" TEXT NOT NULL, + "deleteDate" INTEGER NULL + );`); + + // SQL 3: Log the transaction + db.run(`INSERT INTO events_new (event_uid, uid, title, date_at, time_start, time_end, posted_by, location, event_type, link, description, timezone, notification, deleteDate) + SELECT event_uid, uid, title, date_at, time_start, time_end, posted_by, location, event_type, link, description, timezone, notification, deleteDate FROM events; + `); + db.run(`DROP TABLE events; + ALTER TABLE events_new RENAME TO events;`); +}); + +// Run the transaction +run_migration(); \ No newline at end of file diff --git a/sql/events/events_create_unique_index_uid.sql b/sql/events/events_create_unique_index_uid.sql new file mode 100644 index 0000000..c928e12 --- /dev/null +++ b/sql/events/events_create_unique_index_uid.sql @@ -0,0 +1 @@ +CREATE UNIQUE INDEX idx_events_uid ON events(uid); \ No newline at end of file diff --git a/sql/events/events_delete_duplicate_rows.sql b/sql/events/events_delete_duplicate_rows.sql new file mode 100644 index 0000000..b1f1234 --- /dev/null +++ b/sql/events/events_delete_duplicate_rows.sql @@ -0,0 +1,6 @@ +DELETE FROM events +WHERE rowid NOT IN ( + SELECT MIN(rowid) + FROM events + GROUP BY uid +); \ No newline at end of file diff --git a/sql/events/events_find_duplicate_uid.sql b/sql/events/events_find_duplicate_uid.sql new file mode 100644 index 0000000..331fd14 --- /dev/null +++ b/sql/events/events_find_duplicate_uid.sql @@ -0,0 +1,4 @@ +SELECT uid, COUNT(*) AS count +FROM events +GROUP BY uid +HAVING COUNT(*) > 1; \ No newline at end of file diff --git a/sql/sql_migration_v0.1.3.sql b/sql/sql_migration_v0.1.3.sql new file mode 100644 index 0000000..ae309e4 --- /dev/null +++ b/sql/sql_migration_v0.1.3.sql @@ -0,0 +1,29 @@ +DELETE FROM events +WHERE rowid NOT IN ( + SELECT MIN(rowid) + FROM events + GROUP BY uid +); + +CREATE TABLE events_new ( + "event_uid" INTEGER PRIMARY KEY, + "uid" TEXT NOT NULL UNIQUE, + "title" TEXT NOT NULL, + "date_at" DATETIME NOT NULL, + "time_start" TEXT NOT NULL, + "time_end" TEXT NOT NULL, + "posted_by" TEXT NOT NULL, + "location" TEXT NOT NULL, + "event_type" TEXT NOT NULL, + "link" TEXT NOT NULL, + "description" TEXT NOT NULL, + "timezone" TEXT NOT NULL, + "notification" TEXT NOT NULL, + "deleteDate" INTEGER NULL +); + +INSERT INTO events_new (event_uid, uid, title, date_at, time_start, time_end, posted_by, location, event_type, link, description, timezone, notification, deleteDate) +SELECT event_uid, uid, title, date_at, time_start, time_end, posted_by, location, event_type, link, description, timezone, notification, deleteDate FROM events; + +DROP TABLE events; +ALTER TABLE events_new RENAME TO events; \ No newline at end of file diff --git a/src/component/event/events.ts b/src/component/event/events.ts index 59ea846..489efb6 100644 --- a/src/component/event/events.ts +++ b/src/component/event/events.ts @@ -42,9 +42,9 @@ export class Event implements TEventEntity { deleteDate: TEventEntity["deleteDate"]; static createTable (db: Database): void { - const query = db.query(`CREATE TABLE IF NOT EXISTS "events" ( - "event_uid" INTEGER NOT NULL, - "uid" TEXT NOT NULL, + const query = db.query(`CREATE TABLE IF NOT EXISTS "events" + "event_uid" INTEGER PRIMARY KEY, + "uid" TEXT NOT NULL UNIQUE, "title" TEXT NOT NULL, "date_at" DATETIME NOT NULL, "time_start" TEXT NOT NULL, @@ -56,10 +56,8 @@ export class Event implements TEventEntity { "description" TEXT NOT NULL, "timezone" TEXT NOT NULL, "notification" TEXT NOT NULL, - "deleteDate" INTEGER NULL, - PRIMARY KEY ("event_uid") - ); - CREATE UNIQUE INDEX "sqlite_autoindex_events_1" ON "events" ("uid");`); + "deleteDate" INTEGER NULL + );`); query.run(); } diff --git a/src/sql.ts b/src/sql.ts index 6d55878..9429e98 100644 --- a/src/sql.ts +++ b/src/sql.ts @@ -8,6 +8,8 @@ console.log(db_filepath); export const db = new Database(db_filepath); +export default db; + export function init () { Event.createTable(db); } -- 2.49.1 From 16593e0281342fe16d5d788b42f59b81ab2dca9e Mon Sep 17 00:00:00 2001 From: chiko Date: Mon, 3 Nov 2025 00:24:42 +0000 Subject: [PATCH 13/15] Fixed Syntax Error --- src/component/event/events.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/component/event/events.ts b/src/component/event/events.ts index 489efb6..b4ef02b 100644 --- a/src/component/event/events.ts +++ b/src/component/event/events.ts @@ -42,7 +42,7 @@ export class Event implements TEventEntity { deleteDate: TEventEntity["deleteDate"]; static createTable (db: Database): void { - const query = db.query(`CREATE TABLE IF NOT EXISTS "events" + const query = db.query(`CREATE TABLE IF NOT EXISTS "events" ( "event_uid" INTEGER PRIMARY KEY, "uid" TEXT NOT NULL UNIQUE, "title" TEXT NOT NULL, -- 2.49.1 From 5cdfd0f2e3cc5ec95b7a4d758f5c82ade990eb9f Mon Sep 17 00:00:00 2001 From: chiko Date: Mon, 3 Nov 2025 00:33:23 +0000 Subject: [PATCH 14/15] Change the Start Script and Added NODE_ENV to the env vars also for the dockerized Version --- docker/Crontab | 1 - docker/docker-entrypoint.sh | 1 + package.json | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docker/Crontab b/docker/Crontab index 38d1887..593bfcb 100644 --- a/docker/Crontab +++ b/docker/Crontab @@ -2,4 +2,3 @@ SHELL=/bin/bash MAILTO="" 0 8 * * * root . /etc/cron-env.sh && /opt/app/run-task.sh --today >> /proc/1/fd/1 2>&1 */15 * * * * root . /etc/cron-env.sh && /opt/app/run-task.sh >> /proc/1/fd/1 2>&1 -* * * * * root echo "cron test ran at $(date)" >> /proc/1/fd/1 2>&1 diff --git a/docker/docker-entrypoint.sh b/docker/docker-entrypoint.sh index c7fadb5..c7e20c7 100644 --- a/docker/docker-entrypoint.sh +++ b/docker/docker-entrypoint.sh @@ -7,6 +7,7 @@ chmod +x /etc/cron-env.sh # Write the Env Vars into a file for cron. happens during runtime of the container and not build. # List your environment variables here env_vars=( + NODE_ENV TZ DB_FILEPATH DB_FILENAME diff --git a/package.json b/package.json index 884299b..25b13d6 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "typescript-eslint": "^8.46.2" }, "scripts": { - "prod": "NODE_ENV=production bun run ./src/app.ts", + "start": "bun run ./src/app.ts", "dev": "NODE_ENV=development bun ./src/app.ts", "db:init": "bun run ./run/db_init.ts", "db:deleteall": "bun run ./run/db_event_deleteall.ts", -- 2.49.1 From 152c1bcba0d37c3d1c69b18b6e90bcd3d9aa8ca9 Mon Sep 17 00:00:00 2001 From: chiko Date: Mon, 3 Nov 2025 00:35:40 +0000 Subject: [PATCH 15/15] Version Bump 0.1.4 --- docker-compose.yml | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) 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", -- 2.49.1