Browse Source

mobile verification done

pull/1/head
Amrit Giri 4 years ago
parent
commit
00a3bfc3d3
  1. 124
      GME Remit.xcodeproj/project.pbxproj
  2. 8
      GME Remit.xcodeproj/xcshareddata/xcschemes/GME Remit.xcscheme
  3. 7
      GME Remit/APIs/Router/APIRouter.swift
  4. 2
      GME Remit/Modules/Login/User Interface/Wireframe/LoginWireframe.swift
  5. 39
      GME Remit/Modules/RegisterModules/MobileVerification/Application Logic/Interactor/MobileVerificationInteractor.swift
  6. 16
      GME Remit/Modules/RegisterModules/MobileVerification/Application Logic/Interactor/MobileVerificationInteractorIO.swift
  7. 32
      GME Remit/Modules/RegisterModules/MobileVerification/Application Logic/Service/MobileVerificationService.swift
  8. 17
      GME Remit/Modules/RegisterModules/MobileVerification/Application Logic/Service/MobileVerificationServiceType.swift
  9. 11
      GME Remit/Modules/RegisterModules/MobileVerification/Module Interface/MobileVerificationModuleInterface.swift
  10. 45
      GME Remit/Modules/RegisterModules/MobileVerification/User Interface/Presenter/MobileVerificationPresenter.swift
  11. 135
      GME Remit/Modules/RegisterModules/MobileVerification/User Interface/View/MobileVerification.storyboard
  12. 120
      GME Remit/Modules/RegisterModules/MobileVerification/User Interface/View/MobileVerificationViewController.swift
  13. 14
      GME Remit/Modules/RegisterModules/MobileVerification/User Interface/View/MobileVerificationViewInterface.swift
  14. 34
      GME Remit/Modules/RegisterModules/MobileVerification/User Interface/Wireframe/MobileVerificationWireframe.swift
  15. 13
      GME Remit/Modules/RegisterModules/MobileVerification/User Interface/Wireframe/MobileVerificationWireframeInput.swift
  16. 4
      GME Remit/Modules/SplashScreen/User Interface/Wireframe/SplashScreenWireframe.swift
  17. 6
      GME Remit/MultiLanguages/en.lproj/Localizable.strings

124
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 = "<group>"; };
7E364CEE24A46D27007D6E02 /* BalanceModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BalanceModel.swift; sourceTree = "<group>"; };
7E4DC74E24AB035C00815FA8 /* ActionSheetHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActionSheetHelper.swift; sourceTree = "<group>"; };
7E692A3A24AF091600F10D62 /* MobileVerificationModuleInterface.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MobileVerificationModuleInterface.swift; sourceTree = "<group>"; };
7E692A3D24AF091600F10D62 /* MobileVerificationServiceType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MobileVerificationServiceType.swift; sourceTree = "<group>"; };
7E692A3E24AF091600F10D62 /* MobileVerificationService.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MobileVerificationService.swift; sourceTree = "<group>"; };
7E692A4024AF091600F10D62 /* MobileVerificationInteractor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MobileVerificationInteractor.swift; sourceTree = "<group>"; };
7E692A4124AF091600F10D62 /* MobileVerificationInteractorIO.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MobileVerificationInteractorIO.swift; sourceTree = "<group>"; };
7E692A4424AF091600F10D62 /* MobileVerificationPresenter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MobileVerificationPresenter.swift; sourceTree = "<group>"; };
7E692A4624AF091600F10D62 /* MobileVerificationWireframe.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MobileVerificationWireframe.swift; sourceTree = "<group>"; };
7E692A4724AF091600F10D62 /* MobileVerificationWireframeInput.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MobileVerificationWireframeInput.swift; sourceTree = "<group>"; };
7E692A4924AF091600F10D62 /* MobileVerificationViewInterface.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MobileVerificationViewInterface.swift; sourceTree = "<group>"; };
7E692A4B24AF091600F10D62 /* MobileVerification.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = MobileVerification.storyboard; sourceTree = "<group>"; };
7E692A4C24AF091600F10D62 /* MobileVerificationViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MobileVerificationViewController.swift; sourceTree = "<group>"; };
7EC9DE0024A9AECE004A0AD8 /* RewardProduct.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RewardProduct.swift; sourceTree = "<group>"; };
7EC9DE0224A9AEEC004A0AD8 /* Branch.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Branch.swift; sourceTree = "<group>"; };
7EC9DE0424A9AF65004A0AD8 /* BranchContainer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BranchContainer.swift; sourceTree = "<group>"; };
@ -1311,6 +1333,7 @@
73138D9322B7509F001280D3 /* RegisterModules */ = {
isa = PBXGroup;
children = (
7E692A3824AF091600F10D62 /* MobileVerification */,
D96A4FE12146625C00CFD507 /* Register */,
73D168442398D6A000E3E01E /* UserAuthentication */,
);
@ -2771,6 +2794,88 @@
path = ActionSheet;
sourceTree = "<group>";
};
7E692A3824AF091600F10D62 /* MobileVerification */ = {
isa = PBXGroup;
children = (
7E692A3924AF091600F10D62 /* Module Interface */,
7E692A3B24AF091600F10D62 /* Application Logic */,
7E692A4224AF091600F10D62 /* User Interface */,
);
path = MobileVerification;
sourceTree = "<group>";
};
7E692A3924AF091600F10D62 /* Module Interface */ = {
isa = PBXGroup;
children = (
7E692A3A24AF091600F10D62 /* MobileVerificationModuleInterface.swift */,
);
path = "Module Interface";
sourceTree = "<group>";
};
7E692A3B24AF091600F10D62 /* Application Logic */ = {
isa = PBXGroup;
children = (
7E692A3C24AF091600F10D62 /* Service */,
7E692A3F24AF091600F10D62 /* Interactor */,
);
path = "Application Logic";
sourceTree = "<group>";
};
7E692A3C24AF091600F10D62 /* Service */ = {
isa = PBXGroup;
children = (
7E692A3D24AF091600F10D62 /* MobileVerificationServiceType.swift */,
7E692A3E24AF091600F10D62 /* MobileVerificationService.swift */,
);
path = Service;
sourceTree = "<group>";
};
7E692A3F24AF091600F10D62 /* Interactor */ = {
isa = PBXGroup;
children = (
7E692A4024AF091600F10D62 /* MobileVerificationInteractor.swift */,
7E692A4124AF091600F10D62 /* MobileVerificationInteractorIO.swift */,
);
path = Interactor;
sourceTree = "<group>";
};
7E692A4224AF091600F10D62 /* User Interface */ = {
isa = PBXGroup;
children = (
7E692A4324AF091600F10D62 /* Presenter */,
7E692A4524AF091600F10D62 /* Wireframe */,
7E692A4824AF091600F10D62 /* View */,
);
path = "User Interface";
sourceTree = "<group>";
};
7E692A4324AF091600F10D62 /* Presenter */ = {
isa = PBXGroup;
children = (
7E692A4424AF091600F10D62 /* MobileVerificationPresenter.swift */,
);
path = Presenter;
sourceTree = "<group>";
};
7E692A4524AF091600F10D62 /* Wireframe */ = {
isa = PBXGroup;
children = (
7E692A4624AF091600F10D62 /* MobileVerificationWireframe.swift */,
7E692A4724AF091600F10D62 /* MobileVerificationWireframeInput.swift */,
);
path = Wireframe;
sourceTree = "<group>";
};
7E692A4824AF091600F10D62 /* View */ = {
isa = PBXGroup;
children = (
7E692A4924AF091600F10D62 /* MobileVerificationViewInterface.swift */,
7E692A4B24AF091600F10D62 /* MobileVerification.storyboard */,
7E692A4C24AF091600F10D62 /* MobileVerificationViewController.swift */,
);
path = View;
sourceTree = "<group>";
};
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 = "<group>";
};
D96A4FF32146625C00CFD507 /* ViewModels */ = {
isa = PBXGroup;
children = (
);
path = ViewModels;
sourceTree = "<group>";
};
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 */,

8
GME Remit.xcodeproj/xcshareddata/xcschemes/GME Remit.xcscheme

