Skip to content

Commit

Permalink
Merge branch 'feedback/firestore'
Browse files Browse the repository at this point in the history
  • Loading branch information
peterfriese committed Feb 13, 2020
2 parents 7fc1cdc + d1b55b3 commit e4dc2ad
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 19 deletions.
2 changes: 1 addition & 1 deletion final/MakeItSo/MakeItSo/App/AppDelegate+Injection.swift
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,6 @@ extension Resolver: ResolverRegistering {
// register { TestDataTaskRepository() as TaskRepository }.scope(application)
// register { LocalTaskRepository() as TaskRepository }.scope(application)
register { AuthenticationService() }.scope(application)
register { FirebaseTaskRepository() as TaskRepository }.scope(application)
register { FirestoreTaskRepository() as TaskRepository }.scope(application)
}
}
1 change: 1 addition & 0 deletions final/MakeItSo/MakeItSo/Models/Task.swift
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ struct Task: Codable, Identifiable {
var priority: TaskPriority
var completed: Bool
@ServerTimestamp var createdTime: Timestamp?
var userId: String?
}

#if DEBUG
Expand Down
38 changes: 20 additions & 18 deletions final/MakeItSo/MakeItSo/Repositories/TaskRepository.swift
Original file line number Diff line number Diff line change
Expand Up @@ -97,26 +97,23 @@ class LocalTaskRepository: BaseTaskRepository, TaskRepository, ObservableObject
}
}

class FirebaseTaskRepository: BaseTaskRepository, TaskRepository, ObservableObject {
class FirestoreTaskRepository: BaseTaskRepository, TaskRepository, ObservableObject {
var db = Firestore.firestore()

@Injected var authenticationService: AuthenticationService
var userTasksPath: String = "tasks"
var tasksPath: String = "tasks"
var userId: String = "unknown"

private var cancellables = Set<AnyCancellable>()

override init() {
super.init()

// compute path to task if user changes
authenticationService.$user
.compactMap { user in
user?.uid
}
.map { userId in
"users/\(userId)/tasks"
}
.assign(to: \.userTasksPath, on: self)
.assign(to: \.userId, on: self)
.store(in: &cancellables)

// (re)load data if user changes
Expand All @@ -129,29 +126,34 @@ class FirebaseTaskRepository: BaseTaskRepository, TaskRepository, ObservableObje
}

private func loadData() {
db.collection(userTasksPath).order(by: "createdTime").addSnapshotListener { (querySnapshot, error) in
if let querySnapshot = querySnapshot {
self.tasks = querySnapshot.documents.compactMap { document -> Task? in
try? document.data(as: Task.self)
db.collection(tasksPath)
.whereField("userId", isEqualTo: self.userId)
.order(by: "createdTime")
.addSnapshotListener { (querySnapshot, error) in
if let querySnapshot = querySnapshot {
self.tasks = querySnapshot.documents.compactMap { document -> Task? in
try? document.data(as: Task.self)
}
}
}
}
}

func addTask(_ task: Task) {
do {
let _ = try db.collection(userTasksPath).addDocument(from: task)
var userTask = task
userTask.userId = self.userId
let _ = try db.collection(tasksPath).addDocument(from: userTask)
}
catch {
print("There was an error while trying to save a task \(error.localizedDescription).")
fatalError("Unable to encode task: \(error.localizedDescription).")
}
}

func removeTask(_ task: Task) {
if let taskID = task.id {
db.collection(userTasksPath).document(taskID).delete { (error) in
db.collection(tasksPath).document(taskID).delete { (error) in
if let error = error {
print("Error removing document: \(error.localizedDescription)")
print("Unable to remove document: \(error.localizedDescription)")
}
}
}
Expand All @@ -160,10 +162,10 @@ class FirebaseTaskRepository: BaseTaskRepository, TaskRepository, ObservableObje
func updateTask(_ task: Task) {
if let taskID = task.id {
do {
try db.collection(userTasksPath).document(taskID).setData(from: task)
try db.collection(tasksPath).document(taskID).setData(from: task)
}
catch {
print("There was an error while trying to update a task \(error.localizedDescription).")
fatalError("Unable to encode task: \(error.localizedDescription).")
}
}
}
Expand Down

0 comments on commit e4dc2ad

Please sign in to comment.