Showing
10 changed files
with
164 additions
and
143 deletions
| @@ -36,37 +36,5 @@ | @@ -36,37 +36,5 @@ | ||
| 36 | landmarkType = "7"> | 36 | landmarkType = "7"> |
| 37 | </BreakpointContent> | 37 | </BreakpointContent> |
| 38 | </BreakpointProxy> | 38 | </BreakpointProxy> |
| 39 | - <BreakpointProxy | ||
| 40 | - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> | ||
| 41 | - <BreakpointContent | ||
| 42 | - uuid = "B21C0B63-1820-47D9-863A-585E52771DA2" | ||
| 43 | - shouldBeEnabled = "Yes" | ||
| 44 | - ignoreCount = "0" | ||
| 45 | - continueAfterRunningActions = "No" | ||
| 46 | - filePath = "InterQR-Internship/Modules/OneTimePasswordScreen/View/OTPView.swift" | ||
| 47 | - startingColumnNumber = "9223372036854775807" | ||
| 48 | - endingColumnNumber = "9223372036854775807" | ||
| 49 | - startingLineNumber = "94" | ||
| 50 | - endingLineNumber = "94" | ||
| 51 | - landmarkName = "didTextFieldChanged(_:)" | ||
| 52 | - landmarkType = "7"> | ||
| 53 | - </BreakpointContent> | ||
| 54 | - </BreakpointProxy> | ||
| 55 | - <BreakpointProxy | ||
| 56 | - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> | ||
| 57 | - <BreakpointContent | ||
| 58 | - uuid = "7B1AC08C-6FFC-42BD-8C5C-4D6CE5CBD70C" | ||
| 59 | - shouldBeEnabled = "Yes" | ||
| 60 | - ignoreCount = "0" | ||
| 61 | - continueAfterRunningActions = "No" | ||
| 62 | - filePath = "InterQR-Internship/Modules/OneTimePasswordScreen/ViewController/CodeVerificationViewController.swift" | ||
| 63 | - startingColumnNumber = "9223372036854775807" | ||
| 64 | - endingColumnNumber = "9223372036854775807" | ||
| 65 | - startingLineNumber = "145" | ||
| 66 | - endingLineNumber = "145" | ||
| 67 | - landmarkName = "didFullCodeCompletion(_:)" | ||
| 68 | - landmarkType = "7"> | ||
| 69 | - </BreakpointContent> | ||
| 70 | - </BreakpointProxy> | ||
| 71 | </Breakpoints> | 39 | </Breakpoints> |
| 72 | </Bucket> | 40 | </Bucket> |
| @@ -9,7 +9,10 @@ import Foundation | @@ -9,7 +9,10 @@ import Foundation | ||
| 9 | import Alamofire | 9 | import Alamofire |
| 10 | 10 | ||
| 11 | class AuthService { | 11 | class AuthService { |
| 12 | - static let share = AuthService() | 12 | + static let shared = AuthService() |
| 13 | + | ||
| 14 | + private init() { | ||
| 15 | + } | ||
| 13 | 16 | ||
| 14 | var networkToken: String? { | 17 | var networkToken: String? { |
| 15 | get { | 18 | get { |
| @@ -87,10 +90,11 @@ class AuthService { | @@ -87,10 +90,11 @@ class AuthService { | ||
| 87 | } | 90 | } |
| 88 | 91 | ||
| 89 | func loginRequest(model: LoginRequestModel, success: @escaping LoginWebServiceResponse, fail: @escaping FailedHandler) { | 92 | func loginRequest(model: LoginRequestModel, success: @escaping LoginWebServiceResponse, fail: @escaping FailedHandler) { |
| 90 | - let headers = ["Authorization": "Bearer \(self.networkToken ?? "")"] | 93 | + let interceptor = InterQrRequestInterceptor() |
| 94 | + | ||
| 91 | let params = ["device_uuid": model.deviceUUID] as [String: Any] | 95 | let params = ["device_uuid": model.deviceUUID] as [String: Any] |
| 92 | 96 | ||
| 93 | - AF.request(Constants.baseURL + APIRoutes.loginURL.urlString, method: .post, parameters: params, encoding: JSONEncoding.default, headers: HTTPHeaders(headers), interceptor: nil).responseDecodable(of: LoginResponseModel.self ) { response in | 97 | + AF.request(Constants.baseURL + APIRoutes.loginURL.urlString, method: .post, parameters: params, encoding: JSONEncoding.default, interceptor: interceptor).responseDecodable(of: LoginResponseModel.self ) { response in |
| 94 | 98 | ||
| 95 | switch response.result { | 99 | switch response.result { |
| 96 | case .failure(let error) : | 100 | case .failure(let error) : |
| @@ -102,10 +106,10 @@ class AuthService { | @@ -102,10 +106,10 @@ class AuthService { | ||
| 102 | } | 106 | } |
| 103 | 107 | ||
| 104 | func logoutRequest(model: LogoutRequestModel, completion: @escaping LogoutWebServiceResponse, fail: @escaping FailedHandler) { | 108 | func logoutRequest(model: LogoutRequestModel, completion: @escaping LogoutWebServiceResponse, fail: @escaping FailedHandler) { |
| 105 | - let headers = ["Authorization": "Bearer \(self.networkToken ?? "")"] | 109 | + let interceptor = InterQrRequestInterceptor() |
| 106 | let params = ["device_uuid": model.deviceUUID] as [String: Any] | 110 | let params = ["device_uuid": model.deviceUUID] as [String: Any] |
| 107 | 111 | ||
| 108 | - AF.request(Constants.baseURL + APIRoutes.logoutURL.urlString, method: .post, parameters: params, encoding: JSONEncoding.default, headers: HTTPHeaders(headers), interceptor: nil).responseDecodable(of: LogoutResponseModel.self ) { response in | 112 | + AF.request(Constants.baseURL + APIRoutes.logoutURL.urlString, method: .post, parameters: params, encoding: JSONEncoding.default, interceptor: interceptor).responseDecodable(of: LogoutResponseModel.self ) { response in |
| 109 | 113 | ||
| 110 | if let error = response.error { | 114 | if let error = response.error { |
| 111 | fail(error) | 115 | fail(error) |
| @@ -117,3 +121,16 @@ class AuthService { | @@ -117,3 +121,16 @@ class AuthService { | ||
| 117 | } | 121 | } |
| 118 | } | 122 | } |
| 119 | } | 123 | } |
| 124 | + | ||
| 125 | +class InterQrRequestInterceptor: RequestInterceptor { | ||
| 126 | + func adapt(_ urlRequest: URLRequest, for session: Session, completion: @escaping (Result<URLRequest, Error>) -> Void) { | ||
| 127 | + var urlRequest = urlRequest | ||
| 128 | +// let headers = ["Authorization": "Bearer \(self.networkToken ?? "")"] | ||
| 129 | +// let params = ["device_uuid": model.deviceUUID] as [String: Any] | ||
| 130 | + if let token = AuthService.shared.networkToken { | ||
| 131 | + urlRequest.setValue("Bearer \(token)", forHTTPHeaderField: "Authorization") | ||
| 132 | + } | ||
| 133 | +// if let deviceUUID = | ||
| 134 | + completion(.success(urlRequest)) | ||
| 135 | + } | ||
| 136 | +} |
| @@ -11,11 +11,8 @@ import ContactsUI | @@ -11,11 +11,8 @@ import ContactsUI | ||
| 11 | class AddResidentsViewController: UIViewController { | 11 | class AddResidentsViewController: UIViewController { |
| 12 | var isKeyboardAppear = false | 12 | var isKeyboardAppear = false |
| 13 | 13 | ||
| 14 | - weak var delegate: ResidentSavable? | ||
| 15 | - | ||
| 16 | - var contact = ContactPickerViewController() | ||
| 17 | var mainView = AddResidentsView() | 14 | var mainView = AddResidentsView() |
| 18 | - | 15 | + weak var delegate: ResidentSavable? |
| 19 | var closeTap: UITapGestureRecognizer? | 16 | var closeTap: UITapGestureRecognizer? |
| 20 | 17 | ||
| 21 | override func loadView() { | 18 | override func loadView() { |
| @@ -41,7 +41,6 @@ extension HomeViewController: UITableViewDelegate, UITableViewDataSource { | @@ -41,7 +41,6 @@ extension HomeViewController: UITableViewDelegate, UITableViewDataSource { | ||
| 41 | 41 | ||
| 42 | func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { | 42 | func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { |
| 43 | guard let cell = tableView.dequeueReusableCell(withIdentifier: HomeTableViewCell.id, for: indexPath) as? HomeTableViewCell else { return UITableViewCell() } | 43 | guard let cell = tableView.dequeueReusableCell(withIdentifier: HomeTableViewCell.id, for: indexPath) as? HomeTableViewCell else { return UITableViewCell() } |
| 44 | -// cell.configureWithItem(doors[indexPath.row]) | ||
| 45 | return cell | 44 | return cell |
| 46 | } | 45 | } |
| 47 | 46 |
| @@ -80,7 +80,6 @@ class CodeVerificationView: UIView { | @@ -80,7 +80,6 @@ class CodeVerificationView: UIView { | ||
| 80 | let spinner: UIActivityIndicatorView = { | 80 | let spinner: UIActivityIndicatorView = { |
| 81 | var obj = UIActivityIndicatorView(style: .large) | 81 | var obj = UIActivityIndicatorView(style: .large) |
| 82 | obj.hidesWhenStopped = true | 82 | obj.hidesWhenStopped = true |
| 83 | - | ||
| 84 | return obj | 83 | return obj |
| 85 | }() | 84 | }() |
| 86 | 85 |
InterQR-Internship/Modules/OneTimePasswordScreen/ViewController/CodeVerificationViewController.swift
| @@ -9,9 +9,8 @@ import UIKit | @@ -9,9 +9,8 @@ import UIKit | ||
| 9 | 9 | ||
| 10 | class CodeVerificationViewController: UIViewController { | 10 | class CodeVerificationViewController: UIViewController { |
| 11 | var isKeyboardAppear = false | 11 | var isKeyboardAppear = false |
| 12 | - | 12 | + var verifyMessage: String? |
| 13 | private let mainView = CodeVerificationView() | 13 | private let mainView = CodeVerificationView() |
| 14 | - private let networkManager = AuthService() | ||
| 15 | 14 | ||
| 16 | override func loadView() { | 15 | override func loadView() { |
| 17 | view = mainView | 16 | view = mainView |
| @@ -23,7 +22,7 @@ class CodeVerificationViewController: UIViewController { | @@ -23,7 +22,7 @@ class CodeVerificationViewController: UIViewController { | ||
| 23 | 22 | ||
| 24 | private func initViewController() { | 23 | private func initViewController() { |
| 25 | mainView.otpView.delegate = self | 24 | mainView.otpView.delegate = self |
| 26 | - mainView.backButton.addTarget(self, action: #selector(didDismissVC), for: .touchUpInside) | 25 | + mainView.backButton.addTarget(self, action: #selector(didTapBackButton), for: .touchUpInside) |
| 27 | mainView.verifyButton.addTarget(self, action: #selector(didTapVerifyButton), for: .touchUpInside) | 26 | mainView.verifyButton.addTarget(self, action: #selector(didTapVerifyButton), for: .touchUpInside) |
| 28 | 27 | ||
| 29 | NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow(notification:)), name: UIResponder.keyboardWillShowNotification, object: nil) | 28 | NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow(notification:)), name: UIResponder.keyboardWillShowNotification, object: nil) |
| @@ -35,36 +34,40 @@ class CodeVerificationViewController: UIViewController { | @@ -35,36 +34,40 @@ class CodeVerificationViewController: UIViewController { | ||
| 35 | NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardWillHideNotification, object: nil) | 34 | NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardWillHideNotification, object: nil) |
| 36 | } | 35 | } |
| 37 | 36 | ||
| 38 | - func networkingVerify() { | ||
| 39 | - guard let verifyModel = verifyModelFilling() else { return } | ||
| 40 | - AuthService.share.verifyRequest(model: verifyModel) { response in | 37 | + func verificationRequestProcessing() { |
| 38 | + self.mainView.spinner.startAnimating() | ||
| 39 | + guard let verifyModel = getVerifyModel() else { return } | ||
| 40 | + AuthService.shared.verifyRequest(model: verifyModel) { response in | ||
| 41 | print("3️⃣✅\(response.data)") | 41 | print("3️⃣✅\(response.data)") |
| 42 | print("\(response.message)✅") | 42 | print("\(response.message)✅") |
| 43 | - self.networkingLogin() | ||
| 44 | - self.mainView.spinner.startAnimating() | 43 | + self.loginRequestProcessing() |
| 45 | } fail: { error in | 44 | } fail: { error in |
| 45 | + self.mainView.spinner.stopAnimating() | ||
| 46 | print("3️⃣\(error)") | 46 | print("3️⃣\(error)") |
| 47 | self.errorProcessing() | 47 | self.errorProcessing() |
| 48 | } | 48 | } |
| 49 | } | 49 | } |
| 50 | 50 | ||
| 51 | - func networkingLogin() { | ||
| 52 | - guard let loginModel = loginModelFilling() else { return } | ||
| 53 | - AuthService.share.loginRequest(model: loginModel) { response in | 51 | + func loginRequestProcessing() { |
| 52 | + guard let loginModel = getLoginModel() else { return } | ||
| 53 | + AuthService.shared.loginRequest(model: loginModel) { response in | ||
| 54 | print("4️⃣\(String(describing: response.message))4️⃣") | 54 | print("4️⃣\(String(describing: response.message))4️⃣") |
| 55 | - self.errorProcessing() | 55 | + self.verifyMessage = response.message |
| 56 | + self.loginDataProcessing() | ||
| 56 | } fail: { error in | 57 | } fail: { error in |
| 58 | + self.mainView.spinner.stopAnimating() | ||
| 59 | + self.errorProcessing() | ||
| 57 | print("4️⃣⛔️\(error)⛔️") | 60 | print("4️⃣⛔️\(error)⛔️") |
| 58 | } | 61 | } |
| 59 | } | 62 | } |
| 60 | 63 | ||
| 61 | - func verifyModelFilling() -> VerifyRequestModel? { | 64 | + func getVerifyModel() -> VerifyRequestModel? { |
| 62 | let email = "test@interqr.com" | 65 | let email = "test@interqr.com" |
| 63 | guard let code = mainView.otpView.code else { return nil } | 66 | guard let code = mainView.otpView.code else { return nil } |
| 64 | return VerifyRequestModel(emailOrNumber: email, code: code, secondAuthToken: "asdas") | 67 | return VerifyRequestModel(emailOrNumber: email, code: code, secondAuthToken: "asdas") |
| 65 | } | 68 | } |
| 66 | 69 | ||
| 67 | - func loginModelFilling() -> LoginRequestModel? { | 70 | + func getLoginModel() -> LoginRequestModel? { |
| 68 | guard let deviceUUID = UIDevice.current.identifierForVendor?.uuidString else { | 71 | guard let deviceUUID = UIDevice.current.identifierForVendor?.uuidString else { |
| 69 | return nil | 72 | return nil |
| 70 | } | 73 | } |
| @@ -74,7 +77,7 @@ class CodeVerificationViewController: UIViewController { | @@ -74,7 +77,7 @@ class CodeVerificationViewController: UIViewController { | ||
| 74 | //MARK: - Targets | 77 | //MARK: - Targets |
| 75 | extension CodeVerificationViewController { | 78 | extension CodeVerificationViewController { |
| 76 | @objc private func didTapVerifyButton() { | 79 | @objc private func didTapVerifyButton() { |
| 77 | - networkingVerify() | 80 | + verificationRequestProcessing() |
| 78 | } | 81 | } |
| 79 | 82 | ||
| 80 | private func showHomeVC() { | 83 | private func showHomeVC() { |
| @@ -82,25 +85,36 @@ extension CodeVerificationViewController { | @@ -82,25 +85,36 @@ extension CodeVerificationViewController { | ||
| 82 | navigationController?.pushViewController(viewController, animated: true) | 85 | navigationController?.pushViewController(viewController, animated: true) |
| 83 | } | 86 | } |
| 84 | 87 | ||
| 88 | + private func loginDataProcessing() { | ||
| 89 | + self.mainView.spinner.stopAnimating() | ||
| 90 | + self.showHomeVC() | ||
| 91 | + } | ||
| 92 | + | ||
| 85 | private func errorProcessing() { | 93 | private func errorProcessing() { |
| 86 | guard let code = mainView.otpView.code else { return } | 94 | guard let code = mainView.otpView.code else { return } |
| 95 | + | ||
| 87 | if code.count < 4 { | 96 | if code.count < 4 { |
| 88 | let alert = UIAlertController(title: "❌", message: "Enter all fields", preferredStyle: .alert) | 97 | let alert = UIAlertController(title: "❌", message: "Enter all fields", preferredStyle: .alert) |
| 89 | alert.addAction(UIAlertAction(title: "Close", style: .cancel, handler: nil)) | 98 | alert.addAction(UIAlertAction(title: "Close", style: .cancel, handler: nil)) |
| 90 | present(alert, animated: true, completion: nil) | 99 | present(alert, animated: true, completion: nil) |
| 100 | + } else if verifyMessage != "OK" { | ||
| 101 | + let alert = UIAlertController(title: "Wrong password", message: "", preferredStyle: .alert) | ||
| 102 | + alert.addAction(UIAlertAction(title: "Try again", style: .cancel, handler: { action in | ||
| 103 | + self.mainView.otpView.isError.toggle() | ||
| 104 | + self.mainView.errorAlertLabel.isHidden = false | ||
| 105 | + self.mainView.otpView.textField.becomeFirstResponder() | ||
| 106 | + })) | ||
| 107 | + present(alert, animated: true, completion: nil) | ||
| 91 | } else { | 108 | } else { |
| 92 | - if code != "8327" { | ||
| 93 | - mainView.otpView.isError.toggle() | ||
| 94 | - mainView.errorAlertLabel.isHidden = false | ||
| 95 | - mainView.otpView.textField.becomeFirstResponder() | ||
| 96 | - } else { | ||
| 97 | - self.mainView.spinner.stopAnimating() | ||
| 98 | - self.showHomeVC() | ||
| 99 | - } | 109 | + let alert = UIAlertController(title: "Network technical issues", message: "", preferredStyle: .alert) |
| 110 | + alert.addAction(UIAlertAction(title: "Reload", style: .cancel, handler: { action in | ||
| 111 | + self.didTapBackButton() | ||
| 112 | + })) | ||
| 113 | + present(alert, animated: true, completion: nil) | ||
| 100 | } | 114 | } |
| 101 | } | 115 | } |
| 102 | 116 | ||
| 103 | - @objc private func didDismissVC() { | 117 | + @objc private func didTapBackButton() { |
| 104 | navigationController?.popViewController(animated: true) | 118 | navigationController?.popViewController(animated: true) |
| 105 | } | 119 | } |
| 106 | 120 | ||
| @@ -144,11 +158,5 @@ extension CodeVerificationViewController: OTPViewDelegate { | @@ -144,11 +158,5 @@ extension CodeVerificationViewController: OTPViewDelegate { | ||
| 144 | 158 | ||
| 145 | func didFullCodeCompletion(_ otpView: OTPView) { | 159 | func didFullCodeCompletion(_ otpView: OTPView) { |
| 146 | print("code -> \(String(describing: otpView.code))") | 160 | print("code -> \(String(describing: otpView.code))") |
| 147 | - guard let code = otpView.code else { return } | ||
| 148 | - if code.isEmpty { | ||
| 149 | - mainView.otpView.isError.toggle() | ||
| 150 | - otpView.reloadInputViews() | ||
| 151 | - } | ||
| 152 | - | ||
| 153 | } | 161 | } |
| 154 | } | 162 | } |
| @@ -11,15 +11,12 @@ class ResidentsViewController: UIViewController { | @@ -11,15 +11,12 @@ class ResidentsViewController: UIViewController { | ||
| 11 | var mainView = ResidentsView() | 11 | var mainView = ResidentsView() |
| 12 | var myData: [ResidentModel] = [] | 12 | var myData: [ResidentModel] = [] |
| 13 | 13 | ||
| 14 | - let networkManager = AuthService() | ||
| 15 | - | ||
| 16 | override func loadView() { | 14 | override func loadView() { |
| 17 | view = mainView | 15 | view = mainView |
| 18 | } | 16 | } |
| 19 | 17 | ||
| 20 | override func viewDidLoad() { | 18 | override func viewDidLoad() { |
| 21 | initViewController() | 19 | initViewController() |
| 22 | - initDevice() | ||
| 23 | } | 20 | } |
| 24 | 21 | ||
| 25 | func initViewController() { | 22 | func initViewController() { |
| @@ -31,32 +28,6 @@ class ResidentsViewController: UIViewController { | @@ -31,32 +28,6 @@ class ResidentsViewController: UIViewController { | ||
| 31 | mainView.addResidentsButton.addTarget(self, action: #selector(willShowAddResidentVC), for: .touchUpInside) | 28 | mainView.addResidentsButton.addTarget(self, action: #selector(willShowAddResidentVC), for: .touchUpInside) |
| 32 | } | 29 | } |
| 33 | 30 | ||
| 34 | - func modelFilling() -> InitRequestModel? { | ||
| 35 | - guard let deviceUUID = UIDevice.current.identifierForVendor?.uuidString else { | ||
| 36 | - return nil | ||
| 37 | - } | ||
| 38 | - guard let appVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String else { | ||
| 39 | - return nil | ||
| 40 | - } | ||
| 41 | - return InitRequestModel(deviceUUID: deviceUUID, | ||
| 42 | - manufacturer: .Text.apple, | ||
| 43 | - model: UIDevice.current.model, | ||
| 44 | - platform: UIDevice.current.systemName, | ||
| 45 | - osVersion: UIDevice.current.systemVersion, | ||
| 46 | - appVersion: appVersion) | ||
| 47 | - } | ||
| 48 | - | ||
| 49 | - private func initDevice() { | ||
| 50 | - guard let model = modelFilling() else { | ||
| 51 | - return | ||
| 52 | - } | ||
| 53 | - AuthService.share.initRequest(model: model) { result in | ||
| 54 | - print("1️⃣✅\(result.message)✅") | ||
| 55 | - } fail: { error in | ||
| 56 | - print("1️⃣\(error)") | ||
| 57 | - } | ||
| 58 | - } | ||
| 59 | - | ||
| 60 | @objc private func didShowChooseApartVC() { | 31 | @objc private func didShowChooseApartVC() { |
| 61 | navigationController?.popViewController(animated: true) | 32 | navigationController?.popViewController(animated: true) |
| 62 | } | 33 | } |
| @@ -111,14 +82,6 @@ extension ResidentsViewController: ResidentTableViewCellDelegate { | @@ -111,14 +82,6 @@ extension ResidentsViewController: ResidentTableViewCellDelegate { | ||
| 111 | mainView.tableView.reloadData() | 82 | mainView.tableView.reloadData() |
| 112 | } | 83 | } |
| 113 | 84 | ||
| 114 | -// func didButtonsTapped(_ button: UIButton) { | ||
| 115 | -// if !button.isSelected { | ||
| 116 | -// button.isSelected = true | ||
| 117 | -// } else { | ||
| 118 | -// button.isSelected = false | ||
| 119 | -// } | ||
| 120 | -// } | ||
| 121 | - | ||
| 122 | func didManagerButtonTapped(cell: ResidentTableViewCell) { | 85 | func didManagerButtonTapped(cell: ResidentTableViewCell) { |
| 123 | if !cell.managerButton.isSelected { | 86 | if !cell.managerButton.isSelected { |
| 124 | cell.managerButton.isSelected = true | 87 | cell.managerButton.isSelected = true |
| @@ -8,9 +8,8 @@ | @@ -8,9 +8,8 @@ | ||
| 8 | import UIKit | 8 | import UIKit |
| 9 | 9 | ||
| 10 | class SettingsViewController: UIViewController { | 10 | class SettingsViewController: UIViewController { |
| 11 | - var mainView = SettingsView() | ||
| 12 | - var networkManager = AuthService() | ||
| 13 | - | 11 | + var logoutMessage: String? |
| 12 | + var mainView = SettingsView() | ||
| 14 | let settingsModel = SettingsModel.allCases | 13 | let settingsModel = SettingsModel.allCases |
| 15 | 14 | ||
| 16 | override func loadView() { | 15 | override func loadView() { |
| @@ -30,7 +29,7 @@ class SettingsViewController: UIViewController { | @@ -30,7 +29,7 @@ class SettingsViewController: UIViewController { | ||
| 30 | mainView.settingsTableView.registerReusableCell(SettingsTableViewCell.self) | 29 | mainView.settingsTableView.registerReusableCell(SettingsTableViewCell.self) |
| 31 | 30 | ||
| 32 | mainView.backButton.addTarget(self, action: #selector(didShowHomeVC), for: .touchUpInside) | 31 | mainView.backButton.addTarget(self, action: #selector(didShowHomeVC), for: .touchUpInside) |
| 33 | - mainView.logoutButton.addTarget(self, action: #selector(didLogoutAndShowVerificationVC), for: .touchUpInside) | 32 | + mainView.logoutButton.addTarget(self, action: #selector(didTapLogoutButton), for: .touchUpInside) |
| 34 | } | 33 | } |
| 35 | } | 34 | } |
| 36 | //MARK: - Delegate | 35 | //MARK: - Delegate |
| @@ -39,27 +38,50 @@ extension SettingsViewController { | @@ -39,27 +38,50 @@ extension SettingsViewController { | ||
| 39 | navigationController?.popViewController(animated: true) | 38 | navigationController?.popViewController(animated: true) |
| 40 | } | 39 | } |
| 41 | 40 | ||
| 42 | - @objc private func didLogoutAndShowVerificationVC() { | ||
| 43 | - networking() | ||
| 44 | - let vc = VerificationViewController() | ||
| 45 | - navigationController?.pushViewController(vc, animated: true) | 41 | + @objc private func didTapLogoutButton() { |
| 42 | + logoutRequestProcessing() | ||
| 43 | + | ||
| 46 | } | 44 | } |
| 47 | 45 | ||
| 48 | - func networking() { | ||
| 49 | - guard let logoutModel = logoutModelFilling() else { return } | ||
| 50 | - AuthService.share.logoutRequest(model: logoutModel) { response in | 46 | + func logoutRequestProcessing() { |
| 47 | + guard let logoutModel = getLogoutModel() else { return } | ||
| 48 | + AuthService.shared.logoutRequest(model: logoutModel) { response in | ||
| 49 | + self.logoutMessage = response.message | ||
| 50 | + self.logoutDataProcessing() | ||
| 51 | print("5️⃣❇️\(response.message ?? "Data not received!")❇️") | 51 | print("5️⃣❇️\(response.message ?? "Data not received!")❇️") |
| 52 | } fail: { error in | 52 | } fail: { error in |
| 53 | + self.logoutErrorProcessing() | ||
| 53 | print("5️⃣❗️\(error)❗️") | 54 | print("5️⃣❗️\(error)❗️") |
| 54 | } | 55 | } |
| 55 | } | 56 | } |
| 56 | 57 | ||
| 57 | - func logoutModelFilling() -> LogoutRequestModel? { | 58 | + func getLogoutModel() -> LogoutRequestModel? { |
| 58 | guard let deviceUUID = UIDevice.current.identifierForVendor?.uuidString else { | 59 | guard let deviceUUID = UIDevice.current.identifierForVendor?.uuidString else { |
| 59 | return nil | 60 | return nil |
| 60 | } | 61 | } |
| 61 | return LogoutRequestModel(deviceUUID: deviceUUID) | 62 | return LogoutRequestModel(deviceUUID: deviceUUID) |
| 62 | } | 63 | } |
| 64 | + | ||
| 65 | + private func logoutDataProcessing() { | ||
| 66 | + let alert = UIAlertController(title: "Do you really want to logout?", message: "", preferredStyle: .alert) | ||
| 67 | + alert.addAction(UIAlertAction(title: "Yes", style: .default, handler: { action in | ||
| 68 | + let vc = VerificationViewController() | ||
| 69 | + self.navigationController?.pushViewController(vc, animated: true) | ||
| 70 | + })) | ||
| 71 | + alert.addAction(UIAlertAction(title: "No", style: .cancel, handler: nil)) | ||
| 72 | + present(alert, animated: true, completion: nil) | ||
| 73 | + } | ||
| 74 | + | ||
| 75 | + private func logoutErrorProcessing() { | ||
| 76 | + if logoutMessage != "OK" { | ||
| 77 | + let alert = UIAlertController(title: "Some network problems", message: "", preferredStyle: .alert) | ||
| 78 | + alert.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil)) | ||
| 79 | + present(alert, animated: true, completion: nil) | ||
| 80 | + } else { | ||
| 81 | + let vc = VerificationViewController() | ||
| 82 | + self.navigationController?.pushViewController(vc, animated: true) | ||
| 83 | + } | ||
| 84 | + } | ||
| 63 | } | 85 | } |
| 64 | 86 | ||
| 65 | //MARK: tableView delegate and datasource | 87 | //MARK: tableView delegate and datasource |
| @@ -32,7 +32,7 @@ class VerificationView: UIView { | @@ -32,7 +32,7 @@ class VerificationView: UIView { | ||
| 32 | var label = UILabel() | 32 | var label = UILabel() |
| 33 | label.text = .Text.letsVerifyYourAccount | 33 | label.text = .Text.letsVerifyYourAccount |
| 34 | label.numberOfLines = 2 | 34 | label.numberOfLines = 2 |
| 35 | - label.font = .skModernist(type: .regular, ofSize: 38) | 35 | + label.font = .skModernist(type: .regular, ofSize: 28) |
| 36 | return label | 36 | return label |
| 37 | }() | 37 | }() |
| 38 | 38 |
| @@ -8,8 +8,8 @@ | @@ -8,8 +8,8 @@ | ||
| 8 | import UIKit | 8 | import UIKit |
| 9 | 9 | ||
| 10 | class VerificationViewController: UIViewController { | 10 | class VerificationViewController: UIViewController { |
| 11 | - var networkManager = AuthService() | ||
| 12 | var isKeyboardAppear = false | 11 | var isKeyboardAppear = false |
| 12 | + var startMessage: String? | ||
| 13 | private let mainView = VerificationView() | 13 | private let mainView = VerificationView() |
| 14 | var closeTap: UITapGestureRecognizer? | 14 | var closeTap: UITapGestureRecognizer? |
| 15 | 15 | ||
| @@ -57,13 +57,69 @@ class VerificationViewController: UIViewController { | @@ -57,13 +57,69 @@ class VerificationViewController: UIViewController { | ||
| 57 | NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide(notification:)), name: UIResponder.keyboardWillHideNotification, object: nil) | 57 | NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide(notification:)), name: UIResponder.keyboardWillHideNotification, object: nil) |
| 58 | } | 58 | } |
| 59 | 59 | ||
| 60 | - func networking() { | 60 | + private func initDevice() { |
| 61 | + guard let model = getInitModel() else { | ||
| 62 | + return | ||
| 63 | + } | ||
| 64 | + AuthService.shared.initRequest(model: model) { result in | ||
| 65 | + print("1️⃣✅\(result.message)✅") | ||
| 66 | + self.startRequestProcessing() | ||
| 67 | + } fail: { error in | ||
| 68 | + print("1️⃣\(error)") | ||
| 69 | + let alert = UIAlertController(title: "Error", message: "", preferredStyle: .alert) | ||
| 70 | + alert.addAction(UIAlertAction(title: "Cancel", style: .default, handler: nil)) | ||
| 71 | + self.present(alert, animated: true, completion: nil) | ||
| 72 | + } | ||
| 73 | + } | ||
| 74 | + | ||
| 75 | + func getInitModel() -> InitRequestModel? { | ||
| 76 | + guard let deviceUUID = UIDevice.current.identifierForVendor?.uuidString else { | ||
| 77 | + return nil | ||
| 78 | + } | ||
| 79 | + guard let appVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String else { | ||
| 80 | + return nil | ||
| 81 | + } | ||
| 82 | + return InitRequestModel(deviceUUID: deviceUUID, | ||
| 83 | + manufacturer: .Text.apple, | ||
| 84 | + model: UIDevice.current.model, | ||
| 85 | + platform: UIDevice.current.systemName, | ||
| 86 | + osVersion: UIDevice.current.systemVersion, | ||
| 87 | + appVersion: appVersion) | ||
| 88 | + } | ||
| 89 | + | ||
| 90 | + private func startRequestProcessing() { | ||
| 61 | guard let startModel = startModelFilling() else { return } | 91 | guard let startModel = startModelFilling() else { return } |
| 62 | - AuthService.share.startRequest(model: startModel) { response in | 92 | + AuthService.shared.startRequest(model: startModel) { response in |
| 93 | + self.startMessage = response.message | ||
| 63 | print("2️⃣✅\(response.message)✅") | 94 | print("2️⃣✅\(response.message)✅") |
| 95 | + self.didShowCodeVerificationVC() | ||
| 64 | } fail: { error in | 96 | } fail: { error in |
| 65 | print("2️⃣❌\(error)❌") | 97 | print("2️⃣❌\(error)❌") |
| 98 | + self.errorProcessing() | ||
| 99 | + } | ||
| 100 | + } | ||
| 101 | + | ||
| 102 | + func didShowCodeVerificationVC() { | ||
| 103 | + if startMessage == "SMS successfully sent" { | ||
| 104 | + let viewController = CodeVerificationViewController() | ||
| 105 | + viewController.navigationItem.hidesBackButton = true | ||
| 106 | + navigationController?.pushViewController(viewController, animated: true) | ||
| 107 | + } else { | ||
| 108 | + userDoesNotExistNotice() | ||
| 66 | } | 109 | } |
| 110 | + | ||
| 111 | + } | ||
| 112 | + | ||
| 113 | + private func userDoesNotExistNotice() { | ||
| 114 | + let alert = UIAlertController(title: "User does not exist", message: "Try again", preferredStyle: .alert) | ||
| 115 | + alert.addAction(UIAlertAction(title: "Ok", style: .default, handler: nil)) | ||
| 116 | + present(alert, animated: true) | ||
| 117 | + } | ||
| 118 | + | ||
| 119 | + private func errorProcessing() { | ||
| 120 | + let alert = UIAlertController(title: "Network error", message: "Try again later", preferredStyle: .alert) | ||
| 121 | + alert.addAction(UIAlertAction(title: "Ok", style: .default, handler: nil)) | ||
| 122 | + present(alert, animated: true) | ||
| 67 | } | 123 | } |
| 68 | 124 | ||
| 69 | func startModelFilling() -> StartRequestModel? { | 125 | func startModelFilling() -> StartRequestModel? { |
| @@ -76,7 +132,7 @@ class VerificationViewController: UIViewController { | @@ -76,7 +132,7 @@ class VerificationViewController: UIViewController { | ||
| 76 | } | 132 | } |
| 77 | } | 133 | } |
| 78 | 134 | ||
| 79 | - func addDoneButtonOnKeyboard() { | 135 | + private func addDoneButtonOnKeyboard() { |
| 80 | let doneToolbar: UIToolbar = UIToolbar(frame: CGRect.init(x: 0, y: 0, width: UIScreen.main.bounds.width, height: 50)) | 136 | let doneToolbar: UIToolbar = UIToolbar(frame: CGRect.init(x: 0, y: 0, width: UIScreen.main.bounds.width, height: 50)) |
| 81 | doneToolbar.barStyle = .default | 137 | doneToolbar.barStyle = .default |
| 82 | 138 | ||
| @@ -90,9 +146,8 @@ class VerificationViewController: UIViewController { | @@ -90,9 +146,8 @@ class VerificationViewController: UIViewController { | ||
| 90 | mainView.phoneTextField.inputAccessoryView = doneToolbar | 146 | mainView.phoneTextField.inputAccessoryView = doneToolbar |
| 91 | } | 147 | } |
| 92 | 148 | ||
| 93 | - @objc func doneButtonAction(){ | 149 | + @objc private func doneButtonAction(){ |
| 94 | mainView.phoneTextField.resignFirstResponder() | 150 | mainView.phoneTextField.resignFirstResponder() |
| 95 | - didShowCodeVerificationVC() | ||
| 96 | } | 151 | } |
| 97 | } | 152 | } |
| 98 | 153 | ||
| @@ -109,10 +164,12 @@ extension VerificationViewController { | @@ -109,10 +164,12 @@ extension VerificationViewController { | ||
| 109 | sender.isSelected = true | 164 | sender.isSelected = true |
| 110 | mainView.phoneNumberButton.isSelected = false | 165 | mainView.phoneNumberButton.isSelected = false |
| 111 | mainView.handleUI(true) | 166 | mainView.handleUI(true) |
| 167 | + mainView.phoneTextField.resignFirstResponder() | ||
| 112 | case mainView.phoneNumberButton: | 168 | case mainView.phoneNumberButton: |
| 113 | sender.isSelected = true | 169 | sender.isSelected = true |
| 114 | mainView.emailButton.isSelected = false | 170 | mainView.emailButton.isSelected = false |
| 115 | mainView.handleUI(false) | 171 | mainView.handleUI(false) |
| 172 | + mainView.emailTextField.resignFirstResponder() | ||
| 116 | default: | 173 | default: |
| 117 | return | 174 | return |
| 118 | } | 175 | } |
| @@ -124,28 +181,19 @@ extension VerificationViewController { | @@ -124,28 +181,19 @@ extension VerificationViewController { | ||
| 124 | } | 181 | } |
| 125 | 182 | ||
| 126 | @objc private func didTapContinueButton() { | 183 | @objc private func didTapContinueButton() { |
| 127 | - didShowCodeVerificationVC() | 184 | + validatingTheLoginField() |
| 128 | } | 185 | } |
| 129 | 186 | ||
| 130 | - private func didShowCodeVerificationVC() { | 187 | + private func validatingTheLoginField() { |
| 131 | guard let email = mainView.emailTextField.text else { return } | 188 | guard let email = mainView.emailTextField.text else { return } |
| 132 | guard let number = mainView.phoneTextField.text else { return } | 189 | guard let number = mainView.phoneTextField.text else { return } |
| 133 | - let userCode: String = .Text.userCode | 190 | + |
| 134 | if email.isEmpty || number.isEmpty{ | 191 | if email.isEmpty || number.isEmpty{ |
| 135 | let alert = UIAlertController(title: "Enter email or number fields", message: "", preferredStyle: .alert) | 192 | let alert = UIAlertController(title: "Enter email or number fields", message: "", preferredStyle: .alert) |
| 136 | alert.addAction(UIAlertAction(title: "Ok", style: .cancel, handler: nil)) | 193 | alert.addAction(UIAlertAction(title: "Ok", style: .cancel, handler: nil)) |
| 137 | present(alert, animated: true) | 194 | present(alert, animated: true) |
| 138 | - } else { if email == userCode || number == userCode { | ||
| 139 | - let vc = CodeVerificationViewController() | ||
| 140 | - vc.navigationItem.hidesBackButton = true | ||
| 141 | - navigationController?.pushViewController(vc, animated: true) | ||
| 142 | - networking() | ||
| 143 | - } else { if email != userCode || number != userCode { | ||
| 144 | - let alert = UIAlertController(title: "User does not exist", message: "", preferredStyle: .alert) | ||
| 145 | - alert.addAction(UIAlertAction(title: "Ok", style: .cancel, handler: nil)) | ||
| 146 | - present(alert, animated: true) | ||
| 147 | - } | ||
| 148 | - } | 195 | + } else { |
| 196 | + initDevice() | ||
| 149 | } | 197 | } |
| 150 | } | 198 | } |
| 151 | 199 |
Please
register
or
login
to post a comment