Как удалить пару ключ: значение с карты Firebase?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как удалить пару ключ: значение с карты Firebase?

Сообщение Anonymous »

У меня есть код для управления системой друзей с помощью Firebase. Проблема, с которой я столкнулся, заключается в том, что когда пользователь принимает запрос на добавление в друзья, запрос можно удалить. Таким образом, это включает в себя добавление пользователя user1 в друзья пользователя user2 и пользователя user2 в друзья пользователя user1, затем удаление пользователя user2 из «ownRequests» пользователя user1 и удаление пользователя user1 из «friendRequests» пользователя user2. Я пытаюсь использовать DELETE_FIELD Firestore, но оно не работает.
Схема:

Код: Выделить всё

Firestore-root
|
--- users (collection)
|    |
|    --- $userOneUid (document)
|    |     |
|    |     --- //User data
|    |
|    --- $userTwoUid (document)
|    |     |
|    |     --- //User data
|    |
|    --- $userThreeUid (document)
|          |
|          --- //User data
|
--- requests (collection)
|
--- $userOneUid (document)
|     |
|     --- ownRequests (map)
|     |      |
|     |      --- $userTwoUid
|     |             |
|     |             --- displayName: "User Two"
|     |             |
|     |             --- photoUrl: "https://"
|     |             |
|     |             --- status: "requested"
|     |
|     --- friendRequests (map)
|     |      |
|     |      --- $userThreeUid
|     |             |
|     |             --- displayName: "User Three"
|     |             |
|     |             --- photoUrl: "https://"
|     |             |
|     |             --- status: "requested"
|     |
|     --- allFriends (map)
|            |
|            --- //All friends
|
--- $userTwoUid (document)
|     |
|     --- friendRequests (map)
|            |
|            --- $userOneUid
|                   |
|                   --- displayName: "User One"
|                   |
|                   --- photoUrl: "https://"
|                   |
|                   --- status: "requested"
|
--- $userThreeUid (document)
|
--- ownRequests (map)
|
--- $userOneUid
|
--- displayName: "User One"
|
--- photoUrl: "https://"
|
--- status: "requested"
Изображение

Код: Выделить всё

# accept/reject friend request
@router.post("/accept_friend_request")
def accept_friend_request(friend_req: FriendRequest): # pass req uid and accept uid
requester_ref = db.collection('Requests').document(friend_req.requester)
recipient_ref = db.collection('Requests').document(friend_req.recipient)
transaction = db.transaction()
try:
transaction = db.transaction()
accept_friend_request_transaction(transaction, requester_ref, recipient_ref, friend_req)
transaction.commit()
except Exception as e:
raise HTTPException(status_code=400, detail=str(e))

@firestore.transactional
def accept_friend_request_transaction(transaction: Transaction, requester_ref, recipient_ref, friend_req: FriendRequest):
requester_doc = requester_ref.get(transaction=transaction)
recipient_doc = recipient_ref.get(transaction=transaction)

if requester_doc.exists and recipient_doc.exists:
transaction.update(recipient_ref, {
f'allFriends.{friend_req.requester}': 'true'
})
transaction.update(requester_ref, {
f'allFriends.{friend_req.recipient}': 'true'
})
transaction.update(requester_ref, {
f'ownRequests.{friend_req.recipient}': firestore.DELETE_FIELD
})
transaction.update(recipient_ref, {
f'friendRequests.{friend_req.requester}': firestore.DELETE_FIELD
})
Обновление соответствующих списков друзей работает, но удаление запросов с соответствующих карт не приводит к их удалению. Я попробовал использовать firestore.DELETE_FIELD, но это работает неправильно, и я не знаю почему.

Подробнее здесь: https://stackoverflow.com/questions/789 ... rebase-map
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»