-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathTodoQuery.swift
More file actions
85 lines (76 loc) · 1.96 KB
/
Copy pathTodoQuery.swift
File metadata and controls
85 lines (76 loc) · 1.96 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
//
// TodoQuery.swift
// DevLog
//
// Created by opfic on 2/21/26.
//
import Foundation
struct TodoQuery: Equatable {
enum SortTarget: Equatable, Hashable {
case createdAt
case updatedAt
var fieldName: String {
switch self {
case .createdAt:
return "createdAt"
case .updatedAt:
return "updatedAt"
}
}
}
enum SortOrder: Equatable, Hashable {
case latest
case oldest
var isDescending: Bool {
self == .latest
}
}
enum CompletionFilter: Equatable, Hashable {
case all
case incomplete
case completed
var isCompletedValue: Bool? {
switch self {
case .all:
return nil
case .incomplete:
return false
case .completed:
return true
}
}
}
var kind: TodoKind?
var keyword: String?
var isPinned: Bool?
var completionFilter: CompletionFilter
var createdAtFrom: Date?
var createdAtTo: Date?
var sortTarget: SortTarget
var sortOrder: SortOrder
var pageSize: Int
var fetchAllPages: Bool
init(
kind: TodoKind? = nil,
keyword: String? = nil,
isPinned: Bool? = nil,
completionFilter: CompletionFilter = .all,
createdAtFrom: Date? = nil,
createdAtTo: Date? = nil,
sortTarget: SortTarget = .createdAt,
sortOrder: SortOrder = .latest,
pageSize: Int = 20,
fetchAllPages: Bool = false
) {
self.kind = kind
self.keyword = keyword
self.isPinned = isPinned
self.completionFilter = completionFilter
self.createdAtFrom = createdAtFrom
self.createdAtTo = createdAtTo
self.sortTarget = sortTarget
self.sortOrder = sortOrder
self.pageSize = pageSize
self.fetchAllPages = fetchAllPages
}
}