feat: implement SSE real-time frontend updates on new payload reception
All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 57s

This commit is contained in:
Cauê Faleiros
2026-05-06 16:12:05 -03:00
parent c409276698
commit 16962c89ee
2 changed files with 34 additions and 0 deletions

View File

@@ -143,6 +143,12 @@ app.post('/api/data', authenticateAPIKey, async (req, res) => {
} }
await client.query('COMMIT'); await client.query('COMMIT');
// Broadcast update to all connected SSE clients
const broadcastMessage = `data: {"type": "update"}\n\n`;
for (const clientRes of sseClients) {
clientRes.write(broadcastMessage);
}
} catch (error) { } catch (error) {
await client.query('ROLLBACK'); await client.query('ROLLBACK');
console.error("Database insert error:", error); console.error("Database insert error:", error);
@@ -152,6 +158,13 @@ app.post('/api/data', authenticateAPIKey, async (req, res) => {
})(); })();
}); });
app.listen(PORT, '0.0.0.0', () => {
console.log(`Nexstar Backend running at http://localhost:${PORT}`);
console.log(`Endpoint for n8n: POST http://localhost:${PORT}/api/data`);
}); }
})();
});
app.listen(PORT, '0.0.0.0', () => { app.listen(PORT, '0.0.0.0', () => {
console.log(`Nexstar Backend running at http://localhost:${PORT}`); console.log(`Nexstar Backend running at http://localhost:${PORT}`);
console.log(`Endpoint for n8n: POST http://localhost:${PORT}/api/data`); console.log(`Endpoint for n8n: POST http://localhost:${PORT}/api/data`);

View File

@@ -36,6 +36,27 @@ const Layout = () => {
}; };
loadInitial(); loadInitial();
// Set up SSE for real-time updates
const API_URL = import.meta.env.VITE_API_URL || '/api';
const sse = new EventSource(`${API_URL}/stream`);
sse.onmessage = (event) => {
try {
const data = JSON.parse(event.data);
if (data.type === 'update') {
fetchData().then(newData => {
setOrdersData(newData);
});
}
} catch (e) {
console.error("SSE parse error", e);
}
};
return () => {
sse.close();
};
}, []); }, []);
useEffect(() => { useEffect(() => {