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.

74 lines
1.9 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. print(json)
  31. if let model: T = json.map() {
  32. success(model)
  33. } else if (response.response?.statusCode ?? -1) == 204 {
  34. let error = self.makeError(
  35. message: "Response could not be mapped",
  36. code: GMEResponseErrorCode.unknown.rawValue
  37. )
  38. failure(error)
  39. } else {
  40. let error = self.makeError(
  41. message: GmeResponseOperationStatusCode.successfull.rawValue,
  42. code: GMEResponseErrorCode.deleted.rawValue
  43. )
  44. failure(error)
  45. }
  46. case .failure(let error):
  47. debugPrint("DataRequest Error: \(error.localizedDescription)")
  48. if (response.response?.statusCode ?? -1) == 401 {
  49. MainWireframe.logoutWarningAlert(message: "You have logged in from another device.")
  50. return
  51. }
  52. failure(error)
  53. }
  54. }
  55. }
  56. private func makeError(message: String, code: Int) -> Error {
  57. let errorInfo: [String: Any]? = [NSLocalizedDescriptionKey: message]
  58. return NSError.init(domain: "Network", code: code, userInfo: errorInfo)
  59. }
  60. }
  61. extension Request {
  62. public func debugLog() -> Self {
  63. #if DEBUG
  64. debugPrint(self)
  65. #endif
  66. return self
  67. }
  68. }