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
| Nom | Type | Requis | Défaut | Description |
|---|---|---|---|---|
db | Db (mongodb) | oui | — | Un Db déjà connecté — Legba ne gère pas le cycle de vie du MongoClient |
collectionName | string | non | "legba_chat_messages" | Nom de la collection utilisée |
Retour
Un ChatStore :
| Méthode | Rô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
dbdoit déjà être connecté (await MongoClient.connect(url)puis.db(name)) :createMongoChatStorene se connecte jamais lui-même, et ne ferme jamais la connexion — ouverture et fermeture duMongoClientsont 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 (saveMessageoulistMessages), 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 sursentAtseul : deux messages envoyés à la même seconde reviennent quand même dans leur ordre d’insertion réel.