Created
July 23, 2024 01:49
-
-
Save romyilano/18b994abab22208f44069875d7468c73 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/// 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