// // FillSignUpCodeViewModel.swift // GMERemittance // // Created by Sujal on 12/11/17. // Copyright © 2017 Gobal Money Express Co. Ltd. All rights reserved. // import Foundation class FillCodeViewModel: ModelExtension { private let codeLength: Int = 4 var userId: String? var signupCode: String? var recoveryType: String? var authenticated: Box = Box(nil) var fillCodeConnectionTimeOut: Box = Box(nil) var user_id = UserDefaults.standard.object(forKey: "com.gmeremit.username") as? String } extension FillCodeViewModel { /** To set the code for sign up - parameter code: secure code */ func setCode(code: String) { signupCode = code } /** To set the user id for sign up - parameter userId: userId */ func setUserId(userId: String) { self.userId = userId } /** To set the recoveryType for sign up - parameter recoveryType: password or device */ func setRecoveryType(recoveryType: String) { self.recoveryType = recoveryType } /** To check length of code for sign up - returns: Bool */ func checkCodeLength() -> isValid { guard signupCode?.count == codeLength else { return .InValid("Code is incomplete") } return .Valid } } extension FillCodeViewModel { /** Api request fot code validation */ func authenticate() { if !Reachability.isConnectedToNetwork() { self.internetConnection.value = false } else { RestApiMananger.sharedInstance.authenticateUser(code: signupCode!, userId: self.userId!) { result in switch result { case .success(_): self.authenticated.value = true case let .failure(errorJSON): self.setErrorMessage(message: errorJSON["message"].stringValue) self.authenticated.value = false case .updateAccessCode: return case .logOutUser(): return case .timeOut: self.fillCodeConnectionTimeOut.value = false } } } } /** Api request to change password */ func enablePasswordChange() { if !Reachability.isConnectedToNetwork() { self.internetConnection.value = false } else { RestApiMananger.sharedInstance.reAuthenticateUser(code: signupCode!, userId: self.userId!) { result in switch result { case .success(_): self.authenticated.value = true case let .failure(errorJSON): self.setErrorMessage(message: errorJSON["message"].stringValue) self.authenticated.value = false case .updateAccessCode: return case .logOutUser(): return case .timeOut: self.fillCodeConnectionTimeOut.value = false } } } } /** Api request for signup code */ func requestCode() { if !Reachability.isConnectedToNetwork() { self.internetConnection.value = false } else { RestApiMananger.sharedInstance.requestAnotherCode(type: self.recoveryType!, userId: self.userId!) { result in switch result { case .success(_): self.authenticated.value = nil case let .failure(errorJSON): self.setErrorMessage(message: errorJSON["message"].stringValue) self.authenticated.value = nil case .updateAccessCode: return case .logOutUser(): return case .timeOut: self.fillCodeConnectionTimeOut.value = false } } } } }