Advertisement
Guest User

Untitled

a guest
Aug 30th, 2017
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 3.78 KB | None | 0 0
  1. extension ServerManager {
  2.     func createTransactionFromReceipt(_ receipt: ReceiptTask, _ completion: @escaping (String)-> Void, error: @escaping (String)-> Void) {
  3.         let parameter = receipt.getParameter()
  4.        
  5.         // "Constants.Network.EndPoint.CreateTransaction" equals "ios/createTransactionFromReceipt"
  6.         self.post(endpoint: Constants.Network.EndPoint.CreateTransaction, parameters: parameter, completion: { (json) in
  7.             let obj = json["success"].stringValue
  8.             completion(obj)
  9.         }, error: error)
  10.     }
  11. }
  12.  
  13. /* --------------------------------- */
  14. // "receipt.getParameter()" method
  15.  
  16. class ReceiptTask {
  17.     var receipt: String
  18.     var userID: String?
  19.     var testReceipt: Bool = true
  20.    
  21.     init(receipt: String) {
  22.         self.receipt = receipt
  23.         if let user = DataManager.shared.getUser() {
  24.             self.userID = user.userID
  25.         }
  26.     }
  27.    
  28.     func getParameter() -> [String: String] {
  29.         var parameter = ["receipt": receipt, "testReceipt": "true"]
  30.         if let _ = userID {
  31.             parameter.updateValue(userID!, forKey: "userID")
  32.         }
  33.        
  34.         return parameter
  35.     }
  36.    
  37. }
  38.  
  39. /* --------------------------------- */
  40. // "self.post" method
  41.  
  42. internal func post(endpoint: String, parameters: Parameter, completion: @escaping SuccessHandler, error: @escaping FailureHandler) {
  43.     request(method: .post, endpoint: endpoint, parameters: parameters, completion: completion, error: error)
  44. }
  45.  
  46.  
  47. /* --------------------------------- */
  48. // request(...) method
  49. private func request(method: HTTPMethod,
  50.                      endpoint: String,
  51.                      parameters: Parameter,
  52.                      completion: @escaping SuccessHandler,
  53.                      error: @escaping FailureHandler) {
  54.  
  55.     var apiUrl = ""
  56.     var parametersForBody = parameters
  57.     if method == .get && parameters != nil {
  58.         // GET request url with params in url
  59.         apiUrl = ApiAddress(endpoint: endpoint, param: parameters).getURLString()
  60.         parametersForBody = nil
  61.     } else {
  62.         // POST request url
  63.         // apiUrl = https://dev-api.enotes.com/api/2.0/?apiKey=108516db726ae161f7ee9365bb79ab81b59133cd
  64.         apiUrl = ApiAddress(endpoint: endpoint).getURLString()
  65.     }
  66.    
  67.     var header: HTTPHeaders = [:]
  68.     if let cookie = DataManager.shared.getSessionCookie() {
  69.         header.updateValue(cookie, forKey: "Cookie")
  70.     }
  71.    
  72.     DataManager.shared.dataRequest = Alamofire.request(apiUrl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)!, method: method, parameters: parametersForBody, encoding: JSONEncoding.default , headers: header)
  73.                 .authenticate(user: "ios", password: "ios")
  74.         .responseJSON { (response:DataResponse<Any>) in
  75.        
  76.         guard response.response != nil else {
  77.             error(Constants.Network.ErrorMessage.UNABLE_LOAD_DATA)
  78.             return
  79.         }
  80.            
  81.         guard let statusCode = response.response?.statusCode else {
  82.             error(Constants.Network.ErrorMessage.NO_HTTP_STATUS_CODE)
  83.             return
  84.         }
  85.  
  86.         switch(statusCode) {
  87.  
  88.         case HttpStatusCode.unauthorized.statusCode:
  89.             //Catch json error
  90.             error(Constants.Network.ErrorMessage.UNAUTHORIZED)
  91.             break
  92.          
  93.         case HttpStatusCode.ok.statusCode,
  94.              HttpStatusCode.accepted.statusCode,
  95.              HttpStatusCode.created.statusCode:
  96.                 let json = JSON(data: response.data!)
  97.                 completion(json)
  98.             //TODO: catch possible "errors" json key-value
  99.                 break;
  100.          
  101.         default:
  102.            
  103.             let json = JSON(data: response.data!)
  104.             if !json.isEmpty && json["errors"].exists() {
  105.                 let err = ServerError(json: json)
  106.                 //need to test
  107.                 error(err.errors[0])
  108.                 break;
  109.             }
  110.         }
  111.     }
  112. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement