node-mongo-demo
node.js and mongodb demo
git clone https://9o.is/git/node-mongo-demo.git
commit a71928f25700505df73242a5ecbf97c64fdbf6a2 parent 71f1d034ee8fe2144fbf0fd9046be730fcbf5148 Author: Jul <jul@9o.is> Date: Sun, 26 Jan 2025 14:49:23 -0500 add GET /api/lucky7/:id/events endpoint Diffstat:
| A | backend/src/api/lucky7-bets-events.js | | | 56 | ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
| M | backend/src/api/lucky7.js | | | 2 | ++ |
2 files changed, 58 insertions(+), 0 deletions(-)
diff --git a/backend/src/api/lucky7-bets-events.js b/backend/src/api/lucky7-bets-events.js @@ -0,0 +1,56 @@ +import Lucky7Bet from "../models/lucky7-bet.js"; +import { dateDifferenceInSeconds } from "../services/lucky7-session.js"; + +const writeJson = (response, data) => { + response.write(`data: ${JSON.stringify(data)}\n\n`) +}; + +const lucky7BetsEvents = async (req, res) => { + const { id } = req.params; + const { userId } = req; + + const bet = await Lucky7Bet.findById(id).exec(); + + if (!bet) { + return res.status(404).json({ message: "Bet does not exist" }); + } + + const pending = { + id: bet.id, + rollAt: bet.rollAt, + lucky: bet.lucky, + state: "pending", + }; + + const finished = { + ...pending, + roll: bet.roll, + win: bet.win, + state: "finished", + }; + + const timeout = 1000 * dateDifferenceInSeconds(new Date(), bet.rollAt); + + if (timeout <= 0) { + return res.status(200).json(finished); + } + + res.writeHead(200, { + 'Content-Type': 'text/event-stream', + 'Connection': 'keep-alive', + 'Cache-Control': 'no-cache' + }); + + writeJson(res, pending); + + const timeoutId = setTimeout(() => { + writeJson(res, finished); + res.end(); + }, timeout); + + req.on('close', () => { + clearTimeout(timeoutId); + }); +}; + +export default lucky7BetsEvents; diff --git a/backend/src/api/lucky7.js b/backend/src/api/lucky7.js @@ -1,5 +1,6 @@ import express from "express"; import lucky7BetsCreate from "./lucky7-bets-create.js"; +import lucky7BetsEvents from "./lucky7-bets-events.js"; import lucky7SessionsCreate from "./lucky7-sessions-create.js"; import auth from "../utils/auth.js"; @@ -7,5 +8,6 @@ const router = express.Router(); router.post("/sessions", auth, lucky7SessionsCreate); router.post("/bets", auth, lucky7BetsCreate); +router.get("/bets/:id/events", auth, lucky7BetsEvents); export default router;