Как относительно новый пользователь 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 и множества примеров я не смог найти решение, которое считывает все группы для пользователя с помощью одного запроса. Скорее всего, я столкнусь с аналогичными проблемами при обновлении групповых объектов.
ВОПРОСЫ Каков рекомендуемый шаблон (пример кода) для чтения всех групп, членом которых является пользователь, с помощью одного запроса? Есть ли лучшая, более масштабируемая архитектура, которую я должен использовать, чтобы приложение было эффективным и реактивным?
Спасибо за ваше время!