Skip to content

Instantly share code, notes, and snippets.

@thexande
Last active December 17, 2018 00:04
Show Gist options
  • Save thexande/de01f9a4646c0761b77a27efe0792479 to your computer and use it in GitHub Desktop.
Save thexande/de01f9a4646c0761b77a27efe0792479 to your computer and use it in GitHub Desktop.
extension World {
public final class Store: WorldStoreInterface {
private let client: ApolloClientInterface
public init(client: ApolloClientInterface) {
self.client = client
}
public func fetchCountry(code: String,
cachePolicy: CachePolicy = .fetchIgnoringCacheData,
completion: @escaping ((Result) -> Void)) {
let query = CountryQuery(code: code)
let queue = DispatchQueue.global(qos: .default)
let resultHandler: OperationResultHandler<CountryQuery> = { (result, error) in
guard error == nil else {
completion(.failure(.network))
return
}
guard let country = result?.data?.country.flatMap(World.CountryDetail.init) else {
completion(.failure(.parsing))
return
}
completion(.success(country))
}
client.fetch(query: query,
cachePolicy: cachePolicy,
queue: queue,
resultHandler: resultHandler)
}
public func fetchAllCountries(cachePolicy: CachePolicy = .fetchIgnoringCacheData,
completion: @escaping ((Result<[CountryLite], World.StoreError>) -> Void)) {
let query = CountriesQuery()
let queue = DispatchQueue.global(qos: .default)
let resultHandler: OperationResultHandler<CountriesQuery> = { (result, error) in
guard error == nil else {
completion(.failure(.network))
return
}
guard let countries = result?.data?.countries?.compactMap(CountryLite.init) else {
completion(.failure(.parsing))
return
}
completion(.success(countries))
}
client.fetch(query: query,
cachePolicy: cachePolicy,
queue: queue,
resultHandler: resultHandler)
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment