From 00a3bfc3d30fdd1b0f66b4bd2cffff6ea24664e7 Mon Sep 17 00:00:00 2001 From: Amrit Giri Date: Fri, 3 Jul 2020 13:24:32 +0545 Subject: [PATCH] mobile verification done --- GME Remit.xcodeproj/project.pbxproj | 124 ++++++++++++++-- .../xcshareddata/xcschemes/GME Remit.xcscheme | 8 +- GME Remit/APIs/Router/APIRouter.swift | 7 + .../Wireframe/LoginWireframe.swift | 2 +- .../MobileVerificationInteractor.swift | 39 +++++ .../MobileVerificationInteractorIO.swift | 16 +++ .../Service/MobileVerificationService.swift | 32 +++++ .../MobileVerificationServiceType.swift | 17 +++ .../MobileVerificationModuleInterface.swift | 11 ++ .../MobileVerificationPresenter.swift | 45 ++++++ .../View/MobileVerification.storyboard | 135 ++++++++++++++++++ .../MobileVerificationViewController.swift | 120 ++++++++++++++++ .../MobileVerificationViewInterface.swift | 14 ++ .../MobileVerificationWireframe.swift | 34 +++++ .../MobileVerificationWireframeInput.swift | 13 ++ .../Wireframe/SplashScreenWireframe.swift | 4 +- .../en.lproj/Localizable.strings | 6 + 17 files changed, 612 insertions(+), 15 deletions(-) create mode 100644 GME Remit/Modules/RegisterModules/MobileVerification/Application Logic/Interactor/MobileVerificationInteractor.swift create mode 100644 GME Remit/Modules/RegisterModules/MobileVerification/Application Logic/Interactor/MobileVerificationInteractorIO.swift create mode 100644 GME Remit/Modules/RegisterModules/MobileVerification/Application Logic/Service/MobileVerificationService.swift create mode 100644 GME Remit/Modules/RegisterModules/MobileVerification/Application Logic/Service/MobileVerificationServiceType.swift create mode 100644 GME Remit/Modules/RegisterModules/MobileVerification/Module Interface/MobileVerificationModuleInterface.swift create mode 100644 GME Remit/Modules/RegisterModules/MobileVerification/User Interface/Presenter/MobileVerificationPresenter.swift create mode 100644 GME Remit/Modules/RegisterModules/MobileVerification/User Interface/View/MobileVerification.storyboard create mode 100644 GME Remit/Modules/RegisterModules/MobileVerification/User Interface/View/MobileVerificationViewController.swift create mode 100644 GME Remit/Modules/RegisterModules/MobileVerification/User Interface/View/MobileVerificationViewInterface.swift create mode 100644 GME Remit/Modules/RegisterModules/MobileVerification/User Interface/Wireframe/MobileVerificationWireframe.swift create mode 100644 GME Remit/Modules/RegisterModules/MobileVerification/User Interface/Wireframe/MobileVerificationWireframeInput.swift diff --git a/GME Remit.xcodeproj/project.pbxproj b/GME Remit.xcodeproj/project.pbxproj index 0c87e063..de8155c6 100644 --- a/GME Remit.xcodeproj/project.pbxproj +++ b/GME Remit.xcodeproj/project.pbxproj @@ -269,6 +269,17 @@ 7E364CEC24A4455A007D6E02 /* PasswordInputViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 7E364CEA24A4455A007D6E02 /* PasswordInputViewController.xib */; }; 7E364CEF24A46D27007D6E02 /* BalanceModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E364CEE24A46D27007D6E02 /* BalanceModel.swift */; }; 7E4DC74F24AB035C00815FA8 /* ActionSheetHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E4DC74E24AB035C00815FA8 /* ActionSheetHelper.swift */; }; + 7E692A4D24AF091600F10D62 /* MobileVerificationModuleInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E692A3A24AF091600F10D62 /* MobileVerificationModuleInterface.swift */; }; + 7E692A4E24AF091600F10D62 /* MobileVerificationServiceType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E692A3D24AF091600F10D62 /* MobileVerificationServiceType.swift */; }; + 7E692A4F24AF091600F10D62 /* MobileVerificationService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E692A3E24AF091600F10D62 /* MobileVerificationService.swift */; }; + 7E692A5024AF091600F10D62 /* MobileVerificationInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E692A4024AF091600F10D62 /* MobileVerificationInteractor.swift */; }; + 7E692A5124AF091600F10D62 /* MobileVerificationInteractorIO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E692A4124AF091600F10D62 /* MobileVerificationInteractorIO.swift */; }; + 7E692A5224AF091600F10D62 /* MobileVerificationPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E692A4424AF091600F10D62 /* MobileVerificationPresenter.swift */; }; + 7E692A5324AF091600F10D62 /* MobileVerificationWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E692A4624AF091600F10D62 /* MobileVerificationWireframe.swift */; }; + 7E692A5424AF091600F10D62 /* MobileVerificationWireframeInput.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E692A4724AF091600F10D62 /* MobileVerificationWireframeInput.swift */; }; + 7E692A5524AF091600F10D62 /* MobileVerificationViewInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E692A4924AF091600F10D62 /* MobileVerificationViewInterface.swift */; }; + 7E692A5624AF091600F10D62 /* MobileVerification.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 7E692A4B24AF091600F10D62 /* MobileVerification.storyboard */; }; + 7E692A5724AF091600F10D62 /* MobileVerificationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E692A4C24AF091600F10D62 /* MobileVerificationViewController.swift */; }; 7EC9DE0124A9AECE004A0AD8 /* RewardProduct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7EC9DE0024A9AECE004A0AD8 /* RewardProduct.swift */; }; 7EC9DE0324A9AEEC004A0AD8 /* Branch.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7EC9DE0224A9AEEC004A0AD8 /* Branch.swift */; }; 7EC9DE0524A9AF65004A0AD8 /* BranchContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7EC9DE0424A9AF65004A0AD8 /* BranchContainer.swift */; }; @@ -859,6 +870,17 @@ 7E364CEA24A4455A007D6E02 /* PasswordInputViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = PasswordInputViewController.xib; sourceTree = ""; }; 7E364CEE24A46D27007D6E02 /* BalanceModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BalanceModel.swift; sourceTree = ""; }; 7E4DC74E24AB035C00815FA8 /* ActionSheetHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActionSheetHelper.swift; sourceTree = ""; }; + 7E692A3A24AF091600F10D62 /* MobileVerificationModuleInterface.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MobileVerificationModuleInterface.swift; sourceTree = ""; }; + 7E692A3D24AF091600F10D62 /* MobileVerificationServiceType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MobileVerificationServiceType.swift; sourceTree = ""; }; + 7E692A3E24AF091600F10D62 /* MobileVerificationService.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MobileVerificationService.swift; sourceTree = ""; }; + 7E692A4024AF091600F10D62 /* MobileVerificationInteractor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MobileVerificationInteractor.swift; sourceTree = ""; }; + 7E692A4124AF091600F10D62 /* MobileVerificationInteractorIO.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MobileVerificationInteractorIO.swift; sourceTree = ""; }; + 7E692A4424AF091600F10D62 /* MobileVerificationPresenter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MobileVerificationPresenter.swift; sourceTree = ""; }; + 7E692A4624AF091600F10D62 /* MobileVerificationWireframe.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MobileVerificationWireframe.swift; sourceTree = ""; }; + 7E692A4724AF091600F10D62 /* MobileVerificationWireframeInput.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MobileVerificationWireframeInput.swift; sourceTree = ""; }; + 7E692A4924AF091600F10D62 /* MobileVerificationViewInterface.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MobileVerificationViewInterface.swift; sourceTree = ""; }; + 7E692A4B24AF091600F10D62 /* MobileVerification.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = MobileVerification.storyboard; sourceTree = ""; }; + 7E692A4C24AF091600F10D62 /* MobileVerificationViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MobileVerificationViewController.swift; sourceTree = ""; }; 7EC9DE0024A9AECE004A0AD8 /* RewardProduct.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RewardProduct.swift; sourceTree = ""; }; 7EC9DE0224A9AEEC004A0AD8 /* Branch.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Branch.swift; sourceTree = ""; }; 7EC9DE0424A9AF65004A0AD8 /* BranchContainer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BranchContainer.swift; sourceTree = ""; }; @@ -1311,6 +1333,7 @@ 73138D9322B7509F001280D3 /* RegisterModules */ = { isa = PBXGroup; children = ( + 7E692A3824AF091600F10D62 /* MobileVerification */, D96A4FE12146625C00CFD507 /* Register */, 73D168442398D6A000E3E01E /* UserAuthentication */, ); @@ -2771,6 +2794,88 @@ path = ActionSheet; sourceTree = ""; }; + 7E692A3824AF091600F10D62 /* MobileVerification */ = { + isa = PBXGroup; + children = ( + 7E692A3924AF091600F10D62 /* Module Interface */, + 7E692A3B24AF091600F10D62 /* Application Logic */, + 7E692A4224AF091600F10D62 /* User Interface */, + ); + path = MobileVerification; + sourceTree = ""; + }; + 7E692A3924AF091600F10D62 /* Module Interface */ = { + isa = PBXGroup; + children = ( + 7E692A3A24AF091600F10D62 /* MobileVerificationModuleInterface.swift */, + ); + path = "Module Interface"; + sourceTree = ""; + }; + 7E692A3B24AF091600F10D62 /* Application Logic */ = { + isa = PBXGroup; + children = ( + 7E692A3C24AF091600F10D62 /* Service */, + 7E692A3F24AF091600F10D62 /* Interactor */, + ); + path = "Application Logic"; + sourceTree = ""; + }; + 7E692A3C24AF091600F10D62 /* Service */ = { + isa = PBXGroup; + children = ( + 7E692A3D24AF091600F10D62 /* MobileVerificationServiceType.swift */, + 7E692A3E24AF091600F10D62 /* MobileVerificationService.swift */, + ); + path = Service; + sourceTree = ""; + }; + 7E692A3F24AF091600F10D62 /* Interactor */ = { + isa = PBXGroup; + children = ( + 7E692A4024AF091600F10D62 /* MobileVerificationInteractor.swift */, + 7E692A4124AF091600F10D62 /* MobileVerificationInteractorIO.swift */, + ); + path = Interactor; + sourceTree = ""; + }; + 7E692A4224AF091600F10D62 /* User Interface */ = { + isa = PBXGroup; + children = ( + 7E692A4324AF091600F10D62 /* Presenter */, + 7E692A4524AF091600F10D62 /* Wireframe */, + 7E692A4824AF091600F10D62 /* View */, + ); + path = "User Interface"; + sourceTree = ""; + }; + 7E692A4324AF091600F10D62 /* Presenter */ = { + isa = PBXGroup; + children = ( + 7E692A4424AF091600F10D62 /* MobileVerificationPresenter.swift */, + ); + path = Presenter; + sourceTree = ""; + }; + 7E692A4524AF091600F10D62 /* Wireframe */ = { + isa = PBXGroup; + children = ( + 7E692A4624AF091600F10D62 /* MobileVerificationWireframe.swift */, + 7E692A4724AF091600F10D62 /* MobileVerificationWireframeInput.swift */, + ); + path = Wireframe; + sourceTree = ""; + }; + 7E692A4824AF091600F10D62 /* View */ = { + isa = PBXGroup; + children = ( + 7E692A4924AF091600F10D62 /* MobileVerificationViewInterface.swift */, + 7E692A4B24AF091600F10D62 /* MobileVerification.storyboard */, + 7E692A4C24AF091600F10D62 /* MobileVerificationViewController.swift */, + ); + path = View; + sourceTree = ""; + }; 7EC9DDFF24A9AEBD004A0AD8 /* Models */ = { isa = PBXGroup; children = ( @@ -4267,20 +4372,12 @@ isa = PBXGroup; children = ( D96A4FF22146625C00CFD507 /* RegisterViewInterface.swift */, - D96A4FF32146625C00CFD507 /* ViewModels */, D96A4FF42146625C00CFD507 /* Register.storyboard */, D96A4FF52146625C00CFD507 /* RegisterViewController.swift */, ); path = View; sourceTree = ""; }; - D96A4FF32146625C00CFD507 /* ViewModels */ = { - isa = PBXGroup; - children = ( - ); - path = ViewModels; - sourceTree = ""; - }; D96BD100216479E200DFE7D8 /* WalletStatement */ = { isa = PBXGroup; children = ( @@ -4995,6 +5092,7 @@ 5565FF221FE275E5002934E9 /* SanFranciscoDisplay-Light.otf in Resources */, D96A4FFF2146625C00CFD507 /* Register.storyboard in Resources */, 73149F6B22E5AF8000D66B26 /* LauncherScreen.storyboard in Resources */, + 7E692A5624AF091600F10D62 /* MobileVerification.storyboard in Resources */, D9B7ADF92130048E009B0564 /* ExchangeRates.storyboard in Resources */, 73AEFF7A2334A13100A967FB /* TransactionHistoryGroup.storyboard in Resources */, 89739E3424459A630016251B /* SendMoneyParent.storyboard in Resources */, @@ -5449,6 +5547,7 @@ FF6E7D9721BF951D00A003B9 /* AppUpdateWireframe.swift in Sources */, D9DAFE2921353D6C00483E71 /* SendMoneyPaymentModeModel.swift in Sources */, D9030ABB2138DDD900A1BCA0 /* SendMoneyExchangeRate.swift in Sources */, + 7E692A5724AF091600F10D62 /* MobileVerificationViewController.swift in Sources */, 73AEFF7B2334A13100A967FB /* TransactionHistoryGroupViewController.swift in Sources */, 73149F6322E5AF8000D66B26 /* LauncherScreenModuleInterface.swift in Sources */, 89739E5D24459A630016251B /* SendMoneyVerificationInteractorIO.swift in Sources */, @@ -5495,6 +5594,7 @@ 73FBBF2C23F231A8009D7627 /* DetailNotificationViewController.swift in Sources */, D9DC107A21639078008F3C51 /* MessageComposeService.swift in Sources */, 73FBBF2623F231A8009D7627 /* DetailNotificationInteractor.swift in Sources */, + 7E692A4E24AF091600F10D62 /* MobileVerificationServiceType.swift in Sources */, D96A4FD521460B4A00CFD507 /* SplashScreenService.swift in Sources */, 9F983C0C2024883D001DCB3F /* UIColor+Ext.swift in Sources */, D9DC108121639078008F3C51 /* MessageComposeViewInterface.swift in Sources */, @@ -5521,6 +5621,7 @@ D97785A1215DC55F00754079 /* TransactionHistoryInteractor.swift in Sources */, 89739E4C24459A630016251B /* SendMoneyExchangeRateViewInterface.swift in Sources */, 738F04B12316238600BA5EE7 /* ShadowView.swift in Sources */, + 7E692A5024AF091600F10D62 /* MobileVerificationInteractor.swift in Sources */, D903113F214786EA00AD5BA9 /* ForgotPasswordInteractor.swift in Sources */, 73157BA422DC1EEC009B836F /* PopupNotificationViewController.swift in Sources */, D962230C212BD7A100B7A115 /* Array+Ext.swift in Sources */, @@ -5555,6 +5656,7 @@ BEC9AFFD224FC49C00A2DA06 /* BiometricAuthenticationService.swift in Sources */, 89EA0D7E243EC1C5003ACCC8 /* PersonalInformationViewInterface.swift in Sources */, 73210DAA22FBE73100715D6C /* RecipientsViewModelInterface.swift in Sources */, + 7E692A5224AF091600F10D62 /* MobileVerificationPresenter.swift in Sources */, 73157B9D22DC1EEC009B836F /* PopupNotificationService.swift in Sources */, D9031145214786EA00AD5BA9 /* ForgotPasswordViewController.swift in Sources */, 89EA0D87243EC1C5003ACCC8 /* ChangePersonalInformationPresenter.swift in Sources */, @@ -5598,6 +5700,7 @@ 89EA0D75243EC1C5003ACCC8 /* PersonalInformationContainer.swift in Sources */, 7303E5732344A1F000472407 /* StoreReviewHelper.swift in Sources */, 89739E2A24459A630016251B /* SendMoneyParentModuleInterface.swift in Sources */, + 7E692A5424AF091600F10D62 /* MobileVerificationWireframeInput.swift in Sources */, 89EA0D8C243EC1C6003ACCC8 /* ChangePersonalInformationViewController.swift in Sources */, D950BED121549242008367A1 /* HomeModuleInterface.swift in Sources */, 89EA0D74243EC1C5003ACCC8 /* CityModel.swift in Sources */, @@ -5612,6 +5715,7 @@ D9B7ADFA2130048E009B0564 /* ExchangeRatesViewInterface.swift in Sources */, D9E57945212E938D00D47AC0 /* ExchangeRateDetailModel.swift in Sources */, D96848C7212D3A7400EF12B1 /* DataRequest+Ext.swift in Sources */, + 7E692A5524AF091600F10D62 /* MobileVerificationViewInterface.swift in Sources */, D95B5E3D21311057000C0B33 /* GmeContactsInteractorIO.swift in Sources */, D96A4FDA21460B4A00CFD507 /* SplashScreenWireframe.swift in Sources */, 73FDCE1D225C167700CC6912 /* KeyChain.swift in Sources */, @@ -5672,11 +5776,14 @@ 738FD48C2303E157008B144D /* FieldModel.swift in Sources */, 738714B9237CE86E0038FCB1 /* InboundReceiptWireframe.swift in Sources */, 73AEFF762334A13100A967FB /* TransactionHistoryGroupWireframeInputOutput.swift in Sources */, + 7E692A5124AF091600F10D62 /* MobileVerificationInteractorIO.swift in Sources */, 732B5F9723C40C1F00074442 /* AgreePDFDocument.swift in Sources */, 738D7281239F31C4006B4EA7 /* PersonalInformation.swift in Sources */, 738714B3237CE86E0038FCB1 /* InboundReceiptService.swift in Sources */, 73210DA722FBE73100715D6C /* RecipientsWireframe.swift in Sources */, 89739E4824459A630016251B /* SendMoneyExchangeRatePresenter.swift in Sources */, + 7E692A4D24AF091600F10D62 /* MobileVerificationModuleInterface.swift in Sources */, + 7E692A4F24AF091600F10D62 /* MobileVerificationService.swift in Sources */, 734DD31C2366DA2700BFA7EE /* CheckMark.swift in Sources */, 733CC36523A208B90027DDF9 /* UIImage+Ext.swift in Sources */, 73157BA222DC1EEC009B836F /* PopupNotificationWireframeInput.swift in Sources */, @@ -5786,6 +5893,7 @@ D9DC108421639E56008F3C51 /* SuccessMessage.swift in Sources */, 738D7285239F32C7006B4EA7 /* PictureInformation.swift in Sources */, 89739E4A24459A630016251B /* SendMoneyExchangeRateWireframe.swift in Sources */, + 7E692A5324AF091600F10D62 /* MobileVerificationWireframe.swift in Sources */, 7318534E230EACA400BA9AE3 /* SendMoneyTransFerReasonViewModel.swift in Sources */, 73195ABB22FD14D500151434 /* SetupRecipientViewModelInterface.swift in Sources */, 7389601922C2FADD003FEA90 /* TableCell.swift in Sources */, diff --git a/GME Remit.xcodeproj/xcshareddata/xcschemes/GME Remit.xcscheme b/GME Remit.xcodeproj/xcshareddata/xcschemes/GME Remit.xcscheme index 40c19999..bc07625c 100644 --- a/GME Remit.xcodeproj/xcshareddata/xcschemes/GME Remit.xcscheme +++ b/GME Remit.xcodeproj/xcshareddata/xcschemes/GME Remit.xcscheme @@ -15,7 +15,7 @@ @@ -31,7 +31,7 @@ @@ -74,7 +74,7 @@ @@ -91,7 +91,7 @@ diff --git a/GME Remit/APIs/Router/APIRouter.swift b/GME Remit/APIs/Router/APIRouter.swift index 0da76be9..523359be 100644 --- a/GME Remit/APIs/Router/APIRouter.swift +++ b/GME Remit/APIs/Router/APIRouter.swift @@ -32,6 +32,7 @@ enum APIRouter { case customerProfile(firebaseToken: String) // MARK: - Register + case requestOTP(mobileNumber: String) case customerRegister(registerModel: RegisterRequestModel, firebaseToken: String) case passwordReset(userName: String) case validation(userName: String, idNumber: String, idType: String) @@ -398,6 +399,8 @@ extension APIRouter { return "\(baseUrl)/users/access-code" case .customerProfile: return "\(baseUrl)/mobile/CustomerProfile" + case .requestOTP: + return "\(baseUrl)/requestOTP" case .customerRegister: return "\(baseUrlWithoutVersion)v3/mobile/customerRegister" case .passwordReset: @@ -475,6 +478,8 @@ extension APIRouter { return .post case .customerProfile: return .post + case .requestOTP: + return .post case .customerRegister: return .post case .passwordReset: @@ -557,6 +562,8 @@ extension APIRouter { "fcmId": firebaseToken, "osVersion": Utility.getOsVersion() ] + case .requestOTP(let mobileNumber): + return ["mobileNumber" : mobileNumber] case .customerRegister(let registerModel, let firebaseToken): return [ diff --git a/GME Remit/Modules/Login/User Interface/Wireframe/LoginWireframe.swift b/GME Remit/Modules/Login/User Interface/Wireframe/LoginWireframe.swift index 22837e67..4175947b 100644 --- a/GME Remit/Modules/Login/User Interface/Wireframe/LoginWireframe.swift +++ b/GME Remit/Modules/Login/User Interface/Wireframe/LoginWireframe.swift @@ -13,7 +13,7 @@ import LGSideMenuController class LoginWireframe { weak var view: UIViewController! lazy var mainWireframe = MainWireframe.shared - lazy var registerWireframe = RegisterWireframe() + lazy var registerWireframe = MobileVerificationWireframe() lazy var forgotPasswordWireframe = ForgotPasswordWireframe() } diff --git a/GME Remit/Modules/RegisterModules/MobileVerification/Application Logic/Interactor/MobileVerificationInteractor.swift b/GME Remit/Modules/RegisterModules/MobileVerification/Application Logic/Interactor/MobileVerificationInteractor.swift new file mode 100644 index 00000000..42b80574 --- /dev/null +++ b/GME Remit/Modules/RegisterModules/MobileVerification/Application Logic/Interactor/MobileVerificationInteractor.swift @@ -0,0 +1,39 @@ +// +// MobileVerificationInteractor.swift +// GME Remit +// +// Created by Amrit Giri on 7/3/20. +//Copyright © 2020 Gobal Money Express Co. Ltd. All rights reserved. +// + +import Foundation + +class MobileVerificationInteractor { + + // MARK: Properties + + weak var output: MobileVerificationInteractorOutput? + private let service: MobileVerificationServiceType + + // MARK: Initialization + + init(service: MobileVerificationServiceType) { + self.service = service + } + + // MARK: Converting entities +} + +// MARK: MobileVerification interactor input interface + +extension MobileVerificationInteractor: MobileVerificationInteractorInput { + func verify(mobileNumber: String) { + self.service.verifyMobileNumber(mobile: mobileNumber, success: { (message) in + self.output?.success(message: message ?? "") + }) { (error) in + self.output?.show(error: error) + } + } + + +} diff --git a/GME Remit/Modules/RegisterModules/MobileVerification/Application Logic/Interactor/MobileVerificationInteractorIO.swift b/GME Remit/Modules/RegisterModules/MobileVerification/Application Logic/Interactor/MobileVerificationInteractorIO.swift new file mode 100644 index 00000000..ecdaa2db --- /dev/null +++ b/GME Remit/Modules/RegisterModules/MobileVerification/Application Logic/Interactor/MobileVerificationInteractorIO.swift @@ -0,0 +1,16 @@ +// +// MobileVerificationInteractorIO.swift +// GME Remit +// +// Created by Amrit Giri on 7/3/20. +//Copyright © 2020 Gobal Money Express Co. Ltd. All rights reserved. +// + +protocol MobileVerificationInteractorInput: class { + func verify(mobileNumber: String) +} + +protocol MobileVerificationInteractorOutput: class { + func show(error: Error) + func success(message: String) +} diff --git a/GME Remit/Modules/RegisterModules/MobileVerification/Application Logic/Service/MobileVerificationService.swift b/GME Remit/Modules/RegisterModules/MobileVerification/Application Logic/Service/MobileVerificationService.swift new file mode 100644 index 00000000..fb5d8683 --- /dev/null +++ b/GME Remit/Modules/RegisterModules/MobileVerification/Application Logic/Service/MobileVerificationService.swift @@ -0,0 +1,32 @@ +// +// MobileVerificationService.swift +// GME Remit +// +// Created by Amrit Giri on 7/3/20. +//Copyright © 2020 Gobal Money Express Co. Ltd. All rights reserved. +// + +import Foundation + +class MobileVerificationService: MobileVerificationServiceType { + func verifyMobileNumber( + mobile: String, + success: @escaping (String?) -> Void, + failure: @escaping (Error) -> Void + ){ + APIRouter + .requestOTP(mobileNumber: mobile) + .request( + needsAuthorization: false, + success: {(response: ResponseMessage) in + if (response.errorCode ?? "") == "1" { + let error = NSError(domain: "Network", code: 0, message: response.message ?? "") + failure(error) + } else { + success(response.message) + } + }, + failure: {failure($0)} + ) + } +} diff --git a/GME Remit/Modules/RegisterModules/MobileVerification/Application Logic/Service/MobileVerificationServiceType.swift b/GME Remit/Modules/RegisterModules/MobileVerification/Application Logic/Service/MobileVerificationServiceType.swift new file mode 100644 index 00000000..0d2ea86f --- /dev/null +++ b/GME Remit/Modules/RegisterModules/MobileVerification/Application Logic/Service/MobileVerificationServiceType.swift @@ -0,0 +1,17 @@ +// +// MobileVerificationServiceType.swift +// GME Remit +// +// Created by Amrit Giri on 7/3/20. +//Copyright © 2020 Gobal Money Express Co. Ltd. All rights reserved. +// + +import Foundation + +protocol MobileVerificationServiceType: class { + func verifyMobileNumber( + mobile: String, + success: @escaping (String?) -> Void, + failure: @escaping (Error) -> Void + ) +} diff --git a/GME Remit/Modules/RegisterModules/MobileVerification/Module Interface/MobileVerificationModuleInterface.swift b/GME Remit/Modules/RegisterModules/MobileVerification/Module Interface/MobileVerificationModuleInterface.swift new file mode 100644 index 00000000..a780518e --- /dev/null +++ b/GME Remit/Modules/RegisterModules/MobileVerification/Module Interface/MobileVerificationModuleInterface.swift @@ -0,0 +1,11 @@ +// +// MobileVerificationModuleInterface.swift +// GME Remit +// +// Created by Amrit Giri on 7/3/20. +//Copyright © 2020 Gobal Money Express Co. Ltd. All rights reserved. +// + +protocol MobileVerificationModuleInterface: class { + func verify(mobileNumber: String) +} diff --git a/GME Remit/Modules/RegisterModules/MobileVerification/User Interface/Presenter/MobileVerificationPresenter.swift b/GME Remit/Modules/RegisterModules/MobileVerification/User Interface/Presenter/MobileVerificationPresenter.swift new file mode 100644 index 00000000..18aa8924 --- /dev/null +++ b/GME Remit/Modules/RegisterModules/MobileVerification/User Interface/Presenter/MobileVerificationPresenter.swift @@ -0,0 +1,45 @@ +// +// MobileVerificationPresenter.swift +// GME Remit +// +// Created by Amrit Giri on 7/3/20. +//Copyright © 2020 Gobal Money Express Co. Ltd. All rights reserved. +// + +import Foundation + +class MobileVerificationPresenter { + + // MARK: Properties + + weak var view: MobileVerificationViewInterface? + var interactor: MobileVerificationInteractorInput? + var wireframe: MobileVerificationWireframeInput? + + // MARK: Converting entities +} + + // MARK: MobileVerification module interface + +extension MobileVerificationPresenter: MobileVerificationModuleInterface { + func verify(mobileNumber: String) { + self.view?.showLoading() + self.interactor?.verify(mobileNumber: mobileNumber) + } +} + +// MARK: MobileVerification interactor output interface + +extension MobileVerificationPresenter: MobileVerificationInteractorOutput { + func show(error: Error) { + self.view?.hideLoading() + self.view?.show(error: error.localizedDescription) + } + + func success(message: String) { + self.view?.hideLoading() + self.view?.show(message: message) + } + + +} diff --git a/GME Remit/Modules/RegisterModules/MobileVerification/User Interface/View/MobileVerification.storyboard b/GME Remit/Modules/RegisterModules/MobileVerification/User Interface/View/MobileVerification.storyboard new file mode 100644 index 00000000..cc6d7097 --- /dev/null +++ b/GME Remit/Modules/RegisterModules/MobileVerification/User Interface/View/MobileVerification.storyboard @@ -0,0 +1,135 @@ + + + + + + + + + + + + SanFranciscoDisplay-Bold + + + SanFranciscoDisplay-Regular + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/GME Remit/Modules/RegisterModules/MobileVerification/User Interface/View/MobileVerificationViewController.swift b/GME Remit/Modules/RegisterModules/MobileVerification/User Interface/View/MobileVerificationViewController.swift new file mode 100644 index 00000000..28c2a8b1 --- /dev/null +++ b/GME Remit/Modules/RegisterModules/MobileVerification/User Interface/View/MobileVerificationViewController.swift @@ -0,0 +1,120 @@ +// +// MobileVerificationViewController.swift +// GME Remit +// +// Created by Amrit Giri on 7/3/20. +//Copyright © 2020 Gobal Money Express Co. Ltd. All rights reserved. +// + +import UIKit + +class MobileVerificationViewController: UIViewController { + + struct StringConstants { + let proceedText = "proceed_text".localized() + let verificationHeader = "mobile_verification_header".localized() + let verificationSubtitle = "mobile_verification_subtitle".localized() + + let mobileNumber = "mobile_number_text".localized() + let mobilePlaceholder = "010xxxxxxxx" + let mobileNumberError = "kyc_mobile_invalid_number_error".localized() + + } + + // MARK: IBOutlets + var presenter: MobileVerificationModuleInterface? + + @IBOutlet weak var mobileTextField: ValidationTextField! + + // header labels + @IBOutlet weak var headerLabel: UILabel! + @IBOutlet weak var subtitleLabel: UILabel! + + // buttons + @IBOutlet weak var proceedBtn: UIButton! + + private var validDic = [ + "mobile": false + ] + + private var isValid = false { + didSet { + proceedBtn.isEnabled = isValid + proceedBtn.backgroundColor = isValid ? .themeRed : .lightGray + } + } + + // MARK: IBOutlets + + // MARK: VC's Life cycle + + override func viewDidLoad() { + super.viewDidLoad() + self.setup() + } + + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + self.setupPicturedNavBar() + } + + // MARK: IBActions + + @IBAction func proceed(_ sender: UIButton) { + self.presenter?.verify(mobileNumber: self.mobileTextField.text ?? "") + } + + // MARK: Other Functions + + private func setup() { + // all setup should be done here + self.isValid = false + self.configureLanguage() + } + + private func configureLanguage() { + headerLabel.text = StringConstants().verificationHeader + subtitleLabel.text = StringConstants().verificationSubtitle + + + mobileTextField.titleText = StringConstants().mobileNumber + mobileTextField.placeholder = StringConstants().mobilePlaceholder + mobileTextField.errorMessage = StringConstants().mobileNumberError + mobileTextField.validCondition = { $0.count > 9 && $0.count < 12} + mobileTextField.addTarget(self, action: #selector(editingChanged(_:)), for: .editingChanged) + + proceedBtn.setTitle(StringConstants().proceedText, for: .normal) + } + + @objc private func editingChanged(_ textField: UITextField) { + guard let tf = textField as? ValidationTextField else {return} + validDic["mobile"] = tf.isValid + isValid = validDic.allSatisfy { $0.value } + } +} + +// MARK: MobileVerificationViewInterface +extension MobileVerificationViewController: MobileVerificationViewInterface { + func showLoading() { + self.showProgressHud() + } + + func hideLoading() { + self.hideProgressHud() + } + + func show(error: String) { + self.alert(type: .error, message: error) + } + + func show(message: String) { + self.alertWithOk( + type: .success, + message: message, + title: "Success", + okTitle: "Ok" + ) { + + } + } +} diff --git a/GME Remit/Modules/RegisterModules/MobileVerification/User Interface/View/MobileVerificationViewInterface.swift b/GME Remit/Modules/RegisterModules/MobileVerification/User Interface/View/MobileVerificationViewInterface.swift new file mode 100644 index 00000000..5386c02e --- /dev/null +++ b/GME Remit/Modules/RegisterModules/MobileVerification/User Interface/View/MobileVerificationViewInterface.swift @@ -0,0 +1,14 @@ +// +// MobileVerificationViewInterface.swift +// GME Remit +// +// Created by Amrit Giri on 7/3/20. +//Copyright © 2020 Gobal Money Express Co. Ltd. All rights reserved. +// + +protocol MobileVerificationViewInterface: class { + func showLoading() + func hideLoading() + func show(error: String) + func show(message: String) +} diff --git a/GME Remit/Modules/RegisterModules/MobileVerification/User Interface/Wireframe/MobileVerificationWireframe.swift b/GME Remit/Modules/RegisterModules/MobileVerification/User Interface/Wireframe/MobileVerificationWireframe.swift new file mode 100644 index 00000000..357a9a89 --- /dev/null +++ b/GME Remit/Modules/RegisterModules/MobileVerification/User Interface/Wireframe/MobileVerificationWireframe.swift @@ -0,0 +1,34 @@ +// +// MobileVerificationWireframe.swift +// GME Remit +// +// Created by Amrit Giri on 7/3/20. +//Copyright © 2020 Gobal Money Express Co. Ltd. All rights reserved. +// + +import UIKit + +class MobileVerificationWireframe { + weak var view: UIViewController! +} + +extension MobileVerificationWireframe: MobileVerificationWireframeInput { + + var storyboardName: String {return "MobileVerification"} + + func getMainView() -> UIViewController { + let service = MobileVerificationService() + let interactor = MobileVerificationInteractor(service: service) + let presenter = MobileVerificationPresenter() + let viewController = viewControllerFromStoryboard(of: MobileVerificationViewController.self) + + viewController.presenter = presenter + interactor.output = presenter + presenter.interactor = interactor + presenter.wireframe = self + presenter.view = viewController + + self.view = viewController + return viewController + } +} diff --git a/GME Remit/Modules/RegisterModules/MobileVerification/User Interface/Wireframe/MobileVerificationWireframeInput.swift b/GME Remit/Modules/RegisterModules/MobileVerification/User Interface/Wireframe/MobileVerificationWireframeInput.swift new file mode 100644 index 00000000..05aecf9f --- /dev/null +++ b/GME Remit/Modules/RegisterModules/MobileVerification/User Interface/Wireframe/MobileVerificationWireframeInput.swift @@ -0,0 +1,13 @@ +// +// MobileVerificationWireframeInput.swift +// GME Remit +// +// Created by Amrit Giri on 7/3/20. +//Copyright © 2020 Gobal Money Express Co. Ltd. All rights reserved. +// + +import Foundation + +protocol MobileVerificationWireframeInput: WireframeInput { + +} diff --git a/GME Remit/Modules/SplashScreen/User Interface/Wireframe/SplashScreenWireframe.swift b/GME Remit/Modules/SplashScreen/User Interface/Wireframe/SplashScreenWireframe.swift index 44d04c3b..c2efcc17 100644 --- a/GME Remit/Modules/SplashScreen/User Interface/Wireframe/SplashScreenWireframe.swift +++ b/GME Remit/Modules/SplashScreen/User Interface/Wireframe/SplashScreenWireframe.swift @@ -11,7 +11,7 @@ import UIKit class SplashScreenWireframe { weak var view: UIViewController! lazy var loginWireframe = LoginWireframe() - lazy var registerWireFrame = RegisterWireframe() + lazy var registerWireFrame = MobileVerificationWireframe() } extension SplashScreenWireframe: SplashScreenWireframeInput { @@ -42,7 +42,7 @@ extension SplashScreenWireframe: SplashScreenWireframeInput { func register() { if let navigation = self.view.navigationController { - registerWireFrame.openRegistrationFromSplash(source: navigation) + self.registerWireFrame.pushMainView(in: navigation) } } } diff --git a/GME Remit/MultiLanguages/en.lproj/Localizable.strings b/GME Remit/MultiLanguages/en.lproj/Localizable.strings index 5d40ec9b..10ac7ccc 100644 --- a/GME Remit/MultiLanguages/en.lproj/Localizable.strings +++ b/GME Remit/MultiLanguages/en.lproj/Localizable.strings @@ -819,3 +819,9 @@ "GME_fraud_warning_text" = "Fraud Warning"; +//Mobile Verification +"mobile_verification_header" = "Verify Your Mobile Number"; +"complete_mobile_verification_header" = "Complete your mobile verification"; +"mobile_verification_subtitle" = "Please provide us your mobile number to verify and proceed for registration"; +"complete_mobile_verification_subtitle" = "Please enter the 6-digots otp sent to your mobile number"; +"proceed_text" = "Proceed";