53 lines
1.8 KiB
Swift
53 lines
1.8 KiB
Swift
import Foundation
|
|
|
|
protocol BooksServiceProtocol {
|
|
func searchByTitle(_ title: String, locales: String) async throws -> [BookRemote]
|
|
func searchByISBN(_ isbn: String, locales: String) async throws -> [BookRemote]
|
|
func filter(title: String, year: String, locales: String) async throws -> [BookRemote]
|
|
}
|
|
|
|
final class BooksService: BooksServiceProtocol {
|
|
private let client: APIClientProtocol
|
|
|
|
init(client: APIClientProtocol) {
|
|
self.client = client
|
|
}
|
|
|
|
func searchByTitle(_ title: String, locales: String = "tr,en") async throws -> [BookRemote] {
|
|
let response: BookSearchResponse = try await client.get(
|
|
path: "api/books/title",
|
|
queryItems: [
|
|
.init(name: "title", value: title),
|
|
.init(name: "locales", value: locales)
|
|
],
|
|
token: nil
|
|
)
|
|
return response.items
|
|
}
|
|
|
|
func searchByISBN(_ isbn: String, locales: String = "tr,en") async throws -> [BookRemote] {
|
|
let response: BookSearchResponse = try await client.get(
|
|
path: "api/books/isbn/\(isbn)",
|
|
queryItems: [
|
|
.init(name: "locales", value: locales),
|
|
.init(name: "withGemini", value: "false")
|
|
],
|
|
token: nil
|
|
)
|
|
return response.items
|
|
}
|
|
|
|
func filter(title: String, year: String, locales: String = "tr,en") async throws -> [BookRemote] {
|
|
let response: BookSearchResponse = try await client.get(
|
|
path: "api/books/filter",
|
|
queryItems: [
|
|
.init(name: "title", value: title),
|
|
.init(name: "published", value: year),
|
|
.init(name: "locales", value: locales)
|
|
],
|
|
token: nil
|
|
)
|
|
return response.items
|
|
}
|
|
}
|