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}`); });