@ -15,7 +15,7 @@
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "9FD260F31FD00458007A511D"
BuildableName = "GME Remit.app"
BuildableName = "Fast Remit.app"
BlueprintName = "GME Remit"
ReferencedContainer = "container:GME Remit.xcodeproj">
</BuildableReference>
@ -31,7 +31,7 @@
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "9FD260F31FD00458007A511D"
BuildableName = "GME Remit.app"
BuildableName = "Fast Remit.app"
BlueprintName = "GME Remit"
ReferencedContainer = "container:GME Remit.xcodeproj">
</BuildableReference>
@ -74,7 +74,7 @@
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "9FD260F31FD00458007A511D"
BuildableName = "GME Remit.app"
BuildableName = "Fast Remit.app"
BlueprintName = "GME Remit"
ReferencedContainer = "container:GME Remit.xcodeproj">
</BuildableReference>
@ -91,7 +91,7 @@
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "9FD260F31FD00458007A511D"
BuildableName = "GME Remit.app"
BuildableName = "Fast Remit.app"
BlueprintName = "GME Remit"
ReferencedContainer = "container:GME Remit.xcodeproj">
</BuildableReference>

7
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 [

2
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()
}

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

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

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

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

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

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

135
GME Remit/Modules/RegisterModules/MobileVerification/User Interface/View/MobileVerification.storyboard

