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.

155 lines
4.9 KiB

6 years ago
6 years ago
  1. //
  2. // RegisterInteractor.swift
  3. // GMERemittance
  4. //
  5. // Created by gme_2 on 10/09/2018.
  6. //Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved.
  7. //
  8. import Foundation
  9. import FirebaseInstanceID
  10. class RegisterInteractor {
  11. // MARK: Properties
  12. weak var output: RegisterInteractorOutput?
  13. private let service: RegisterServiceType
  14. // MARK: Initialization
  15. init(service: RegisterServiceType) {
  16. self.service = service
  17. }
  18. private func isValidPasword(password: String, confirmPassword: String) -> (isValid: Bool, error: String) {
  19. var error = ""
  20. var isValid = true
  21. // >= 9, 1 special character, 1 number
  22. func isValidLength() -> Bool {
  23. return password.count >= 9
  24. }
  25. func hasNumber() -> Bool {
  26. let characterSet = CharacterSet.init(charactersIn: "1234567890")
  27. return password.rangeOfCharacter(from: characterSet) != nil
  28. }
  29. func hasLetter() -> Bool {
  30. let characterSet = CharacterSet.letters
  31. return password.rangeOfCharacter(from: characterSet) != nil
  32. }
  33. func hasSpecialCharacter() -> Bool {
  34. let characterSet = CharacterSet.alphanumerics
  35. return password.rangeOfCharacter(from: characterSet.inverted) != nil
  36. }
  37. func hasUpperCase() -> Bool {
  38. let characterSet = CharacterSet.uppercaseLetters
  39. return password.rangeOfCharacter(from: characterSet) != nil
  40. }
  41. if password.isEmpty {
  42. error = error + "\n Password cannot be empty"
  43. isValid = false
  44. }else {
  45. if !isValidLength() {
  46. error = error + "\n Password should have at least 9 characters"
  47. isValid = false
  48. return (isValid, error)
  49. }
  50. let validPassword = hasNumber() && hasLetter() && hasSpecialCharacter() && hasUpperCase()
  51. if !validPassword {
  52. isValid = false
  53. error = error + "\n Password should contain at least one symbol, one capital letter and one number"
  54. return (isValid, error)
  55. }
  56. if password != confirmPassword {
  57. error = error + "\n Passwords does not match."
  58. isValid = false
  59. }
  60. }
  61. return (isValid, error)
  62. }
  63. // MARK: Converting entities
  64. private func isValid(userName: String, password: String, confirmPassword: String, dob: String) -> (isValid: Bool, error: Error) {
  65. var error = ""
  66. var isValid = true
  67. // user name
  68. if userName.contains("@") {
  69. if !Utility.isValidEmail(email: userName) {error = error + "Please enter a valid email id"
  70. isValid = false
  71. }
  72. }else {
  73. isValid = true
  74. if ( userName.rangeOfCharacter(from: NSCharacterSet.letters) != nil) {
  75. error = error + "Please enter a valid email id"
  76. isValid = false
  77. }
  78. }
  79. if userName.isEmpty {
  80. error = error + "Please enter a valid email id";
  81. isValid = false
  82. }
  83. let result = self.isValidPasword(password: password, confirmPassword: confirmPassword)
  84. if !result.isValid {
  85. error = error + result.error
  86. isValid = false
  87. }
  88. if dob.isEmpty {
  89. error = error + "\n Please enter a valid date of birth"
  90. isValid = false
  91. }
  92. let _error = NSError.init(domain: "LoginInteractor", code: 0, userInfo: [NSLocalizedDescriptionKey : error])
  93. return (isValid, _error)
  94. }
  95. private func getFcmToken() -> String? {
  96. let token = InstanceID.instanceID().token()
  97. return token
  98. }
  99. }
  100. extension RegisterInteractor: RegisterInteractorInput {
  101. func register(model: RegisterRequestModel) {
  102. let validationResult = self.isValid(userName: model.username ?? "", password: model.password ?? "", confirmPassword: model.confirmPassword ?? "", dob: model.dob ?? "")
  103. if !validationResult.isValid {
  104. self.output?.show(error: validationResult.error)
  105. return
  106. }
  107. model.uuid = Utility.getUUid()
  108. model.appVersion = Utility.getAppVersion()
  109. model.phoneBrand = Utility.getPhoneBrand()
  110. model.phoneOs = Utility.getPhoneOs()
  111. model.osVersion = Utility.getOsVersion()
  112. model.fcmId = self.getFcmToken()
  113. model.clientId = Utility.getCliendId()
  114. self.service.register(params: model.serialize(), success: { (message) in
  115. self.output?.success(message: message ?? "")
  116. }) { (error) in
  117. self.output?.show(error: error)
  118. }
  119. }
  120. }