Skip to content

Commit 2c3f3d4

Browse files
committed
refactor: Modern concurrency for TaskRepository and TaskItem rename
1 parent 996d19b commit 2c3f3d4

File tree

4 files changed

+29
-23
lines changed

4 files changed

+29
-23
lines changed

ccdr/makeitso/iOS/MakeItSo/MakeItSo/Models/Task.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import FirebaseFirestore
22
import Foundation
33

4-
struct Task: Codable, Identifiable {
4+
struct TaskItem: Codable, Identifiable {
55
@DocumentID var id: String? = nil
66
var title: String
77
var isCompleted: Bool

ccdr/makeitso/iOS/MakeItSo/MakeItSo/Repositories/TaskRepository.swift

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import Observation
55

66
@Observable
77
class TaskRepository {
8-
var tasks = [Task]()
8+
var tasks = [TaskItem]()
99

1010
var user: User? = nil
1111

@@ -15,16 +15,18 @@ class TaskRepository {
1515

1616
init() {
1717
authStateListenerHandle = Auth.auth().addStateDidChangeListener { [weak self] auth, user in
18-
guard let self = self else { return }
19-
self.user = user
20-
guard let user = user else {
21-
print("User is signed out")
22-
self.tasks = []
23-
self.unsubscribe()
24-
return
18+
Task { @MainActor in
19+
guard let self = self else { return }
20+
self.user = user
21+
guard let user = user else {
22+
print("User is signed out")
23+
self.tasks = []
24+
self.unsubscribe()
25+
return
26+
}
27+
print("User is signed in: \(user.uid)")
28+
self.subscribe(userId: user.uid)
2529
}
26-
print("User is signed in: \(user.uid)")
27-
self.subscribe(userId: user.uid)
2830
}
2931
}
3032

@@ -52,14 +54,18 @@ class TaskRepository {
5254
}
5355
print("Received \(documents.count) tasks")
5456

55-
self?.tasks = documents.compactMap { queryDocumentSnapshot in
57+
let tasks = documents.compactMap { queryDocumentSnapshot -> TaskItem? in
5658
do {
57-
return try queryDocumentSnapshot.data(as: Task.self)
59+
return try queryDocumentSnapshot.data(as: TaskItem.self)
5860
} catch {
5961
print("Error decoding task: \(error.localizedDescription)")
6062
return nil
6163
}
6264
}
65+
66+
Task { @MainActor [weak self] in
67+
self?.tasks = tasks
68+
}
6369
}
6470
}
6571
}
@@ -69,7 +75,7 @@ class TaskRepository {
6975
listenerRegistration = nil
7076
}
7177

72-
func addTask(_ task: Task) {
78+
func addTask(_ task: TaskItem) {
7379
do {
7480
var newTask = task
7581
// Assign current user ID if available
@@ -85,7 +91,7 @@ class TaskRepository {
8591
}
8692
}
8793

88-
func updateTask(_ task: Task) {
94+
func updateTask(_ task: TaskItem) {
8995
if let taskID = task.id {
9096
do {
9197
try db.collection("tasks").document(taskID).setData(from: task)
@@ -95,7 +101,7 @@ class TaskRepository {
95101
}
96102
}
97103

98-
func deleteTask(_ task: Task) {
104+
func deleteTask(_ task: TaskItem) {
99105
if let taskID = task.id {
100106
db.collection("tasks").document(taskID).delete { error in
101107
if let error = error {

ccdr/makeitso/iOS/MakeItSo/MakeItSo/Views/AddTaskView.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import SwiftUI
22

33
struct AddTaskView: View {
44
@Environment(\.dismiss) var dismiss
5-
var onAdd: (Task) -> Void
5+
var onAdd: (TaskItem) -> Void
66

77
@State private var title = ""
88
@State private var priority: TaskPriority = .medium
@@ -42,7 +42,7 @@ struct AddTaskView: View {
4242
}
4343

4444
private func submit() {
45-
let task = Task(title: title, isCompleted: false, priority: priority, dueDate: dueDate)
45+
let task = TaskItem(title: title, isCompleted: false, priority: priority, dueDate: dueDate)
4646
onAdd(task)
4747
dismiss()
4848
}

ccdr/makeitso/iOS/MakeItSo/MakeItSo/Views/TaskRowView.swift

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import SwiftUI
22

33
struct TaskRowView: View {
4-
let task: Task
5-
var onToggleCompleted: (Task) -> Void
6-
4+
let task: TaskItem
5+
var onToggleCompleted: (TaskItem) -> Void
6+
77
var body: some View {
88
HStack {
99
Image(systemName: task.isCompleted ? "checkmark.circle.fill" : "circle")
@@ -12,7 +12,7 @@ struct TaskRowView: View {
1212
.onTapGesture {
1313
onToggleCompleted(task)
1414
}
15-
15+
1616
VStack(alignment: .leading) {
1717
Text(task.title)
1818
.strikethrough(task.isCompleted)
@@ -22,7 +22,7 @@ struct TaskRowView: View {
2222
.foregroundStyle(.secondary)
2323
}
2424
}
25-
25+
2626
Spacer()
2727
}
2828
}

0 commit comments

Comments
 (0)