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.
 
 
 
 

173 lines
5.4 KiB

//
// 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)
}
}
}