summarizeSessionsByGroup
expérimentaldepuis 0.1.0@legba-core/realtime
summarizeSessionsByGroup
Ce que ça fait
Regroupe et cumule des sessions de participants par une clé au choix de l’appelant (organisation, client, projet — Legba ne connaît aucune de ces notions).
Signature
function summarizeSessionsByGroup(
sessions: ParticipantSession[],
groupBy?: (session: ParticipantSession) => string,
): Record<string, SessionGroupSummary>
Paramètres
| Nom | Type | Requis | Défaut | Description |
|---|---|---|---|---|
sessions | ParticipantSession[] | oui | — | Rendu par computeParticipantSessions |
groupBy | (session) => string | non | regroupe par session.roomName | Clé de regroupement au choix de l’appelant |
Retour
Record<string, SessionGroupSummary>, chaque SessionGroupSummary portant groupKey, totalMinutes (somme des seules sessions "closed") et sessions (toutes les sessions du groupe, y compris "open"/"orphan-left").
Erreurs
N/A — fonction pure, ne lève jamais.
Exemple minimal
import { summarizeSessionsByGroup } from "@legba-core/realtime";
const parSalle = summarizeSessionsByGroup(sessions);
Exemple complet
import { computeParticipantSessions, summarizeSessionsByGroup } from "@legba-core/realtime";
const sessions = computeParticipantSessions(events);
// Regroupement par "organisation" : une convention propre à l'appelant
// (ici, le préfixe du nom de salle), pas une notion de Legba.
const parOrganisation = summarizeSessionsByGroup(sessions, (s) => s.roomName.split("-")[0] ?? s.roomName);
for (const { groupKey, totalMinutes } of Object.values(parOrganisation)) {
console.log(`${groupKey} : ${totalMinutes} minutes`);
}
Pièges
- Seules les sessions
status: "closed"contribuent àtotalMinutes: une session"open"ou"orphan-left"reste listée danssessionsmais n’ajoute rien au total, pour que l’appelant décide comment la traiter (attendre sa clôture, l’investiguer, etc.) plutôt que la voir ignorée en silence.