You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

64 lines
1.8 KiB

  1. //
  2. // DataRequestExtension.swift
  3. // GMERemittance
  4. //
  5. // Created by gme_2 on 22/08/2018.
  6. // Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved.
  7. //
  8. import Foundation
  9. import Alamofire
  10. import ObjectMapper
  11. import SwiftyJSON
  12. enum GMEResponseErrorCode: Int {
  13. case timeOut = 0
  14. case failure
  15. case unknown
  16. case deleted
  17. }
  18. enum GmeResponseOperationStatusCode: String {
  19. case successfull = "Operation Successfull"
  20. }
  21. extension DataRequest {
  22. func handle<T: Mappable>(
  23. success: @escaping (T) -> Void,
  24. failure: @escaping (Error) -> Void
  25. ) {
  26. self.validate().responseJSON { (response) -> Void in
  27. switch response.result {
  28. case .success(let value):
  29. let json = JSON(value)
  30. if let model: T = json.map() {
  31. success(model)
  32. } else if (response.response?.statusCode ?? -1) == 204 {
  33. let error = self.makeError(
  34. message: "Response could not be mapped",
  35. code: GMEResponseErrorCode.unknown.rawValue
  36. )
  37. failure(error)
  38. } else {
  39. let error = self.makeError(
  40. message: GmeResponseOperationStatusCode.successfull.rawValue,
  41. code: GMEResponseErrorCode.deleted.rawValue
  42. )
  43. failure(error)
  44. }
  45. case .failure(let error):
  46. debugPrint("DataRequest Error: \(error.localizedDescription)")
  47. if (response.response?.statusCode ?? -1) == 401 {
  48. MainWireframe.logoutWarningAlert(message: "You have logged in from another device.")
  49. return
  50. }
  51. failure(error)
  52. }
  53. }
  54. }
  55. private func makeError(message: String, code: Int) -> Error {
  56. let errorInfo: [String: Any]? = [NSLocalizedDescriptionKey: message]
  57. return NSError.init(domain: "Network", code: code, userInfo: errorInfo)
  58. }
  59. }