Skip to content

Commit 069fb1e

Browse files
committed
refactor: dueDate가 사용된 쿼리 생성 시 secondary가 없을 때 에러를 보장하도록 개선
1 parent c882545 commit 069fb1e

1 file changed

Lines changed: 15 additions & 7 deletions

File tree

DevLog/Infra/Service/TodoService.swift

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ final class TodoService {
1313
private let encoder = Firestore.Encoder()
1414
private let logger = Logger(category: "TodoService")
1515

16+
// swiftlint:disable function_body_length
1617
func fetchTodos(
1718
_ query: TodoQuery,
1819
cursor: TodoCursorDTO?
@@ -84,7 +85,11 @@ final class TodoService {
8485
while true {
8586
var pageQuery = firestoreQuery
8687
if let pageCursor {
87-
pageQuery = pageQuery.start(after: cursorValues(for: query, cursor: pageCursor))
88+
guard let cursorValues = cursorValues(for: query, cursor: pageCursor) else {
89+
logger.error("Failed to build cursor values for paginated todo fetch.")
90+
break
91+
}
92+
pageQuery = pageQuery.start(after: cursorValues)
8893
}
8994

9095
pageQuery = pageQuery.limit(to: query.pageSize)
@@ -110,7 +115,11 @@ final class TodoService {
110115
}
111116

112117
if let cursor {
113-
firestoreQuery = firestoreQuery.start(after: cursorValues(for: query, cursor: cursor))
118+
guard let cursorValues = cursorValues(for: query, cursor: cursor) else {
119+
logger.error("Failed to build cursor values for todo fetch.")
120+
return TodoPageResponse(items: [], nextCursor: nil)
121+
}
122+
firestoreQuery = firestoreQuery.start(after: cursorValues)
114123
}
115124

116125
firestoreQuery = firestoreQuery.limit(to: query.pageSize)
@@ -134,6 +143,7 @@ final class TodoService {
134143

135144
return TodoPageResponse(items: filtered, nextCursor: nil)
136145
}
146+
// swiftlint:enable function_body_length
137147

138148
func upsertTodo(request: TodoRequest) async throws {
139149
guard let uid = Auth.auth().currentUser?.uid else { throw AuthError.notAuthenticated }
@@ -218,17 +228,15 @@ private extension TodoService {
218228
func cursorValues(
219229
for query: TodoQuery,
220230
cursor: TodoCursorDTO
221-
) -> [Any] {
231+
) -> [Any]? {
222232
let primaryValue: Any = cursor.primarySortDate.map { Timestamp(date: $0) } ?? NSNull()
223233

224234
switch query.sortTarget {
225235
case .dueDate:
226-
guard let secondarySortDate = cursor.secondarySortDate else {
227-
return [primaryValue, cursor.documentID]
228-
}
236+
guard let sortDate = cursor.secondarySortDate else { return nil }
229237
return [
230238
primaryValue,
231-
Timestamp(date: secondarySortDate),
239+
Timestamp(date: sortDate),
232240
cursor.documentID
233241
]
234242
case .createdAt, .updatedAt:

0 commit comments

Comments
 (0)