Skip to content

Instantly share code, notes, and snippets.

@romyilano
Created July 23, 2024 01:49
Show Gist options
  • Save romyilano/18b994abab22208f44069875d7468c73 to your computer and use it in GitHub Desktop.
Save romyilano/18b994abab22208f44069875d7468c73 to your computer and use it in GitHub Desktop.
/// Request to form the search URLRequests for the Open library app (Version 1)
/// - For subject searches the search terms must be lowercased or it will return XML + a 200 response
enum SearchRequest: NetworkRequestProtocol {
var timeout: TimeInterval? {
TimeInterval(BookAPIConstants.standardTimeout)
}
case subjectSearch(String)
// case subjectSearchParameters(SubjectSearchInfo)
case bookDetail(any BookItemProtocol)
case bookDetailKey(String)
case bookCover(any BookItemProtocol)
case bookThumbnail(any BookItemProtocol)
case bookThumbId(Int)
case bookCoverId(Int)
case bookSearch(String, Int?)
var host: String {
switch self {
case .bookCover, .bookThumbnail, .bookCoverId, .bookThumbId:
return BookAPIRouter.coversBase
default:
return BookAPIRouter.subjectSearch.baseUrlString
}
}
var path: String? {
switch self {
case .subjectSearch(let searchTerm):
guard let subjectSearchPath = BookAPIRouter.subjectSearch.path else {
return nil
}
return subjectSearchPath + "/" + searchTerm.lowercased() + ".json"
// case .subjectSearchParameters(let searchInfo):
// guard let subjectSearchPath = BookAPIRouter.subjectSearch.path else {
// return nil
// }
// return subjectSearchPath + "/" + searchInfo.subject.lowercased() + ".json"
case .bookDetail(let book):
return book.key + ".json"
case .bookDetailKey(let key):
return key + ".json"
case .bookThumbnail(let bookItem):
if let coverId = bookItem.coverId {
return BookAPIRouter.bookCoverThumbId(coverId).path
}
return nil
case .bookThumbId(let coverId):
return BookAPIRouter.bookCoverThumbId(coverId).path
case .bookCoverId(let coverId):
return BookAPIRouter.bookCoverId(coverId).path
case .bookCover(let bookItem):
if let coverId = bookItem.coverId {
return BookAPIRouter.bookCoverId(coverId).path
}
return nil
case .bookSearch:
return BookAPIRouter.bookSearch.path
}
}
var params: [String : Any] {
return [:]
}
var headers: [String : String] {
[:]
}
var urlParams: [String : String?] {
switch self {
case .subjectSearch(_):
return [:]
// case .subjectSearchParameters(let searchInfo):
// return searchInfo.urlParams
case .bookSearch(let searchTerm, let page):
// for now hard code limit at 42
var params = ["limit": "100"]
params["q"] = searchTerm
if let page {
params["page"] = "\(page)"
}
return params
default:
return [:]
}
}
var requestType: RequestType {
.GET
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment