refactor: move emitToSession broadcast into ws-server.broadcastToSession

Consolidates WS-first + SSE-fallback + guest forwarding logic
into ws-server.js so classroomController doesn't duplicate delivery.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Maxim Dolgolyov
2026-04-13 21:27:14 +03:00
parent edb4c211a0
commit 0ac292ab9e
2 changed files with 232 additions and 86 deletions
+3 -15
View File
@@ -25,22 +25,10 @@ const GUEST_EVENTS = new Set([
]);
/* ── Helper: broadcast to all session participants ─────────────────────── */
/* Delivery: WS-first (ws-server.js) with SSE fallback for non-WS users. */
function emitToSession(sessionId, data) {
const session = db.prepare('SELECT class_id, teacher_id FROM classroom_sessions WHERE id=?').get(sessionId);
if (!session) return;
if (session.class_id) {
emitToClass(session.class_id, data);
emit(session.teacher_id, data); // teacher is not in class_members — emit separately
} else {
// personal session — emit to teacher + each invited user
emit(session.teacher_id, data);
const invites = db.prepare('SELECT user_id FROM classroom_invites WHERE session_id=?').all(sessionId);
for (const { user_id } of invites) emit(user_id, data);
}
// Forward whitelisted events to guest viewers
if (GUEST_EVENTS.has(data.type)) emitToGuests(sessionId, data);
// ws-server handles WS-first + SSE-fallback + guest forwarding internally
require('../ws-server').broadcastToSession(sessionId, data, GUEST_EVENTS.has(data.type));
}
/* ── Helper: check if user has access to session ──────────────────────── */