Спецификация запроса Firebase c Список с узла - PullRequest
0 голосов
/ 11 июля 2020

Как относительно новый пользователь Firebase Realtime, я создал приложение Vuejs, используя Quasar и Firebase. Приложение успешно создает, читает, обновляет и удаляет записи базы данных. Теперь, когда я разрабатываю больше функций, я столкнулся с проблемой, которая кажется довольно простой c, и любые советы будут оценены.

ДИЗАЙН Упрощенное представление базы данных выглядит следующим образом, где users и groups должны быть масштабируемыми.

-users
  -user1_ID
    -groups:
      - group1_ID
      - group4_ID

-groups
  -group1_ID
    -members:
      -user1_ID
      -user22_ID
  -group2_ID
    -members:
      -user33_ID
      -user22_ID
      -user57_ID
  -group3_ID
    -members:
      -user8_ID
      -user76_ID
  -group4_ID
    -members:
      -user1_ID

Приложение считывает данные пользователя из хранилища, используя этот метод:

  fbReadUserData({ commit, dispatch }) {
    let userId = firebaseAuth.currentUser.uid
    let userData = firebaseDb.ref('users/' + userId)

    // initial check for data
    userData.once('value', snapshot => {
      commit('setUserDataDownloaded', true)
      dispatch('groups/fbReadGroups', null, {root: true})
    }, error => {
      showErrorMessage(error.message)
      this.$router.replace('/auth')
    })

    // child added
    userData.on('child_added', snapshot => {
      let user = snapshot.val()
      let payload = {
        id: snapshot.key,
        user: user
      }
      commit('addUser', payload)
    })
  }

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

ПРОБЛЕМА После прочтения документации Firebase и множества примеров я не смог найти решение, которое считывает все группы для пользователя с помощью одного запроса. Скорее всего, я столкнусь с аналогичными проблемами при обновлении групповых объектов.

ВОПРОСЫ Каков рекомендуемый шаблон (пример кода) для чтения всех групп, членом которых является пользователь, с помощью одного запроса? Есть ли лучшая, более масштабируемая архитектура, которую я должен использовать, чтобы приложение было эффективным и реактивным?

Спасибо за ваше время!

...