Я реализую чат один на один для приложения Android в Firestore. Я храню все данные чата в отдельной коллекции. Документ в этой коллекции выглядит следующим образом:
{
participant1: "kd94992nnd9",
participant2: "49di9niso3s",
p1Name: "...",
p2Name: "...",
messages: [/*messages are stored her*/],
//Some metadata about the chats
}
В моем приложении пользователь может нажать кнопку и начать чат с другим пользователем. Когда пользователь нажимает эту кнопку, я создаю новый документ в этой коллекции, который содержит userIds
как пользователей, так и всех сообщений.
Чтобы избежать дублирования, я хочу убедиться, что только один документ существует для любых 2 пользователей, независимо от того, кто начал чат. Используя userIds
из 2 участников, как я могу проверить, существует ли документ с их сообщениями? Я попытался использовать запрос, подобный следующему:
DatabaseService.getDbInstance().collection("conversations")
.whereEqualTo("participant1", currentUser.uid)
.whereEqualTo("participant2", targetUser.uid)
.get()
Проблема этого подхода заключается в том, что он создает второй документ, в котором переключаются значения participant1
и participant2
. Пожалуйста, помогите!