Как синхронизировать IndexedDB с Firestore?

Я создаю портал вакансий для Интернета, используя React, Redux и Firebase / Firestore. Я выполнил все необходимые функции, кроме одной.

Я хочу, чтобы незарегистрированные пользователи / соискатели могли:

  1. Добавляйте в закладки сообщения о вакансиях.
  2. Ведите учет примененных вакансий.
  3. Ведите учет поисковых запросов.

Я подумываю использовать IndexedDB для этой функции. В частности, Dexie.js, чтобы упростить задачу. Однако эти данные будут храниться в браузере пользователя, и у пользователя не будет доступа к ним в другом браузере или на другом устройстве. Поэтому я хочу дать пользователям возможность сохранять все данные в Firestore, если пользователь войдет на сайт, и мне нужно, чтобы это происходило автоматически. Итак, как только пользователь войдет в систему, я сохраню его в базе данных.

Я думал об использовании анонимной аутентификации вместо IndexedDB / Firestore, чтобы все данные были сохранены в базе данных, и как только пользователь войдет в систему с учетными данными, пользователь сможет заявить о праве собственности на данные. Однако это дополнительный шаг для использования перечисленных выше функций, и не все довольны аутентификацией приложения, даже если от пользователя ничего не требуется. Кроме того, будет очень много аккаунтов-призраков.

Итак, как я уже упоминал в названии; Я хочу сохранить все в IndexedDB (я позабочусь об этом), но как мне синхронизировать все данные в IndexedDB с Firestore, как только пользователь войдет в систему?

Я представил, что основной процесс будет таким:

  1. Пользователь нажимает закладку для публикации о вакансии
  2. Приложение проверяет, аутентифицированы ли пользователи.
  3. В случае аутентификации сохраните закладку в Firestore.
  4. Если не аутентифицирован, сохраните закладку в IndexedDB.
  5. Если пользователь решил войти или зарегистрироваться, проверьте IndexedDB и синхронизируйте его с Firestore и очистите IndexedDB.

Как я могу достичь 5-го шага технически? Есть ли в Firebase встроенная система? Кроме того, не стесняйтесь поделиться своей идеей, если вы можете придумать другой способ реализации этой функции. Должен ли я использовать firebase.auth().onAuthStateChanged() для 5-го шага?

И, наконец, как мне структурировать Firestore для сохранения заданий, отмеченных закладками, примененных заданий и истории поиска?

Должен ли я создать bookmarkedJobs коллекцию и дублировать документы jobPosts для каждого пользователя, который добавил в закладки сообщение о вакансии? И каждый раз, когда работодатель обновляет объявление о вакансии, у меня будет облачная функция, которая будет собирать bookmarkedJobs сбор, обновляя каждый его экземпляр?

Спасибо


person cyonder    schedule 16.09.2020    source источник


Ответы (1)


Это может вас заинтересовать https://dexie.org/docs/Syncable/Dexie.Syncable.js

Я искал, чтобы мой веб-сайт был полностью статическим / pwa, и просто использовал indexeddb, и некоторые веб-службы для обработки / хранения данных ... это кажется интересным маршрутом для изучения.

person Robert Hoffmann    schedule 01.04.2021
comment
Интерфейс находится здесь dexie.org/docs/Syncable/Dexie.Syncable.ISyncProtocol - person Robert Hoffmann; 01.04.2021