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.

139 lines
4.0 KiB

6 years ago
  1. //
  2. // FillSignUpCodeViewModel.swift
  3. // GMERemittance
  4. //
  5. // Created by Sujal on 12/11/17.
  6. // Copyright © 2017 Gobal Money Express Co. Ltd. All rights reserved.
  7. //
  8. import Foundation
  9. class FillCodeViewModel: ModelExtension {
  10. private let codeLength: Int = 4
  11. var userId: String?
  12. var signupCode: String?
  13. var recoveryType: String?
  14. var authenticated: Box<Bool?> = Box(nil)
  15. var fillCodeConnectionTimeOut: Box<Bool?> = Box(nil)
  16. var user_id = UserDefaults.standard.object(forKey: "com.gmeremit.username") as? String
  17. }
  18. extension FillCodeViewModel {
  19. /**
  20. To set the code for sign up
  21. - parameter code: secure code
  22. */
  23. func setCode(code: String) {
  24. signupCode = code
  25. }
  26. /**
  27. To set the user id for sign up
  28. - parameter userId: userId
  29. */
  30. func setUserId(userId: String) {
  31. self.userId = userId
  32. }
  33. /**
  34. To set the recoveryType for sign up
  35. - parameter recoveryType: password or device
  36. */
  37. func setRecoveryType(recoveryType: String) {
  38. self.recoveryType = recoveryType
  39. }
  40. /**
  41. To check length of code for sign up
  42. - returns: Bool
  43. */
  44. func checkCodeLength() -> isValid {
  45. guard signupCode?.count == codeLength else {
  46. return .InValid("Code is incomplete")
  47. }
  48. return .Valid
  49. }
  50. }
  51. extension FillCodeViewModel {
  52. /**
  53. Api request fot code validation
  54. */
  55. func authenticate() {
  56. if !Reachability.isConnectedToNetwork() {
  57. self.internetConnection.value = false
  58. } else {
  59. RestApiMananger.sharedInstance.authenticateUser(code: signupCode!, userId: self.userId!) { result in
  60. switch result {
  61. case .success(_):
  62. self.authenticated.value = true
  63. case let .failure(errorJSON):
  64. self.setErrorMessage(message: errorJSON["message"].stringValue)
  65. self.authenticated.value = false
  66. case .updateAccessCode:
  67. return
  68. case .logOutUser():
  69. return
  70. case .timeOut:
  71. self.fillCodeConnectionTimeOut.value = false
  72. }
  73. }
  74. }
  75. }
  76. /**
  77. Api request to change password
  78. */
  79. func enablePasswordChange() {
  80. if !Reachability.isConnectedToNetwork() {
  81. self.internetConnection.value = false
  82. } else {
  83. RestApiMananger.sharedInstance.reAuthenticateUser(code: signupCode!, userId: self.userId!) { result in
  84. switch result {
  85. case .success(_):
  86. self.authenticated.value = true
  87. case let .failure(errorJSON):
  88. self.setErrorMessage(message: errorJSON["message"].stringValue)
  89. self.authenticated.value = false
  90. case .updateAccessCode:
  91. return
  92. case .logOutUser():
  93. return
  94. case .timeOut:
  95. self.fillCodeConnectionTimeOut.value = false
  96. }
  97. }
  98. }
  99. }
  100. /**
  101. Api request for signup code
  102. */
  103. func requestCode() {
  104. if !Reachability.isConnectedToNetwork() {
  105. self.internetConnection.value = false
  106. } else {
  107. RestApiMananger.sharedInstance.requestAnotherCode(type: self.recoveryType!, userId: self.userId!) { result in
  108. switch result {
  109. case .success(_):
  110. self.authenticated.value = nil
  111. case let .failure(errorJSON):
  112. self.setErrorMessage(message: errorJSON["message"].stringValue)
  113. self.authenticated.value = nil
  114. case .updateAccessCode:
  115. return
  116. case .logOutUser():
  117. return
  118. case .timeOut:
  119. self.fillCodeConnectionTimeOut.value = false
  120. }
  121. }
  122. }
  123. }
  124. }