Skip to content

Commit db5a528

Browse files
committed
feat: '#숫자' 를 붙이면 Todo의 번호로만 검색되도록 구현
1 parent f7e9c74 commit db5a528

3 files changed

Lines changed: 47 additions & 9 deletions

File tree

DevLog/Infra/Service/TodoService.swift

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,8 +146,13 @@ final class TodoService {
146146
let snapshot = try await firestoreQuery.getDocuments()
147147
let todos = snapshot.documents.compactMap { makeResponse(from: $0) }
148148

149+
let todoNumber = searchedTodoNumber(from: trimmedKeyword)
149150
let filtered = todos.filter { todo in
150-
todo.title.localizedCaseInsensitiveContains(trimmedKeyword)
151+
if let todoNumber, todo.number == todoNumber {
152+
return true
153+
}
154+
155+
return todo.title.localizedCaseInsensitiveContains(trimmedKeyword)
151156
|| todo.content.localizedCaseInsensitiveContains(trimmedKeyword)
152157
|| todo.tags.contains { $0.localizedCaseInsensitiveContains(trimmedKeyword) }
153158
}
@@ -483,6 +488,19 @@ private extension TodoService {
483488
)
484489
}
485490

491+
func searchedTodoNumber(from keyword: String) -> Int? {
492+
guard keyword.hasPrefix("#") else {
493+
return nil
494+
}
495+
496+
let numberText = String(keyword.dropFirst())
497+
guard !numberText.isEmpty, numberText.allSatisfy(\.isNumber) else {
498+
return nil
499+
}
500+
501+
return Int(numberText)
502+
}
503+
486504
enum TodoFieldKey: String {
487505
case id
488506
case isPinned

DevLog/Presentation/ViewModel/SearchViewModel.swift

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -137,12 +137,16 @@ final class SearchViewModel: Store {
137137
do {
138138
send(.setLoading(true))
139139
defer { send(.setLoading(false)) }
140+
let searchesTodoOnly = searchesTodoOnly(query)
140141
async let todos = fetchTodosUseCase.execute(TodoQuery(keyword: query), cursor: nil)
141-
async let webPages = fetchWebPagesUseCase.execute(query)
142+
async let webPageItems = fetchWebPageItems(
143+
query: query,
144+
searchesTodoOnly: searchesTodoOnly
145+
)
142146
let todoItems = try await todos.items.compactMap { TodoListItem(from: $0) }
143-
let webPageItems = try await webPages.map { WebPageItem(from: $0) }
147+
let resolvedWebPageItems = try await webPageItems
144148
send(.fetchTodos(todoItems))
145-
send(.fetchWebPage(webPageItems))
149+
send(.fetchWebPage(resolvedWebPageItems))
146150
} catch {
147151
send(.setAlert(true))
148152
}
@@ -178,6 +182,22 @@ private extension SearchViewModel {
178182
searchDebounceTask = nil
179183
}
180184

185+
func searchesTodoOnly(_ query: String) -> Bool {
186+
query.trimmingCharacters(in: .whitespacesAndNewlines).hasPrefix("#")
187+
}
188+
189+
func fetchWebPageItems(
190+
query: String,
191+
searchesTodoOnly: Bool
192+
) async throws -> [WebPageItem] {
193+
if searchesTodoOnly {
194+
return []
195+
}
196+
197+
let webPages = try await fetchWebPagesUseCase.execute(query)
198+
return webPages.map { WebPageItem(from: $0) }
199+
}
200+
181201
func saveRecentQueries(_ queries: OrderedSet<String>) {
182202
updateRecentSearchQueriesUseCase.execute(Array(queries))
183203
}

DevLog/Resource/Localizable.xcstrings

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1495,13 +1495,13 @@
14951495
"en" : {
14961496
"stringUnit" : {
14971497
"state" : "translated",
1498-
"value" : "Search"
1498+
"value" : "Search (e.g. #123)"
14991499
}
15001500
},
15011501
"ko" : {
15021502
"stringUnit" : {
15031503
"state" : "translated",
1504-
"value" : "검색"
1504+
"value" : "검색 (예: #123)"
15051505
}
15061506
}
15071507
}
@@ -2950,13 +2950,13 @@
29502950
"en" : {
29512951
"stringUnit" : {
29522952
"state" : "translated",
2953-
"value" : "Search %1$@"
2953+
"value" : "Search %1$@ (e.g. #123)"
29542954
}
29552955
},
29562956
"ko" : {
29572957
"stringUnit" : {
29582958
"state" : "translated",
2959-
"value" : "%1$@ 검색"
2959+
"value" : "%1$@ 검색 (예: #123)"
29602960
}
29612961
}
29622962
}
@@ -3367,4 +3367,4 @@
33673367
}
33683368
},
33693369
"version" : "1.0"
3370-
}
3370+
}

0 commit comments

Comments
 (0)