Как запросить «Список запрещенных пользователей» с Firestore - PullRequest
0 голосов
/ 30 апреля 2020

Я на самом деле использую Firestore и предполагаю, что у меня более 100 тыс. Пользователей.

Вот модель Firestore, которая у меня есть на самом деле:

 /users/
  {uid_0}
    /bans/
      uid_1: true
      uid_2: true
  {uid_1}
    /bans/
  {uid_2}
    /bans/
      uid_4 : true
  {uid_3}
    /bans/
  {uid_4}
    /bans/
      uid_0: true

Каждый пользователь может запретить N пользователей, и нам нужно прекратить любое взаимодействие между заблокированными пользователями.

Поэтому мне нужно создать облачную функцию, которая будет возвращать разные результаты для каждого пользователя.

[GET] / me / allow-users ( каждый пользователь будет использовать свой собственный токен)

  • uid_0 получит: [uid_3]

  • uid_1: [uid_2, uid_3, uid_4]

  • uid_2: [uid_1, uid_3]

  • uid_3: [uid_0, uid_1, uid_2, uid_4]

  • uid_4: [uid_1, uid_3]

Как использовать Firestore, каков наилучший способ реализовать это?

Это также может быть сделано на стороне клиента, но для этого потребуется, чтобы каждый пользователь синхронизировал c всех 100k пользователей ...

Вот код, который я пробовал на стороне клиента:

function getUsersSample() {
  // Array of uid: /users/{uid}/bans/*
  const bannedUsers = getBannedUsers();

  // Considering we don't need rules for the moment
  const usersCollection = Firebase.firestore().collection('users');

  return usersCollection
    .orderBy('last_activity_at', 'desc')
    .limit(50)
    .get()
    .then((querySnapshot) => {
      return querySnapshot.docs
        .filter((e) => !bannedUsers.includes(e.id))
        .map((e) => e.id);
    });
}

Используя этот метод, я не всегда могу получить 50 пользователей в результате ...

Спасибо,

...