Skip to content

Instantly share code, notes, and snippets.

@markst
Created September 1, 2017 15:56
Show Gist options
  • Save markst/549ef294c64b411d990f09bde2a4b124 to your computer and use it in GitHub Desktop.
Save markst/549ef294c64b411d990f09bde2a4b124 to your computer and use it in GitHub Desktop.
import BrightFutures
extension Resource {
func addLinkData<T: Resource>(resources: [T]) -> Future<Self, SpineError> {
let url = SpineSingleton.router.baseURL.appendingPathComponent("/\(self.resourceType)/\(self.id!)/relationships/\(resources.first!.resourceType)")
let payload = try! SpineSingleton.serializer.serializeLinkData(resources)
return performRequest(method: "POST", url: url, payload: payload)
}
func removeLinkData<T: Resource>(resources: [T]) -> Future<Self, SpineError> {
let url = SpineSingleton.router.baseURL.appendingPathComponent("/\(self.resourceType)/\(self.id!)/relationships/\(resources.first!.resourceType)")
let payload = try! SpineSingleton.serializer.serializeLinkData(resources)
return performRequest(method: "DELETE", url: url, payload: payload)
}
}
import SwiftyJSON
extension Resource {
func performRequest(method: String, url:URL, payload:Data? = nil) -> Future<Self, SpineError> {
let promise = Promise<Self, SpineError>()
SpineSingleton.networkClient.request(method: method, url: url, payload: payload) { (statusCode, responseData, networkError) in
if statusCodeIsSuccess(statusCode) {
let response = JSON(data: responseData!)
print("Perform request success: \(response)")
promise.success(self)
} else if let error = networkError {
promise.failure(SpineError.networkError(error))
} else if let safeResponseData = responseData {
do {
let doc = try SpineSingleton.serializer.deserializeData(safeResponseData)
let error = SpineError.serverError(statusCode: statusCode!, apiErrors: doc.errors)
promise.failure(error)
} catch _ {
promise.failure(SpineError.unknownError)
}
}
}
return promise.future
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment