From 5b6d672506fd9d2df2b2f754e961e775030ed681 Mon Sep 17 00:00:00 2001 From: Sjoerd de Vries Date: Sat, 5 Sep 2026 15:21:15 +0200 Subject: [PATCH] feat: wire modules together into the running server Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_013gwc3aCiyQxmCWQke8RvEz --- server.js | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 server.js diff --git a/server.js b/server.js new file mode 100644 index 0000000..f45c20a --- /dev/null +++ b/server.js @@ -0,0 +1,47 @@ +const path = require('node:path'); +const { + openDb, listProducts, addProduct, deleteProduct, + recordCheckSuccess, recordCheckFailure, +} = require('./src/db'); +const { fetchAndExtractPrice } = require('./src/scraper'); +const { createTransport, sendPriceChangeEmail } = require('./src/mailer'); +const { checkAllProducts } = require('./src/checkProducts'); +const { start: startScheduler } = require('./src/scheduler'); +const { createApp } = require('./src/app'); + +const PORT = process.env.PORT || 3000; +const DB_PATH = process.env.DB_PATH || path.join(__dirname, 'data', 'korting.db'); + +const db = openDb(DB_PATH); +const transport = createTransport(process.env); + +function runCheck() { + const products = listProducts(db); + const deps = { + fetchAndExtractPrice, + sendMail: (payload) => sendPriceChangeEmail(transport, { + from: process.env.SMTP_FROM, + to: process.env.NOTIFY_EMAIL, + ...payload, + }), + recordCheckFailure: (id, status) => recordCheckFailure(db, id, status), + recordCheckSuccess: (id, data) => recordCheckSuccess(db, id, data), + now: () => new Date().toISOString(), + }; + return checkAllProducts(products, deps); +} + +startScheduler(runCheck); + +const app = createApp({ + listProducts: () => listProducts(db), + addProduct: (data) => addProduct(db, data), + deleteProduct: (id) => deleteProduct(db, id), + checkAllProducts: runCheck, + authUser: process.env.BASIC_AUTH_USER, + authPass: process.env.BASIC_AUTH_PASS, +}); + +app.listen(PORT, () => { + console.log(`Korting draait op poort ${PORT}`); +});