feat: 班级小助手 阶段1-3(monorepo + 后端 REST/Socket.IO + Web 管理端)

This commit is contained in:
LoveChengke committed 2026-09-11 21:57:38 +08:00
commit 84ab49de10
102 files changed
+14751

No files matched your search

+30
View File
@@ -0,0 +1,30 @@
import { SOCKET_ROOMS } from '@classhelper/shared';
/**
* 实时事件总线。
*
* 业务模块只依赖这里,不直接依赖 Socket.IO 实例,
* 因此「移除实时推送」只需让它注册不到 emitter,业务代码无需改动。
*/
export type RealtimeEmitter = (rooms: string[], event: string, payload: unknown) => void;
let emitter: RealtimeEmitter | null = null;
export function registerEmitter(next: RealtimeEmitter): void {
emitter = next;
}
export function emitToRooms(rooms: string[], event: string, payload: unknown): void {
if (!emitter || rooms.length === 0) return;
emitter(rooms, event, payload);
}
/** 按班级房间广播(class:{classId}) */
export function emitToClass(classId: string, event: string, payload: unknown): void {
emitToRooms([SOCKET_ROOMS.class(classId)], event, payload);
}
/** 定向推送给单个用户 */
export function emitToUser(userId: string, event: string, payload: unknown): void {
emitToRooms([SOCKET_ROOMS.user(userId)], event, payload);
}