@@ -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