Можно ли при редактировании документов дублировать документы в Firestore с помощью облачной функции? - PullRequest
0 голосов
/ 12 апреля 2020

У меня есть следующее настроенное хранилище: * Таким образом, если пользователь A будет следовать за пользователем B, то пользователь A будет добавлен в подколлекцию подписчиков пользователя B, а также пользователь B будет добавлен в следующую подколлекцию пользователя A

Но, допустим, пользователь A обновляет свой профиль информация (имя, фотография, имя пользователя и др. c.). Затем его пользователь do c изменит свой документ, но это нужно изменить везде, где бы он ни был подписчиком в подгруппе подписчиков других пользователей, таких как Пользователь B или E & F.

Можно ли это сделать через облачные функции? Я создал триггер onCreate () для облачных функций, но функция не знает список других пользователей (uids), для которых он является последователем, поэтому я не могу применить это изменение везде, где это необходимо.

Это моя функция в Firebase CLI, это триггер .onUpdate () в Firestore. Я прокомментировал место, в котором я застрял

export const onUserDocUpdate = functions.region('asia- 
east2').firestore.document
('Users/{userId}').onUpdate((change, context) => {
const upDatedUserData = change.after.data()

const newName = upDatedUserData?.name
const profilePhotoChosen = upDatedUserData?.profilePhotoChosen
const updatersUserId = upDatedUserData?.uid
const newUserName = upDatedUserData?.userName

//This is where I am stuck, I have the updated document info but how do
//I find the other documents at firestore that needs updation with this 
//updated information of the user
    return admin.firestore()
    .collection('Users').doc('{followeeUserId}')
    .collection('Followers').doc(updatersUserId)
    .set({
    name: newName, 
    userName: newUserName,
    profilePhotoChosen: profilePhotoChosen,
    uid: updatersUserId
  })

})

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

1 Ответ

1 голос
/ 12 апреля 2020

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

export const onUserDocUpdate = functions.region('asia- 
east2').firestore.document
('Users/{userId}').onUpdate((change, context) => {
  const upDatedUserData = change.after.data()

  const newName = upDatedUserData?.name
  const profilePhotoChosen = upDatedUserData?.profilePhotoChosen
  const updatersUserId = upDatedUserData?.uid
  const newUserName = upDatedUserData?.userName

  const userDoc = change.after.ref.parent; // the user doc that triggered the function
  const followerColl = userDoc.collection("Followers");

  return followerColl.get().then((querySnapshot) => {
    const promises = querySnapshot.documents.map((doc) => {
      const followerUID = doc.id;
      return admin.firestore()
        .collection('Users').doc(followerUID)
        .collection('Followees').doc(updatersUserId)
        .set({
          name: newName, 
          userName: newUserName,
          profilePhotoChosen: profilePhotoChosen,
          uid: updatersUserId
        })
    });
    return Promise.all(promises);
  });
})

Возможно, у меня есть некоторые опечатки / синтаксическая ошибка, но семантика должна быть довольно solid. Самая большая вещь, в которой я не был уверен, это логика подписчика / подписчика c, которую вы поддерживаете, поэтому я использовал названия коллекций, поскольку они наиболее важны для меня, которые могут быть инвертированы из ваших.

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