Firestore: показывать только чаты, в которых участвует пользователь? - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть chatrooms - коллекция, в которой хранятся участники и названия чатов. У меня также есть userchats, в котором хранятся идентификаторы участников и сохраняются идентификаторы чатов с true в качестве ключа / значения следующим образом:

chatrooms
    - e1iqOnWeO2YTUCpUJ2O (1st chatroom)
        - Members
            - member 1 uid
            - member 2 uid
        - Title
    - Hu19FkkW4Haoiw94OY4 (2nd chatroom)
        - Members
            - member 1 uid
            - member 3 uid
        - Title
    ...

userchats
    - member 1 uid
        - e1iqOnWeO2YTUCpUJ2O: true
        - Hu19FkkW4Haoiw94OY4: true
    - member 2 uid
        - e1iqOnWeO2YTUCpUJ2O: true
    - member 3 uid
        - Hu19FkkW4Haoiw94OY4: true

Я хотел бы показать чаты на основе данных в userchats. Пока у меня есть следующий код, который получает все чаты и отображает их всем пользователям (независимо от того, являются ли они их частью или нет).

private chatrooms: Observable<Chatroom[]>;
private chatroomCollection: AngularFirestoreCollection<Chatroom>;

constructor(private afs: AngularFirestore) {
    this.chatroomCollection = this.afs.collection<Chatroom>('chatrooms');
    this.chatrooms = this.chatroomCollection.snapshotChanges().pipe(
      map(actions => {
        return actions.map(a => {
          let data = a.payload.doc.data();
          let id = a.payload.doc.id;
          return { id, ...data };
        });
      })
    );
  }

Моя попытка состоит в том, чтобы следующий код был в конструктор, но он не работает и не выдает ошибки:

constructor(private afs: AngularFirestore) {
    this.afs.collection('userchats').doc(this.currentUserId).get().subscribe(chatrooms => {
      let chatroomId: string[] = Object.keys(chatrooms.data());
      this.afs.collection<Chatroom>('chatrooms').doc(chatroomId[0]).snapshotChanges().pipe(
        map(actions => {
          //Not getting here
          console.log(actions.payload.data())
          return actions.payload.data() as Chatroom;
        })
      );
    });
  }

Если это поможет, у меня нет каких-либо правил, установленных в базе данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...