Я новичок в Firestore и пытаюсь найти примеры проектов с несколькими слоями на iOS. Я хочу использовать все, что может предложить Firestore.
У меня есть пользовательская настройка, которая отображает тесты для пользователя. (Все работает отлично) Теперь я хочу построить свою структуру Викторины. Объект викторины, который имеет вопросы, и эти вопросы имеют ответы.
Я выстроил его до определенного уровня, но он кажется хакерским. Кто-нибудь может поделиться своими лучшими практическими знаниями со мной? Это будет с благодарностью.
Работа на данный момент:
Формат Firestore:"/ quizzes / idone / questions / idtwo / questions"
struct Quiz: Codable, Identifiable {
@DocumentID var id: String?
var title: String
var score: Int?
var completed: Bool
@ServerTimestamp var createdTime: Timestamp?
var userId: String?
var questions: [Question]?
}
struct Question: Codable, Identifiable {
@DocumentID var id: String?
var title: String?
var completed: Bool?
//TODO: Answers
}
do {
var userQuiz = quiz
userQuiz.userId = self.userId
let questionOne = Question(title: "What day is it today?",
imageName: "test.jpeg",
completed: false)
let questioTwo = Question(title: "What is the meaning of life?",
imageName: "test.jpeg",
completed: false)
let _ = try db
.collection("quizzes").addDocument(from: userQuiz) // Works perfect
.collection("questions").addDocument(from: questionOne) // Here is the issue I can't add multiple questions.
}
catch {
fatalError("Unable to encode quiz: \(error.localizedDescription).")
}
private func loadData() {
if listenerRegistration != nil {
listenerRegistration?.remove()
}
listenerRegistration = db.collection(quizzesPath)
.whereField("userId", isEqualTo: self.userId)
.order(by: "createdTime")
.addSnapshotListener { (querySnapshot, error) in
if let querySnapshot = querySnapshot {
self.quizzes = querySnapshot.documents.compactMap { document -> Quiz? in
try? document.data(as: Quiz.self)
}
//Todo: This is the main part I have a issue at. How do I consume my questions and mapp them to quizzes
let questions = querySnapshot.documents.compactMap { document -> [Question]? in
try? document.data(as: [Question].self)
}
//self.quizzes.questions = questions
}
}
}