feat: add Socket.IO heats_updated broadcast event

- Export getIO function from socket module
- Broadcast heats_updated event when user updates their heats
- Event includes userId, username, and updated heats array
- Non-blocking broadcast (won't fail request if socket fails)
This commit is contained in:
Radosław Gierwiało
2025-11-14 15:35:39 +01:00
parent 02d3d7ac42
commit c4240f05bb
2 changed files with 35 additions and 2 deletions

View File

@@ -1,6 +1,7 @@
const express = require('express');
const { prisma } = require('../utils/db');
const { authenticate } = require('../middleware/auth');
const { getIO } = require('../socket');
const router = express.Router();
@@ -566,6 +567,28 @@ router.post('/:slug/heats', authenticate, async (req, res, next) => {
return userHeats;
});
// Broadcast heats update to all users in event room
try {
const io = getIO();
const roomName = `event_${event.id}`;
io.to(roomName).emit('heats_updated', {
userId: req.user.id,
username: req.user.username,
heats: result.map(heat => ({
id: heat.id,
divisionId: heat.divisionId,
division: heat.division,
competitionTypeId: heat.competitionTypeId,
competitionType: heat.competitionType,
heatNumber: heat.heatNumber,
role: heat.role,
})),
});
} catch (socketError) {
// Don't fail the request if socket broadcast fails
console.error('Failed to broadcast heats update:', socketError);
}
res.json({
success: true,
count: result.length,