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.

136 lines
4.1 KiB

6 years ago
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. //
  23. // func isValidLength() -> Bool {
  24. // return password.count >= 9
  25. // }
  26. //
  27. // func hasNumber() -> Bool {
  28. // let characterSet = CharacterSet.init(charactersIn: "1234567890")
  29. // return password.rangeOfCharacter(from: characterSet) != nil
  30. // }
  31. //
  32. // func hasLetter() -> Bool {
  33. // let characterSet = CharacterSet.letters
  34. // return password.rangeOfCharacter(from: characterSet) != nil
  35. // }
  36. //
  37. // func hasSpecialCharacter() -> Bool {
  38. // let characterSet = CharacterSet.alphanumerics
  39. // return password.rangeOfCharacter(from: characterSet.inverted) != nil
  40. // }
  41. //
  42. // func hasUpperCase() -> Bool {
  43. // let characterSet = CharacterSet.uppercaseLetters
  44. // return password.rangeOfCharacter(from: characterSet) != nil
  45. // }
  46. //
  47. if password.isEmpty {
  48. error = error + "\n" + "password_empty_error".localized()
  49. isValid = false
  50. }
  51. if confirmPassword.isEmpty {
  52. error = error + "\n" + "password_confirm_empty_error".localized()
  53. isValid = false
  54. }
  55. return (isValid, error)
  56. }
  57. // MARK: Converting entities
  58. private func isValid(userName: String, password: String, confirmPassword: String, dob: String) -> (isValid: Bool, error: Error) {
  59. var error = ""
  60. var isValid = true
  61. // user name
  62. if userName.isEmpty {
  63. error = error + "email_valid_error".localized();
  64. isValid = false
  65. }
  66. if !Utility.isValidEmail(email: userName) {
  67. error = error + "dob_valid_error".localized()
  68. isValid = false
  69. }
  70. let result = self.isValidPasword(password: password, confirmPassword: confirmPassword)
  71. if !result.isValid {
  72. error = error + result.error
  73. isValid = false
  74. }
  75. if dob.isEmpty {
  76. error = error + "\n " + "select_dob_text".localized()
  77. isValid = false
  78. }
  79. let _error = NSError.init(domain: "LoginInteractor", code: 0, userInfo: [NSLocalizedDescriptionKey : error])
  80. return (isValid, _error)
  81. }
  82. private func getFcmToken() -> String? {
  83. let token = InstanceID.instanceID().token()
  84. return token
  85. }
  86. }
  87. extension RegisterInteractor: RegisterInteractorInput {
  88. func register(model: RegisterRequestModel) {
  89. let validationResult = self.isValid(userName: model.username ?? "", password: model.encryptedPassword ?? "", confirmPassword: model.encryptedConfirmPassword ?? "", dob: model.dob ?? "")
  90. if !validationResult.isValid {
  91. self.output?.show(error: validationResult.error)
  92. return
  93. }
  94. model.uuid = Utility.getUUid()
  95. model.appVersion = Utility.getAppVersion()
  96. model.phoneBrand = Utility.getPhoneBrand()
  97. model.phoneOs = Utility.getPhoneOs()
  98. model.osVersion = Utility.getOsVersion()
  99. model.fcmId = self.getFcmToken()
  100. model.clientId = Utility.getCliendId()
  101. self.service.register(params: model.serialize(), success: { (message) in
  102. self.output?.success(message: message ?? "")
  103. }) { (error) in
  104. self.output?.show(error: error)
  105. }
  106. }
  107. }