Skip to content

Commit 624f254

Browse files
committed
Convert Search
1 parent 346b8ea commit 624f254

File tree

3 files changed

+64
-68
lines changed

3 files changed

+64
-68
lines changed

Sources/App/Controllers/API/API+SearchController.swift

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -68,9 +68,6 @@ extension API {
6868
searchFilters: [],
6969
results: [])
7070
}
71-
return try await Search.fetch(database,
72-
terms,
73-
page: query.page,
74-
pageSize: query.pageSize).get()
71+
return try await Search.fetch(database, terms, page: query.page, pageSize: query.pageSize)
7572
}
7673
}

Sources/App/Core/Search.swift

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -369,7 +369,7 @@ enum Search {
369369
static func fetch(_ database: Database,
370370
_ terms: [String],
371371
page: Int,
372-
pageSize: Int) -> EventLoopFuture<Search.Response> {
372+
pageSize: Int) async throws -> Search.Response {
373373
let page = page.clamped(to: 1...)
374374
let (sanitizedTerms, filters) = SearchFilter.split(terms: sanitize(terms))
375375

@@ -382,24 +382,23 @@ enum Search {
382382
filters: filters,
383383
page: page,
384384
pageSize: pageSize) else {
385-
return database.eventLoop.future(.init(hasMoreResults: false,
386-
searchTerm: sanitizedTerms.joined(separator: " "),
387-
searchFilters: [],
388-
results: []))
385+
return .init(hasMoreResults: false,
386+
searchTerm: sanitizedTerms.joined(separator: " "),
387+
searchFilters: [],
388+
results: [])
389389
}
390-
return query.all(decoding: DBRecord.self)
391-
.mapEachCompact(Result.init)
392-
.map { results in
393-
let hasMoreResults = results.filter(\.isPackage).count > pageSize
394-
// first page has non-package results prepended, extend prefix for them
395-
let keep = (page == 1)
396-
? pageSize + results.filter{ !$0.isPackage }.count
397-
: pageSize
398-
return Search.Response(hasMoreResults: hasMoreResults,
399-
searchTerm: sanitizedTerms.joined(separator: " "),
400-
searchFilters: filters.map { $0.viewModel },
401-
results: Array(results.prefix(keep)))
402-
}
390+
let results = try await query.all(decoding: DBRecord.self).compactMap(Result.init)
391+
392+
let hasMoreResults = results.filter(\.isPackage).count > pageSize
393+
// first page has non-package results prepended, extend prefix for them
394+
let keep = (page == 1)
395+
? pageSize + results.filter { !$0.isPackage }.count
396+
: pageSize
397+
398+
return Search.Response(hasMoreResults: hasMoreResults,
399+
searchTerm: sanitizedTerms.joined(separator: " "),
400+
searchFilters: filters.map { $0.viewModel },
401+
results: Array(results.prefix(keep)))
403402
}
404403

405404
static func refresh(on database: Database) async throws {

0 commit comments

Comments
 (0)