@ -0,0 +1,135 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="16096" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="HSb-ou-7T5">
<device id="retina4_7" orientation="portrait" appearance="light"/>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="16086"/>
<capability name="Named colors" minToolsVersion="9.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<customFonts key="customFonts">
<array key="SanFranciscoDisplay-Bold.otf">
<string>SanFranciscoDisplay-Bold</string>
</array>
<array key="SanFranciscoDisplay-Regular.otf">
<string>SanFranciscoDisplay-Regular</string>
</array>
</customFonts>
<scenes>
<!--MobileVerification-->
<scene sceneID="R60-Pu-Hpy">
<objects>
<viewController storyboardIdentifier="MobileVerificationViewController" title="MobileVerification" id="HSb-ou-7T5" customClass="MobileVerificationViewController" customModule="Fast_Remit" customModuleProvider="target" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="y1H-iV-BwG"/>
<viewControllerLayoutGuide type="bottom" id="PYB-Kq-ghm"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" placeholderIntrinsicWidth="375" placeholderIntrinsicHeight="647" id="qZM-lk-mz7">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="15" translatesAutoresizingMaskIntoConstraints="NO" id="sJ6-6k-Wf9">
<rect key="frame" x="46" y="10" width="283" height="130.5"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Verify Your Mobile Number" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="nma-Ml-oFF">
<rect key="frame" x="0.0" y="0.0" width="283" height="56"/>
<fontDescription key="fontDescription" name="SanFranciscoDisplay-Bold" family="San Francisco Display" pointSize="24"/>
<color key="textColor" name="ThemeRedWhite"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Please provide us your mobile number to verify and proceed for registration" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Acu-Dz-xlE">
<rect key="frame" x="0.0" y="71" width="283" height="59.5"/>
<fontDescription key="fontDescription" name="SanFranciscoDisplay-Bold" family="San Francisco Display" pointSize="17"/>
<color key="textColor" name="ThemeText"/>
<nil key="highlightedColor"/>
</label>
</subviews>
</stackView>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Nj0-cy-YNq">
<rect key="frame" x="40" y="170.5" width="295" height="34"/>
<subviews>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" distribution="fillEqually" spacing="20" translatesAutoresizingMaskIntoConstraints="NO" id="q2D-4F-RGK">
<rect key="frame" x="0.0" y="0.0" width="295" height="34"/>
<subviews>
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="Enter your Mobile No" textAlignment="natural" minimumFontSize="17" clearButtonMode="whileEditing" translatesAutoresizingMaskIntoConstraints="NO" id="DIS-0f-aOF" customClass="ValidationTextField" customModule="Fast_Remit" customModuleProvider="target">
<rect key="frame" x="0.0" y="0.0" width="295" height="34"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<color key="textColor" name="ThemeText"/>
<fontDescription key="fontDescription" name="SanFranciscoDisplay-Regular" family="San Francisco Display" pointSize="14"/>
<textInputTraits key="textInputTraits" keyboardType="phonePad"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="boolean" keyPath="isShowTitle" value="NO"/>
<userDefinedRuntimeAttribute type="image" keyPath="leftImage" value="ic_mobile"/>
<userDefinedRuntimeAttribute type="color" keyPath="leftImageTintColor">
<color key="value" name="ThemeText"/>
</userDefinedRuntimeAttribute>
<userDefinedRuntimeAttribute type="boolean" keyPath="isUseTitle" value="NO"/>
</userDefinedRuntimeAttributes>
</textField>
</subviews>
</stackView>
</subviews>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstItem="q2D-4F-RGK" firstAttribute="leading" secondItem="Nj0-cy-YNq" secondAttribute="leading" id="6aV-NO-MOI"/>
<constraint firstAttribute="trailing" secondItem="q2D-4F-RGK" secondAttribute="trailing" id="VmB-7X-tPV"/>
<constraint firstItem="q2D-4F-RGK" firstAttribute="top" secondItem="Nj0-cy-YNq" secondAttribute="top" id="bxr-iB-fI8"/>
<constraint firstAttribute="bottom" secondItem="q2D-4F-RGK" secondAttribute="bottom" id="c6s-wX-avw"/>
</constraints>
</view>
<button opaque="NO" contentMode="scaleToFill" enabled="NO" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="5dA-VW-4uO">
<rect key="frame" x="30" y="234.5" width="315" height="50"/>
<color key="backgroundColor" white="0.66666666669999997" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstAttribute="height" constant="50" id="Vgh-Tp-SGI"/>
</constraints>
<fontDescription key="fontDescription" name="SanFranciscoDisplay-Regular" family="San Francisco Display" pointSize="18"/>
<state key="normal" title="Proceed">
<color key="titleColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</state>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
<integer key="value" value="25"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
<connections>
<action selector="proceed:" destination="HSb-ou-7T5" eventType="touchUpInside" id="N2E-O0-jfk"/>
</connections>
</button>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstAttribute="trailing" secondItem="Nj0-cy-YNq" secondAttribute="trailing" constant="40" id="7G6-Ep-1wN"/>
<constraint firstItem="sJ6-6k-Wf9" firstAttribute="leading" secondItem="qZM-lk-mz7" secondAttribute="leadingMargin" constant="30" id="IHn-uE-ilj"/>
<constraint firstItem="5dA-VW-4uO" firstAttribute="top" secondItem="Nj0-cy-YNq" secondAttribute="bottom" constant="30" id="K98-4a-2mb"/>
<constraint firstItem="Nj0-cy-YNq" firstAttribute="top" secondItem="sJ6-6k-Wf9" secondAttribute="bottom" constant="30" id="NXJ-h6-wPk"/>
<constraint firstItem="5dA-VW-4uO" firstAttribute="leading" secondItem="qZM-lk-mz7" secondAttribute="leading" constant="30" id="Q5X-eY-k6d"/>
<constraint firstAttribute="trailingMargin" secondItem="sJ6-6k-Wf9" secondAttribute="trailing" constant="30" id="UBG-U8-Rt8"/>
<constraint firstItem="sJ6-6k-Wf9" firstAttribute="top" secondItem="y1H-iV-BwG" secondAttribute="bottom" constant="10" id="p5p-DQ-hc7"/>
<constraint firstAttribute="trailing" secondItem="5dA-VW-4uO" secondAttribute="trailing" constant="30" id="pm5-Yj-Uuh"/>
<constraint firstItem="Nj0-cy-YNq" firstAttribute="leading" secondItem="qZM-lk-mz7" secondAttribute="leading" constant="40" id="qXc-d5-vyn"/>
</constraints>
</view>
<connections>
<outlet property="headerLabel" destination="nma-Ml-oFF" id="P7F-8E-oRc"/>
<outlet property="mobileTextField" destination="DIS-0f-aOF" id="RvJ-PB-GDm"/>
<outlet property="proceedBtn" destination="5dA-VW-4uO" id="gRq-SI-BCe"/>
<outlet property="subtitleLabel" destination="Acu-Dz-xlE" id="fLX-6A-yC8"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="8je-5K-XuW" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="-91" y="233"/>
</scene>
</scenes>
<color key="tintColor" red="0.78177064659999995" green="0.55228364470000002" blue="0.018981300289999999" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<resources>
<image name="ic_mobile" width="48" height="48"/>
<namedColor name="ThemeRedWhite">
<color red="0.92941176470588238" green="0.10588235294117647" blue="0.14117647058823529" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</namedColor>
<namedColor name="ThemeText">
<color red="0.28999999165534973" green="0.28999999165534973" blue="0.28999999165534973" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</namedColor>
</resources>
</document>

120
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"
) {
}
}
}

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

34
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
}
}

13
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 {
}

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

6
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";
Loading…
Cancel
Save