createMongoChatStore

expérimentaldepuis 0.1.0@legba-core/realtime

createMongoChatStore

Ce que ça fait

Magasin de chat persisté dans MongoDB, pour un historique qui survit à un redémarrage du service applicatif et se partage entre plusieurs instances.

Signature

function createMongoChatStore(db: Db, collectionName?: string): ChatStore

Paramètres

NomTypeRequisDéfautDescription
dbDb (mongodb)ouiUn Db déjà connecté — Legba ne gère pas le cycle de vie du MongoClient
collectionNamestringnon"legba_chat_messages"Nom de la collection utilisée

Retour

Un ChatStore :

MéthodeRôle
saveMessage(message)Insère le document ; l’id rendu est l’_id Mongo assigné (ObjectId, monotone)
listMessages(roomName, options?)Requête triée sur _id, paginée avec $lt sur le curseur before

Erreurs

N/A — les erreurs du pilote MongoDB (connexion perdue, etc.) remontent telles quelles, non enveloppées.

Exemple minimal

import { MongoClient } from "mongodb";
import { createMongoChatStore } from "@legba-core/realtime";

const client = await MongoClient.connect(process.env.MONGO_URL!);
const store = createMongoChatStore(client.db("mon-app"));

Exemple complet

Voir createChatService.

Pièges

  • db doit déjà être connecté (await MongoClient.connect(url) puis .db(name)) : createMongoChatStore ne se connecte jamais lui-même, et ne ferme jamais la connexion — ouverture et fermeture du MongoClient sont sous la responsabilité de l’application appelante, comme pour toute connexion partagée avec le reste de l’application.
  • Un index { roomName: 1, _id: 1 } est créé automatiquement au premier appel (saveMessage ou listMessages), pas à la construction du magasin — nécessaire pour que la pagination reste performante sur un grand historique.
  • L’ordre des messages repose sur _id (monotone par nature chez MongoDB), jamais sur sentAt seul : deux messages envoyés à la même seconde reviennent quand même dans leur ordre d’insertion réel.

Voir aussi