From c2a3b27a85dda8ad93da2f0111898e4cfbba88e1 Mon Sep 17 00:00:00 2001 From: Makussu Date: Sun, 2 Jun 2024 17:14:03 +0200 Subject: [PATCH] sse pls end me --- index.js | 3 ++- routes/accounts.js | 23 +++++++++++++++++++++++ routes/reset.js | 37 +++++++++++++++++++++++++++++++++---- routes/transactions.js | 28 +++++++++++++++++++++++----- 4 files changed, 81 insertions(+), 10 deletions(-) diff --git a/index.js b/index.js index 9663fa4..984cfbd 100644 --- a/index.js +++ b/index.js @@ -54,7 +54,8 @@ app.use(`${basepath}/accounts`, accountsRoute); app.use(`${basepath}/transactions`, transactionsRoute); app.use(`${basepath}/`, resetRoute.router); -app.get("/live", resetRoute.socketConnectionRequest) +app.get("/live", resetRoute.mysse) + app.get("/", (req, res) => { res.sendFile( path.join( __dirname, 'client', 'index.html')) diff --git a/routes/accounts.js b/routes/accounts.js index 6dbaf89..4b0b1cc 100644 --- a/routes/accounts.js +++ b/routes/accounts.js @@ -24,8 +24,16 @@ router.post("/", (req, res) => { const new_acc = db.prepare(`INSERT INTO accounts (number, name, qualifiedName, description, type, balance, localBalance) VALUES (?, ?, ? ,?, ?, 0, 0)`).run(number ,name, qualifiedName,des, type) res.status(204).send() + for (res of update.values()) { + // res.write("data: update\n\n") + res.write('event: update\n'); + res.write('data: {}\n\n'); + + } + }); +// TODO add correct balance router.get("/:account", (req, res) => { const acc = db .prepare("SELECT * FROM accounts WHERE name = ?") @@ -53,6 +61,7 @@ router.get("/:account", (req, res) => { WHERE transaction_entries.account_name = ?`).all(req.params.account) acc['entries'] = entries res.send(acc); + } }); @@ -75,6 +84,13 @@ router.put("/:account", (req, res) => { }) } else { res.status(204).send() + for (res of update.values()) { + // res.write("data: update\n\n") + res.write('event: update\n'); + res.write('data: {}\n\n'); + + } + } }); @@ -82,6 +98,13 @@ router.delete("/:account", (req, res) => { const acc = db.prepare("DELETE FROM accounts WHERE name = ? RETURNING *").run(req.params.account) res.status(200).send() + for (res of update.values()) { + // res.write("data: update\n\n") + res.write('event: update\n'); + res.write('data: {}\n\n'); + + } + }); diff --git a/routes/reset.js b/routes/reset.js index 340f32c..fbe27d7 100644 --- a/routes/reset.js +++ b/routes/reset.js @@ -19,9 +19,38 @@ function socketConnectionRequest(req, res, next) { console.log('New connection established') } -function publishMessageToConnectedSockets(data) { - console.log("something changed") - socket.write(`update: ${data}\n`); +const update = new Map() +async function mysse(req, res) { + console.log('Got /events'); + + res.set({ + 'Cache-Control': 'no-cache', + 'Content-Type': 'text/event-stream', + 'Connection': 'keep-alive' + }); + res.flushHeaders(); + + + // Tell the client to retry every 10 seconds if connectivity is lost + res.write('retry: 10000\n\n'); + update.set(Math.random(), res) + console.log("connected") + res.write("data: update\n\n") + // while (true ) { + // await new Promise(resolve => setTimeout(resolve, 1000)); + + // // console.log('Emit', ++count); + // // Emit an SSE that contains the current 'count' as a string + // res.write(`data: ${update}\n\n`); + // // update = false; + + // } +}; + +function set_update() { + update = true; } -module.exports = { router, socketConnectionRequest, publishMessageToConnectedSockets}; + + +module.exports = { router, mysse, update}; diff --git a/routes/transactions.js b/routes/transactions.js index b9a80e5..36cb706 100644 --- a/routes/transactions.js +++ b/routes/transactions.js @@ -2,12 +2,13 @@ const express = require('express'); const router = express.Router(); const db = require("../dependencies"); -const { publishMessageToConnectedSockets } = require("./reset") +const { update } = require("./reset") router.get("/", (req, res) => { const transactions = db.prepare("SELECT transaction_id as id, postingDate, valueDate, title FROM transactions").all(); res.send(transactions) + }) @@ -25,11 +26,17 @@ router.post("/", (req, res) => { const db_entries = db.prepare("INSERT INTO transaction_entries (transaction_id, account_name, amount, label) VALUES (?, ?, ?, ?)").run(db_transaction.lastInsertRowid, transaction.entries[i].account, transaction.entries[i].amount, transaction.entries[i].label) } - publishMessageToConnectedSockets("lol") - + res.send({ id: db_transaction.lastInsertRowid }) + for (res of update.values()) { + // res.write("data: update\n\n") + res.write('event: update\n'); + res.write('data: {}\n\n'); + + } + }) router.get("/:id", (req, res) => { @@ -51,9 +58,14 @@ router.put("/:id", (req, res) => { const db_entries = db.prepare("INSERT INTO transaction_entries (transaction_id, account_name, amount, label) VALUES (?, ?, ?, ?)").run(req.params.id, req.body.entries[i].account, req.body.entries[i].amount, req.body.entries[i].label) } - publishMessageToConnectedSockets("lol") res.status(204).send() + for (res of update.values()) { + // res.write("data: update\n\n") + res.write('event: update\n'); + res.write('data: {}\n\n'); + + } }) @@ -61,9 +73,15 @@ router.delete("/:id", (req, res) => { const delete_entries = db.prepare("DELETE FROM transaction_entries WHERE transaction_id = ?").run(req.params.id) const delete_transaction = db.prepare("DELETE FROM transaction WHERE transaction_id = ?").run(req.params.id) - publishMessageToConnectedSockets("lol") res.status(204).send() + for (res of update.values()) { + // res.write("data: update\n\n") + res.write('event: update\n'); + res.write('data: {}\n\n'); + + } + }) module.exports = router;