2017-06-05 2 views
1

Ich möchte einen eins zu eins Chat machen. Jeder Benutzer kann einen anderen Benutzer kontaktieren.Firebase eins zu eins Chat mit Angular

Json Struktur wäre:

{ 
    "messages" : 
     "user1UID_user2UID" : { 
      auto generated ID : { 
         "text" : "hello", 
         "timestamp" : 192564646546, 
         "name" : "user1" 
      }, 
      auto generated ID : { 
         "text" : "hi", 
         "timestamp" : 192564646554, 
         "name" : "user2" 
      } 
     } 
} 

Wenn user1 an die App verbindet er die Liste der jedes Gespräch, von dem er ein Teil ist, sehen kann. Angenommen, er hat eine Konversation mit Benutzer 2 initiiert, und Benutzer 3 hat ebenfalls eine Konversation mit ihm.

So würden wir die folgenden Kinder haben:

user1UID_user2UID

user3UID_user1UID

Wie kann ich abrufen alle Gespräche User1 in zu tun hat?

Kann ich einen Regex erstellen oder muss ich den Unterhaltungsschlüssel (irgendwo) speichern, wenn es ihn betrifft?

Oder ich bin völlig falsch und ich sehe das Problem nicht auf die richtige Weise?

Antwort

1

Das Schlüsselbenennungsschema, das Sie für die Chat-Räume verwenden, ist eine Variante meiner Antwort hier: http://stackoverflow.com/questions/33540479/best-way-to-manage-chat-channels-in-firebase. Es ist eine Variante, da Sie die UIDs nicht lexikografisch zu bestellen scheinen, was ich empfehle.

All mein vorgeschlagener Algorithmus erzeugt einen reproduzierbaren, eindeutigen, idempotenten Schlüssel für einen Chatroom zwischen bestimmten Benutzern. Und obwohl dies für ein Datenmodell sehr wichtige Eigenschaften sind, lösen sie andere Anwendungsfälle nicht auf magische Weise.

Wie bei der NoSQL-Datenmodellierung häufig der Fall, müssen Sie die Daten so modellieren, dass sie zu den gewünschten Anwendungsfällen passen. Also, wenn Ihre Anwendung erfordert, dass Sie eine Liste der Chat-Räume für jeden Benutzer anzeigen, dann sollten Sie in Ihrem Datenmodell für jeden Benutzer eine Liste der Chat-Räume sind:

userChatRooms 
    user1UID 
    user1UID_user2UID 
    user1UID_user3UID 
    user2UID 
    user1UID_user2UID 
    user1UID_user3UID 
    user3UID 
    user1UID_user3UID 

nun eine Liste der Chat-Räume immer für Ein Benutzer ist so einfach wie das Lesen /userChatRooms/$uid.