Невозможно получить документы из Firestone при добавлении .whereFieldIOS

Программируем под IOS
Ответить
Anonymous
 Невозможно получить документы из Firestone при добавлении .whereField

Сообщение Anonymous »

Я добавил расширение Gemini ChatBot в проект Firebase.
Пример: https://medium.com/google-cloud/build-a-chatbot-on-ios- with-the-firebase-gemini-api-extension-in-swift-swiftui-a-step-by-step-64657205ca80
Я добавил идентификатор пользователя в документ через функцию отправки сообщения, чтобы я мог получать только документы ChatDocuments.

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

func sendMessage(_ message: String) {
guard let userID = profile.uid?.uid else {
print("Profile ID not found")
return
}

let data: [String: Any] = [
"prompt": message,
"userID": userID,
]
]

db.collection(collectionPath).addDocument(data: data) { error in
if let error = error {
print("Error adding document: \(error)")
} else {
print("Document added for userID: \(profile!.uid)")
}
}
}
На этом этапе приложение успешно добавляет документ в FireStore, а расширение добавляет ответ.
Ответ отображается в пользовательском интерфейсе. используя следующую функцию.

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

func fetchMessages() {
print("Fetch messages called for userID: \(profile!.uid)")
db.collection(collectionPath)
//       .whereField("userID", isEqualTo: profile!.uid)
.order(by: "createTime", descending: false)
.addSnapshotListener { [weak self] querySnapshot, error in
guard let self else { return }
guard let documents = querySnapshot?.documents else {
print("No documents found")
return
}

self.messages = documents.compactMap { queryDocumentSnapshot -> [ChatMessage]? in
do {
let document = try queryDocumentSnapshot.data(as: ChatDocument.self)

let prompt = ChatMessage(text: document.prompt, isUser: true, state: .COMPLETED)
let response = ChatMessage(text: document.response ?? "", isUser: false, state: document.status.chatState)
print("RESPONSE FROM DOCUMENTS")
print("fetched \(response)")

return [prompt, response]
} catch {
print(error.localizedDescription)
return nil
}
}.flatMap { $0 }
}
}
Однако при добавлении следующей строки документы не загружаются.

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

.whereField("userID", isEqualTo: profile!.uid)
Документ чата

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

struct ChatDocument: Codable {
let createTime: Timestamp
let prompt: String
let response: String?
let status: Status
let userID: String

struct Status: Codable {
let startTime: Timestamp?
let completeTime: Timestamp?
let updateTime: Timestamp
let state: String
let error: String?

var chatState: ChatState {
return ChatState(rawValue: state) ?? .PROCESSING
}
}
}

struct ChatMessage: Hashable {

@ServerTimestamp var createdTime: Timestamp?
@DocumentID var uid: String?

private(set) var id: UUID = .init()
var text: String?
var isUser: Bool
var state: ChatState = .PROCESSING

var message: String {
switch state {
case .COMPLETED:
return text ?? ""
case .ERROR:
return "Something went wrong. Please try again."
case .PROCESSING:
return "..."
}
}

}

enum ChatState: String, Codable {
case COMPLETED
case ERROR
case PROCESSING
}
FireStore:
[img]https://i. sstatic.net/TwLKeQJj.png[/img]


Подробнее здесь: https://stackoverflow.com/questions/785 ... wherefield
Ответить

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

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

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

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

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