// // RegisterInteractor.swift // GMERemittance // // Created by gme_2 on 10/09/2018. //Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved. // import Foundation import FirebaseInstanceID class RegisterInteractor { // MARK: Properties weak var output: RegisterInteractorOutput? private let service: RegisterServiceType // MARK: Initialization init(service: RegisterServiceType) { self.service = service } private func getAppVersion () -> String? { let version = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String return version } private func getOsVersion() -> String { let version = UIDevice.current.systemVersion return version } private func getPhoneBrand() -> String { let phoneName = UIDevice.current.model return phoneName } private func getPhoneOs() -> String { let os = UIDevice.current.systemName return os } private func getUUid() -> String? { let uuid = UIDevice.current.identifierForVendor?.uuidString return uuid } private func getFcmToken() -> String? { let token = InstanceID.instanceID().token() return token } private func getCliendId() -> String { return "172017F9EC11222E8107142733" } // func hasOnlyAlphanumeric() -> (String) -> Bool { // let alphaCharacterSet = CharacterSet.alphanumerics // return {text in // text.rangeOfCharacter(from: alphaCharacterSet) != nil // } // } // // func hasOnlyLettersWithSpaces(_ text: String) -> Bool { // let alphaCharacterSet = CharacterSet.letters // let spaceCharacterSet = CharacterSet.init(charactersIn: " ") // let alphaWithSpacesCharacterSet = alphaCharacterSet.union(spaceCharacterSet) // // return text.rangeOfCharacter(from: alphaWithSpacesCharacterSet) != nil // } private func isValidPasword(password: String, confirmPassword: String) -> (isValid: Bool, error: String) { var error = "" var isValid = true // >= 9, 1 special character, 1 number func isValidLength() -> Bool { return password.count >= 9 } func hasNumber() -> Bool { let characterSet = CharacterSet.init(charactersIn: "1234567890") return password.rangeOfCharacter(from: characterSet) != nil } func hasLetter() -> Bool { let characterSet = CharacterSet.letters return password.rangeOfCharacter(from: characterSet) != nil } func hasSpecialCharacter() -> Bool { let characterSet = CharacterSet.alphanumerics return password.rangeOfCharacter(from: characterSet.inverted) != nil } if password.isEmpty { error = error + "\n Password field is required." isValid = false }else { if !isValidLength() { error = error + "\n Password should be greator than 8 character." isValid = false } let validPassword = hasNumber() && hasLetter() && hasSpecialCharacter() if !validPassword { isValid = false error = error + "\n Passwords should contain at least 1 number, 1 letter and 1 special character" } if password != confirmPassword { error = error + "\n Passwords do not match." } } return (isValid, error) } // MARK: Converting entities private func isValid(userName: String, password: String, confirmPassword: String, dob: String) -> (isValid: Bool, error: Error){ var error = "" var isValid = true // user name if userName.isEmpty { error = error + "Username field is required."; isValid = false } let result = self.isValidPasword(password: password, confirmPassword: confirmPassword) if !result.isValid { error = error + result.error isValid = false } if dob.isEmpty { error = error + "\n Date Of Birth field is required."; isValid = false } let _error = NSError.init(domain: "LoginInteractor", code: 0, userInfo: [NSLocalizedDescriptionKey : error]) return (isValid, _error) } } extension RegisterInteractor: RegisterInteractorInput { func register(model: RegisterRequestModel) { let validationResult = self.isValid(userName: model.username ?? "", password: model.password ?? "", confirmPassword: model.confirmPassword ?? "", dob: model.dob ?? "") if !validationResult.isValid { self.output?.show(error: validationResult.error) return } model.uuid = self.getUUid() model.appVersion = self.getAppVersion() model.phoneBrand = self.getPhoneBrand() model.phoneOs = self.getPhoneOs() model.osVersion = self.getOsVersion() model.fcmId = self.getFcmToken() model.clientId = self.getCliendId() self.service.register(params: model.serialize(), success: { (message) in self.output?.success(message: message ?? "") }) { (error) in self.output?.show(error: error) } } }