Last active
August 10, 2020 02:39
-
-
Save moaible/54538dd8e23273994dbb8c7270db76d2 to your computer and use it in GitHub Desktop.
Swift - Hydra with AmplifyAPI
This file contains hidden or 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
| import Foundation | |
| import Amplify | |
| import Hydra | |
| enum RequestOperation<M: Model> { | |
| case create(_ model: M) | |
| case update(_ model: M, where: QueryPredicate? = nil) | |
| case delete(_ model: M, where: QueryPredicate? = nil) | |
| } | |
| enum RequestOperationByQueryGet<M: Model> { | |
| case get(_ schemaType: M.Type, byId: String) | |
| } | |
| enum RequestOperationByQueryList<M: Model> { | |
| case getAll(_ schemaType: M.Type, where: QueryPredicate? = nil) | |
| } | |
| func requestByGraphQL<M: Model>( | |
| _ requestOperation: RequestOperation<M>, | |
| _ listener: GraphQLOperation<M>.ResultListener? = nil) -> Promise<M> | |
| { | |
| return Promise { (resolve, reject, status) in | |
| switch requestOperation { | |
| case .create(let model): | |
| _ = Amplify.API.mutate(request: .create(model)) { event in | |
| switch event { | |
| case .success(let result): | |
| switch result { | |
| case .success(let createdModel): | |
| resolve(createdModel) | |
| case .failure(let error): | |
| reject(error) | |
| } | |
| case .failure(let error): | |
| reject(error) | |
| } | |
| } | |
| case .update(let model, where: let predicate): | |
| _ = Amplify.API.mutate(request: .update(model, where: predicate)) { event in | |
| switch event { | |
| case .success(let result): | |
| switch result { | |
| case .success(let updatedModel): | |
| resolve(updatedModel) | |
| case .failure(let error): | |
| reject(error) | |
| } | |
| case .failure(let error): | |
| reject(error) | |
| } | |
| } | |
| case .delete(let model, where: let predicate): | |
| _ = Amplify.API.mutate(request: .delete(model, where: predicate)) { event in | |
| switch event { | |
| case .success(let result): | |
| switch result { | |
| case .success(let updatedModel): | |
| resolve(updatedModel) | |
| case .failure(let error): | |
| reject(error) | |
| } | |
| case .failure(let error): | |
| reject(error) | |
| } | |
| } | |
| } | |
| } | |
| } | |
| func requestByGraphQL<M: Model>( | |
| _ requestOperation: RequestOperationByQueryGet<M>, | |
| _ listener: GraphQLOperation<M>.ResultListener? = nil) -> Promise<M?> | |
| { | |
| return Promise { (resolve, reject, status) in | |
| switch requestOperation { | |
| case .get(let schemeType, byId: let id): | |
| _ = Amplify.API.query(request: .get(schemeType, byId: id)) { event in | |
| switch event { | |
| case .success(let result): | |
| switch result { | |
| case .success(let items): | |
| resolve(items) | |
| case .failure(let error): | |
| reject(error) | |
| } | |
| case .failure(let error): | |
| reject(error) | |
| } | |
| } | |
| } | |
| } | |
| } | |
| func requestByGraphQL<M: Model>( | |
| _ requestOperation: RequestOperationByQueryList<M>, | |
| _ listener: GraphQLOperation<M>.ResultListener? = nil) -> Promise<[M]> | |
| { | |
| return Promise { (resolve, reject, status) in | |
| switch requestOperation { | |
| case .getAll(let schemeType, where: let predicate): | |
| _ = Amplify.API.query(request: .list(schemeType, where: predicate)) { event in | |
| switch event { | |
| case .success(let result): | |
| switch result { | |
| case .success(let items): | |
| resolve(items) | |
| case .failure(let error): | |
| reject(error) | |
| } | |
| case .failure(let error): | |
| reject(error) | |
| } | |
| } | |
| } | |
| } | |
| } |
This file contains hidden or 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
| requestByGraphQL(.getAll(Todo.self)).then { items in | |
| print("get all items: \(items)") | |
| } | |
| requestByGraphQL(.get(Todo.self, byId: "862B0BBE-18A7-4549-BC69-42D6D86CE3D8")).then { item in | |
| if let item = item { | |
| print("get item: \(item)") | |
| } else { | |
| print("not found item") | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment