You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

957 lines
39 KiB

5 years ago
5 years ago
5 years ago
4 years ago
4 years ago
4 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
4 years ago
4 years ago
4 years ago
5 years ago
5 years ago
4 years ago
4 years ago
5 years ago
5 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
5 years ago
  1. //
  2. // APIRouter.swift
  3. // GME Remit
  4. //
  5. // Created by InKwon James Kim on 09/08/2019.
  6. // Copyright © 2019 Gobal Money Express Co. Ltd. All rights reserved.
  7. //
  8. import Foundation
  9. import Alamofire
  10. import Localize_Swift
  11. import ObjectMapper
  12. import RxSwift
  13. class APIManager {
  14. static let shared = APIManager()
  15. let manager: SessionManager
  16. init() {
  17. let configure = URLSessionConfiguration.default
  18. configure.timeoutIntervalForRequest = 300.0
  19. configure.timeoutIntervalForResource = 300.0
  20. manager = Alamofire.SessionManager(configuration: configure)
  21. }
  22. }
  23. enum APIRouter {
  24. // MARK: - Login
  25. case accesscode(username: String, password: String)
  26. case customerProfile(firebaseToken: String)
  27. // MARK: - Register
  28. case requestOTP(mobileNumber: String)
  29. case submitOTP(otp: String)
  30. case customerRegister(registerModel: RegisterRequestModel, firebaseToken: String)
  31. case passwordReset(userName: String)
  32. case validation(userName: String, idNumber: String, idType: String)
  33. case countriesServices
  34. case calculateDefExRate(model: ExchangeRateRequestModel)
  35. // MARK: - Existing User Registration
  36. case oldUserAccessRequest(idNumber: String, mobileNumber: String, dob: String)
  37. case oldUserRegister(registerModel: OldUserRegisterRequestModel, firebaseToken: String)
  38. case loadExistingUserInformation
  39. case submitExistingCustomerKYC(model: KYCSaveInformation)
  40. // MARK: - New User Registration
  41. case verifyIdNumber(id: String, type: String)
  42. case newUserRegister(model: NewUserRegisterModel, fcmToken: String)
  43. case submitKYC(model: KYCSaveInformation)
  44. // MARK: - Receiver
  45. case fetchRecipients(senderID: String)
  46. case dynamicReceiver(username: String, countryID: String, serviceTypeID: String)
  47. case fetchCountriesAndServiceTypes(username: String)
  48. case addRecipient(senderID: String, recipient: Recipient)
  49. case editRecipient(senderID: String, recipient: Recipient)
  50. case deleteRecipient(senderID: String, recipientID: String)
  51. case fetchBranches(countryCode: String, bankID: String, branchName: String)
  52. case validateAccount(validateModel: ValidateAccountRequest)
  53. // MARK: - Inbound
  54. case fetchInboundTransactionHistory(from: String, to: String)
  55. // MARK: - New Registration
  56. case loadKYCInformation
  57. case saveKYCInformation(model: KYCSave)
  58. case requestPennyTestAtRegister(resend: String)
  59. case pennyTestSubmitAtRegister(accountNumber: String, certNumber: String)
  60. case fetchKFTCParameterForRegister
  61. case customerInfoAgree(_ flag: Bool)
  62. case checkInfoAgree
  63. // MARK: - New Registration
  64. case getNotifyInfo
  65. case getNotifyDetailInfo(idx: String)
  66. // MARK: - Edit Profile
  67. case profileCheckPassword(model: ChangePersonalInformationModel, target: String)
  68. case profileValidationOTP(OTPPassword: String)
  69. case profileChangeInformation(newValue: String, target: String)
  70. case resendOTPForChangeProfileInformation(newValue: String)
  71. case fetchPersonalInformation
  72. // MARK: - Transaction
  73. case searchTxnByControlNumber(controlNumber: String)
  74. case redeemCashPayment(controlNumber: String, txnId: String, password: String)
  75. //Mark: - Withdraw From Wallet
  76. case withdrawWalletRequest(amount: String)
  77. case withdrawFromWallet(txnId: String,amount: String, password: String)
  78. }
  79. // MARK: - Request
  80. extension APIRouter: ApiServiceType {
  81. private var manager: SessionManager {
  82. return APIManager.shared.manager
  83. }
  84. private var uuid: String {
  85. guard let uuid = GMEDB.shared.app.string(.uuid) else {
  86. let uuid = UUID().uuidString
  87. GMEDB.shared.app.set(uuid, .uuid)
  88. return uuid
  89. }
  90. return uuid
  91. }
  92. private var beforeLoginHeader: [String: String] {
  93. let currentLanguage = Localize.currentLanguage()
  94. let lang = Utility.getLanguageHeader(for: currentLanguage)
  95. let authValue = "172017F9EC11222E8107142733:QRK2UM0Q:\(uuid)".toBase64()
  96. return [
  97. "Authorization": "Basic \(authValue)",
  98. "GME-TOKEN" : "39587YT398@FBQOW8RY3#948R7GB@CNEQW987GF87$TD18$1981..919@@##joghndvberteiru",
  99. "Content-Type": "application/json",
  100. "lang" : lang
  101. ]
  102. }
  103. private var afterLoginHeader: [String: String] {
  104. let accessCode = GMEDB.shared.user.string(.accessCode) ?? ""
  105. let currentLanguage = Localize.currentLanguage()
  106. let lang = Utility.getLanguageHeader(for: currentLanguage)
  107. return [
  108. "Authorization": "Bearer " + accessCode,
  109. "GME-TOKEN" : "39587YT398@FBQOW8RY3#948R7GB@CNEQW987GF87$TD18$1981..919@@##joghndvberteiru",
  110. "Content-Type": "application/json",
  111. "clientId": Utility.getMyKftcClientId(),
  112. "lang" : lang
  113. ]
  114. }
  115. func json(
  116. encoding: ParameterEncoding = JSONEncoding.default,
  117. needsAuthorization: Bool = true,
  118. success: @escaping () -> Void,
  119. failure: @escaping (Error) -> Void
  120. ) {
  121. guard
  122. let isReachable = NetworkReachabilityManager()?.isReachable,
  123. isReachable else {
  124. let error = NSError(
  125. domain: "NETWORK_REACHABILITY_DOMAIN",
  126. code: -99,
  127. message: "No Internet connection found. Check your connection."
  128. )
  129. return failure(error)
  130. }
  131. manager.request(
  132. self.endpoint,
  133. method: self.method,
  134. parameters: self.parameters,
  135. encoding: encoding,
  136. headers: needsAuthorization ? afterLoginHeader : beforeLoginHeader
  137. ).handle(
  138. success: { (response: ResponseContainer<Void>) in
  139. if (response.errorCode ?? "") != "0" {
  140. let code = Int(response.errorCode ?? "1") ?? 1
  141. let error = NSError(domain: "Network", code: code, message: response.message ?? "")
  142. failure(error)
  143. } else {
  144. success()
  145. }
  146. },
  147. failure: failure
  148. )
  149. }
  150. func json<Element>(
  151. encoding: ParameterEncoding = JSONEncoding.default,
  152. needsAuthorization: Bool = true,
  153. success: @escaping (Element) -> Void,
  154. failure: @escaping (Error) -> Void
  155. ) {
  156. guard
  157. let isReachable = NetworkReachabilityManager()?.isReachable,
  158. isReachable else {
  159. let error = NSError(
  160. domain: "NETWORK_REACHABILITY_DOMAIN",
  161. code: -99,
  162. message: "No Internet connection found. Check your connection."
  163. )
  164. return failure(error)
  165. }
  166. manager.request(
  167. self.endpoint,
  168. method: self.method,
  169. parameters: self.parameters,
  170. encoding: encoding,
  171. headers: needsAuthorization ? afterLoginHeader : beforeLoginHeader
  172. ).handle(
  173. success: { (response: ResponseContainer<Element>) in
  174. if (response.errorCode ?? "") != "0" {
  175. let code = Int(response.errorCode ?? "1") ?? 1
  176. let error = NSError(domain: "Network", code: code, message: response.message ?? "")
  177. failure(error)
  178. } else {
  179. guard let data = response.data else {
  180. let error = NSError(domain: "Network", code: 0, message: "Data is nil")
  181. failure(error)
  182. return
  183. }
  184. success(data)
  185. }
  186. },
  187. failure: failure
  188. )
  189. }
  190. func json<Element: Mappable>(
  191. encoding: ParameterEncoding = JSONEncoding.default,
  192. needsAuthorization: Bool = true,
  193. success: @escaping (Element) -> Void,
  194. failure: @escaping (Error) -> Void
  195. ) {
  196. guard
  197. let isReachable = NetworkReachabilityManager()?.isReachable,
  198. isReachable else {
  199. let error = NSError(
  200. domain: "NETWORK_REACHABILITY_DOMAIN",
  201. code: -99,
  202. message: "No Internet connection found. Check your connection."
  203. )
  204. return failure(error)
  205. }
  206. manager.request(
  207. self.endpoint,
  208. method: self.method,
  209. parameters: self.parameters,
  210. encoding: encoding,
  211. headers: needsAuthorization ? afterLoginHeader : beforeLoginHeader
  212. )
  213. .handle(
  214. success: { (response: ResponseContainerObject<Element>) in
  215. if (response.errorCode ?? "") != "0" {
  216. let code = Int(response.errorCode ?? "1") ?? 1
  217. let error = NSError(domain: "Network", code: code, message: response.message ?? "")
  218. failure(error)
  219. } else {
  220. guard let data = response.data else {
  221. let error = NSError(domain: "Network", code: 0, message: "Data is nil")
  222. failure(error)
  223. return
  224. }
  225. success(data)
  226. }
  227. },
  228. failure: failure
  229. )
  230. }
  231. func json<Element: Mappable>(
  232. encoding: ParameterEncoding = JSONEncoding.default,
  233. needsAuthorization: Bool = true,
  234. success: @escaping ([Element]) -> Void,
  235. failure: @escaping (Error) -> Void
  236. ) {
  237. guard
  238. let isReachable = NetworkReachabilityManager()?.isReachable,
  239. isReachable else {
  240. let error = NSError(
  241. domain: "NETWORK_REACHABILITY_DOMAIN",
  242. code: -99,
  243. message: "No Internet connection found. Check your connection."
  244. )
  245. return failure(error)
  246. }
  247. manager.request(
  248. self.endpoint,
  249. method: self.method,
  250. parameters: self.parameters,
  251. encoding: encoding,
  252. headers: needsAuthorization ? afterLoginHeader : beforeLoginHeader
  253. )
  254. .handle(
  255. success: { (response: ResponseContainerArray<Element>) in
  256. if (response.errorCode ?? "") != "0" {
  257. let code = Int(response.errorCode ?? "1") ?? 1
  258. let error = NSError(domain: "Network", code: code, message: response.message ?? "")
  259. failure(error)
  260. } else {
  261. guard let data = response.data else {
  262. let error = NSError(domain: "Network", code: 0, message: "Data is nil")
  263. failure(error)
  264. return
  265. }
  266. success(data)
  267. }
  268. },
  269. failure: failure
  270. )
  271. }
  272. func request<T: Mappable>(
  273. encoding: ParameterEncoding = JSONEncoding.default,
  274. needsAuthorization: Bool = true,
  275. success: @escaping (T) -> Void,
  276. failure: @escaping (Error) -> Void
  277. ) {
  278. guard
  279. let isReachable = NetworkReachabilityManager()?.isReachable,
  280. isReachable else {
  281. let error = NSError(
  282. domain: "NETWORK_REACHABILITY_DOMAIN",
  283. code: -99,
  284. message: "No Internet connection found. Check your connection."
  285. )
  286. return failure(error)
  287. }
  288. manager.request(
  289. self.endpoint,
  290. method: self.method,
  291. parameters: self.parameters,
  292. encoding: encoding,
  293. headers: needsAuthorization ? afterLoginHeader : beforeLoginHeader
  294. ).handle(success: success, failure: failure)
  295. }
  296. func kftcRequest<T: Mappable>(
  297. header: [String: String],
  298. encoding: ParameterEncoding = JSONEncoding.default,
  299. success: @escaping (T) -> Void,
  300. failure: @escaping (Error) -> Void
  301. ) {
  302. guard
  303. let isReachable = NetworkReachabilityManager()?.isReachable,
  304. isReachable else {
  305. let error = NSError(
  306. domain: "NETWORK_REACHABILITY_DOMAIN",
  307. code: -99,
  308. message: "No Internet connection found. Check your connection."
  309. )
  310. return failure(error)
  311. }
  312. manager.request(
  313. self.endpoint,
  314. method: self.method,
  315. parameters: self.parameters,
  316. encoding: encoding,
  317. headers: header
  318. ).handle(success: success, failure: failure)
  319. }
  320. func requestMultipart<T: Mappable>(
  321. images: [String: Data],
  322. encoding: Alamofire.ParameterEncoding = URLEncoding.default,
  323. needsAuthorization: Bool = true,
  324. success: @escaping (T) -> Void,
  325. failure: @escaping (Error) -> Void
  326. ) {
  327. guard
  328. let isReachable = NetworkReachabilityManager()?.isReachable,
  329. isReachable else {
  330. let error = NSError(
  331. domain: "NETWORK_REACHABILITY_DOMAIN",
  332. code: -99,
  333. message: "No Internet connection found. Check your connection."
  334. )
  335. return failure(error)
  336. }
  337. manager.upload(
  338. multipartFormData: { multipartFormData in
  339. if !images.isEmpty {
  340. images.forEach({ (data) in
  341. multipartFormData.append(
  342. data.value,
  343. withName: data.key,
  344. fileName: data.key + ".jpeg",
  345. mimeType: "image/jpeg"
  346. )
  347. })
  348. }
  349. self.parameters?.forEach { (params) in
  350. multipartFormData
  351. .append("\(params.value)".data(using: String.Encoding.utf8)!, withName: params.key as String)
  352. }
  353. },
  354. usingThreshold: UInt64(),
  355. to: self.endpoint,
  356. method: self.method,
  357. headers: needsAuthorization ? afterLoginHeader : beforeLoginHeader,
  358. encodingCompletion: { encodingResult in
  359. switch encodingResult {
  360. case .success(let upload, _, _):
  361. upload.handle(success: success, failure: failure)
  362. case .failure:
  363. let error = NSError(
  364. domain: "NETWORK_REACHABILITY_DOMAIN",
  365. code: -99,
  366. message: "No Internet connection found. Check your connection."
  367. )
  368. failure(error)
  369. }
  370. }
  371. )
  372. }
  373. }
  374. // MARK: - Endpoint
  375. extension APIRouter {
  376. private var endpoint: String {
  377. switch self {
  378. case .accesscode:
  379. return "\(baseUrl)/users/access-code"
  380. case .customerProfile:
  381. return "\(baseUrl)/mobile/CustomerProfile"
  382. case .requestOTP:
  383. return "\(baseUrl)/mobile/requestOTP"
  384. case .submitOTP:
  385. return "\(baseUrl)/mobile/submitOTP"
  386. case .customerRegister:
  387. return "\(baseUrlWithoutVersion)v3/mobile/customerRegister"
  388. case .passwordReset:
  389. return "\(baseUrl)/mobile/passwordReset"
  390. case .validation:
  391. return "\(baseUrlWithoutVersion)v3/validation"
  392. case .oldUserAccessRequest:
  393. return "\(baseUrlWithoutVersion)v1/mobile/oldUserAccessRequest"
  394. case .countriesServices:
  395. return "\(baseUrl)/mobile/countriesServices"
  396. case .calculateDefExRate:
  397. return "\(baseUrl)/mobile/calculateDefExRate"
  398. case .dynamicReceiver(let username, let countryID, let serviceType):
  399. let path = "\(username)/dynamicField?countryId=\(countryID)&serviceType=\(serviceType)"
  400. return "\(baseUrlWithoutVersion)v3/mobile/receiver/\(path)"
  401. case .fetchRecipients(let senderID):
  402. return "\(baseUrlWithoutVersion)v3/mobile/\(senderID)/receiverinfo"
  403. case .fetchCountriesAndServiceTypes(let username):
  404. return "\(baseUrlWithoutVersion)v3/mobile/\(username)/FetchCountriesAndServiceTypes"
  405. case .addRecipient(let senderID, _):
  406. return "\(baseUrlWithoutVersion)v3/mobile/\(senderID)/receiverinfo/add"
  407. case .editRecipient(let senderID, let recipient):
  408. let recipientID = recipient.receiverID ?? ""
  409. return "\(baseUrlWithoutVersion)v3/mobile/\(senderID)/receiverinfo/modify/\(recipientID)"
  410. case .deleteRecipient(let senderID, let recipientID):
  411. return "\(baseUrlWithoutVersion)/v3/mobile/\(senderID)/receiverinfo/remove/\(recipientID)"
  412. case .fetchBranches(let countryCode, let bankID, let branchName):
  413. return "\(baseUrl)/mobile/sendmoney/load/branch/\(countryCode)/\(bankID)/?search=\(branchName)"
  414. case .validateAccount:
  415. return "\(baseUrl)/mobile/sendmoney/validation/account"
  416. case .fetchInboundTransactionHistory:
  417. let senderId = GMEDB.shared.user.string(.senderId) ?? ""
  418. return "\(baseUrl)/inbound/mobile/tranHistory/\(senderId)"
  419. case .loadKYCInformation:
  420. let userID = GMEDB.shared.user.string(.userId) ?? ""
  421. return "\(baseUrlWithoutVersion)v4/mobile/loadform/\(userID)/kyc"
  422. case .loadExistingUserInformation:
  423. let userID = GMEDB.shared.user.string(.userId) ?? ""
  424. return "\(baseUrlWithoutVersion)v4/mobile/loadform/\(userID)/kycExistingCustomer"
  425. case .saveKYCInformation:
  426. return "\(baseUrlWithoutVersion)/v4/mobile/RegisterKyc"
  427. case .submitKYC:
  428. return "\(baseUrlWithoutVersion)v1/mobile/RegisterKyc"
  429. case .submitExistingCustomerKYC:
  430. return "\(baseUrlWithoutVersion)v1/mobile/RegisterKycExistingCustomer"
  431. case .requestPennyTestAtRegister(let resend):
  432. let userID = GMEDB.shared.user.string(.userId) ?? ""
  433. return "\(baseUrl)/mobile/pennytest/start/\(userID)?reSendCode=\(resend)"
  434. case .fetchKFTCParameterForRegister:
  435. let userID = GMEDB.shared.user.string(.userId) ?? ""
  436. return "\(baseUrlWithoutVersion)/v4/GetKftcParameters/\(userID)"
  437. case .pennyTestSubmitAtRegister:
  438. return "\(baseUrl)/mobile/pennytest/getcertified"
  439. case .customerInfoAgree(let flag):
  440. let userID = GMEDB.shared.user.string(.userId) ?? ""
  441. return "\(baseUrlWithoutVersion)v3/mobile/customerInfoAgree/\(userID)?agreeYn=\(flag ? "Y" : "N")"
  442. case .checkInfoAgree:
  443. let userID = GMEDB.shared.user.string(.userId) ?? ""
  444. return "\(baseUrl)/mobile/CheckInfoAgree/\(userID)"
  445. case .getNotifyInfo:
  446. return "\(baseUrl)/mobile/GetNotifyInfo"
  447. case .getNotifyDetailInfo:
  448. return "\(baseUrl)/mobile/GetNotifyDetailInfo"
  449. case .profileCheckPassword:
  450. return "\(baseUrlWithoutVersion)v1/mobile/CheckPassword"
  451. case .profileValidationOTP:
  452. return "\(baseUrlWithoutVersion)v1/mobile/ValidationOTP"
  453. case .profileChangeInformation:
  454. return "\(baseUrlWithoutVersion)v1/mobile/ChangeInformation"
  455. case .resendOTPForChangeProfileInformation:
  456. return "\(baseUrlWithoutVersion)v1/mobile/ReSendOTP"
  457. case .fetchPersonalInformation:
  458. return "\(baseUrlWithoutVersion)v1/mobile/ProfilepersonalInformation"
  459. case .searchTxnByControlNumber:
  460. return "\(baseUrl)/mobile/searchTxnByControlNumber"
  461. case .redeemCashPayment:
  462. return "\(baseUrl)/mobile/redeemCashPayment"
  463. case .withdrawWalletRequest:
  464. return "\(baseUrl)/mobile/withdrawWalletRequest"
  465. case .withdrawFromWallet:
  466. return "\(baseUrl)/mobile/withdrawFromWallet"
  467. case .oldUserRegister:
  468. return "\(baseUrlWithoutVersion)v1/mobile/oldUserRegister"
  469. case .verifyIdNumber:
  470. return "\(baseUrlWithoutVersion)v1/mobile/verifyIdNumber"
  471. case .newUserRegister:
  472. return "\(baseUrlWithoutVersion)v1/mobile/newUserRegister"
  473. }
  474. }
  475. }
  476. // MARK: - Method
  477. extension APIRouter {
  478. private var method: HTTPMethod {
  479. switch self {
  480. case .accesscode:
  481. return .post
  482. case .customerProfile:
  483. return .post
  484. case .requestOTP:
  485. return .post
  486. case .submitOTP:
  487. return .post
  488. case .customerRegister:
  489. return .post
  490. case .passwordReset:
  491. return .post
  492. case .validation:
  493. return .post
  494. case .oldUserAccessRequest:
  495. return .post
  496. case .countriesServices:
  497. return .get
  498. case .calculateDefExRate:
  499. return .post
  500. case .dynamicReceiver:
  501. return .get
  502. case .fetchRecipients:
  503. return .get
  504. case .fetchCountriesAndServiceTypes:
  505. return .get
  506. case .addRecipient:
  507. return .post
  508. case .editRecipient:
  509. return .post
  510. case .deleteRecipient:
  511. return .post
  512. case .fetchBranches:
  513. return .post
  514. case .validateAccount:
  515. return .post
  516. case .fetchInboundTransactionHistory:
  517. return .post
  518. case .loadKYCInformation:
  519. return .get
  520. case .loadExistingUserInformation:
  521. return .get
  522. case .saveKYCInformation:
  523. return .post
  524. case .submitKYC:
  525. return .post
  526. case .submitExistingCustomerKYC:
  527. return .post
  528. case .requestPennyTestAtRegister:
  529. return .post
  530. case .fetchKFTCParameterForRegister:
  531. return .get
  532. case .pennyTestSubmitAtRegister:
  533. return .post
  534. case .customerInfoAgree:
  535. return .get
  536. case .checkInfoAgree:
  537. return .post
  538. case .getNotifyInfo:
  539. return .post
  540. case .getNotifyDetailInfo:
  541. return .post
  542. case .profileCheckPassword:
  543. return .post
  544. case .profileValidationOTP:
  545. return .post
  546. case .profileChangeInformation:
  547. return .post
  548. case .resendOTPForChangeProfileInformation:
  549. return .post
  550. case .fetchPersonalInformation:
  551. return .post
  552. case .searchTxnByControlNumber:
  553. return .post
  554. case .redeemCashPayment:
  555. return .post
  556. case .withdrawWalletRequest, .withdrawFromWallet:
  557. return .post
  558. case .oldUserRegister:
  559. return .post
  560. case .verifyIdNumber:
  561. return .post
  562. case .newUserRegister:
  563. return .post
  564. }
  565. }
  566. }
  567. // MARK: - Parameter
  568. extension APIRouter {
  569. private var parameters: Parameters? {
  570. switch self.method {
  571. case .post:
  572. switch self {
  573. case .accesscode(let username, let password):
  574. return [
  575. "userId": username,
  576. "password": password
  577. ]
  578. case .customerProfile(let firebaseToken):
  579. return [
  580. "userId" : Utility.getMyUserName(),
  581. "uuid": self.uuid,
  582. "appVersion": Utility.getAppVersion() ?? "",
  583. "phoneBrand": UIDevice.modelName,
  584. "phoneOs": Utility.getPhoneOs(),
  585. "fcmId": firebaseToken,
  586. "osVersion": Utility.getOsVersion()
  587. ]
  588. case .requestOTP(let mobileNumber):
  589. return ["mobileNumber" : mobileNumber]
  590. case .submitOTP(let otp):
  591. return [
  592. "mobileNumber" : GMEDB.shared.register.string(.mobileNumber) ?? "",
  593. "OTP" : otp
  594. ]
  595. case .customerRegister(let registerModel, let firebaseToken):
  596. return [
  597. "username": registerModel.username ?? "",
  598. "password": registerModel.encryptedPassword ?? "",
  599. "nativecountry": registerModel.nativeCountry ?? "",
  600. "mobilenumber": registerModel.mobileNumber ?? "",
  601. "clientId": Utility.getCliendId(),
  602. "uuid": self.uuid,
  603. "appVersion": Utility.getAppVersion() ?? "",
  604. "phoneBrand": UIDevice.modelName,
  605. "phoneOs": Utility.getPhoneOs(),
  606. "fcmId": firebaseToken,
  607. "osVersion": Utility.getOsVersion(),
  608. "referenceId": GMEDB.shared.register.string(.referenceId) ?? ""
  609. ]
  610. case .oldUserRegister(let registerModel, let firebaseToken):
  611. return [
  612. "UserId": GMEDB.shared.user.string(.userId) ?? "",
  613. "referenceId": GMEDB.shared.register.string(.referenceId) ?? "",
  614. "Password": registerModel.password ?? "",
  615. "ConfirmPassword": registerModel.confirmPassword ?? "",
  616. "TxnPin": registerModel.txnPin ?? "",
  617. "ConfirmTxnPin": registerModel.confirmTxnPin ?? "",
  618. "clientId": GMEDB.shared.generatedUserId.string(.generatedUserId) ?? "",
  619. "uuid": self.uuid,
  620. "appVersion": Utility.getAppVersion() ?? "",
  621. "phoneBrand": UIDevice.modelName,
  622. "phoneOS": Utility.getPhoneOs(),
  623. "fcmId": firebaseToken,
  624. "osVersion": Utility.getOsVersion(),
  625. "referralCode": registerModel.referralCode ?? ""
  626. ]
  627. case .newUserRegister(let model, let fcmToken):
  628. return [
  629. "ResidenceCardNumber": GMEDB.shared.user.string(.userId) ?? "",
  630. "UserId": model.userId ?? "",
  631. "Password": model.password ?? "",
  632. "ConfirmPassword": model.confirmPassword ?? "",
  633. "clientId": Utility.getCliendId(),
  634. "uuid": self.uuid,
  635. "appVersion": Utility.getAppVersion() ?? "",
  636. "phoneBrand": UIDevice.modelName,
  637. "phoneOS": Utility.getPhoneOs(),
  638. "fcmId": fcmToken,
  639. "osVersion": Utility.getOsVersion(),
  640. "referralCode": model.referralCode ?? ""
  641. ]
  642. case .passwordReset(let userName):
  643. return ["username": userName]
  644. case .validation(let userName, let idNumber, let idType):
  645. return [
  646. "Username": userName,
  647. "IdNumber": idNumber,
  648. "IdType": idType
  649. ]
  650. case .oldUserAccessRequest(let idNumber, let mobileNumber, let dob):
  651. return [
  652. "IdNumber": idNumber,
  653. "MobileNumber": mobileNumber,
  654. "Dob": dob
  655. ]
  656. case .verifyIdNumber(let id, let type):
  657. return [
  658. "type": type,
  659. "idnumber": id
  660. ]
  661. case .calculateDefExRate(let model):
  662. return model.serialize()
  663. case .dynamicReceiver:
  664. return nil
  665. case .addRecipient(_, let recipient):
  666. let paymentMethod = [
  667. "id": recipient.paymentMethod?.id ?? "",
  668. "name": recipient.paymentMethod?.name ?? "",
  669. "currency": recipient.paymentMethod?.currency ?? [],
  670. "localizedName": recipient.paymentMethod?.localizedName ?? ""
  671. ] as [String : Any]
  672. let branch = [
  673. "id": recipient.agent?.branch?.id ?? "",
  674. "name": recipient.agent?.branch?.name ?? "",
  675. "localizedName": recipient.agent?.branch?.name ?? ""
  676. ]
  677. let agent = [
  678. "id": recipient.agent?.id ?? "",
  679. "name": recipient.agent?.name ?? "",
  680. "currency": recipient.agent?.currency ?? [],
  681. "localizedName": recipient.agent?.localizedName ?? "",
  682. "branch": branch,
  683. "accountNo": recipient.agent?.accountNumber ?? ""
  684. ] as [String : Any]
  685. return [
  686. "firstName": recipient.firstName ?? "",
  687. "middleName": recipient.middleName ?? "",
  688. "lastName": recipient.lastName ?? "",
  689. "localFirstName": recipient.localFirstName ?? "",
  690. "localMiddleName": recipient.localMiddleName ?? "",
  691. "localLastName": recipient.localLastName ?? "",
  692. "localFullName": recipient.localFullName ?? "",
  693. "paymentMethod": paymentMethod,
  694. "agent": agent,
  695. "receiverId": recipient.receiverID ?? "",
  696. "country": recipient.country ?? "",
  697. "countryId": recipient.countryID ?? "",
  698. "countryCode": recipient.countryCode ?? "",
  699. "address": recipient.address ?? "",
  700. "state": recipient.state ?? "",
  701. "stateId": recipient.stateID ?? "",
  702. "city": recipient.city ?? "",
  703. "email": recipient.email ?? "",
  704. "mobile": recipient.mobile ?? "",
  705. "relationship": recipient.relationship ?? "",
  706. "relationshipId": recipient.relationshipID ?? "",
  707. "district": recipient.district ?? "",
  708. "districtId": recipient.districtID ?? "",
  709. "purposeOfRemit": recipient.purposeOfRemit ?? "",
  710. "purposeOfRemitId": recipient.purposeOfRemitID ?? "",
  711. "fullName": recipient.fullName ?? "",
  712. "idType": recipient.idType ?? "",
  713. "idNumber": recipient.idNumber ?? "",
  714. "nativeCountry": recipient.nativeCountry ?? "",
  715. "nativeCountryID": recipient.nativeCountryID ?? "",
  716. "nativeCountryCode": recipient.nativeCountryCode ?? ""
  717. ]
  718. case .editRecipient(let senderID, let recipient):
  719. return APIRouter.addRecipient(senderID: senderID, recipient: recipient).parameters
  720. case .validateAccount(let validateModel):
  721. return [
  722. "IdType" : "1",
  723. "IdNumber": "",
  724. "CustomerFirstName": "",
  725. "CustomerLastName": "",
  726. "ReceiverFirstName": validateModel.firstName,
  727. "ReceiverLastName": validateModel.lastName,
  728. "Country": validateModel.country?.countryCode ?? "",
  729. "AccountType": validateModel.accountType,
  730. "IssuerCode": validateModel.bank?.code ?? "",
  731. "AccountNo": validateModel.accountNumber,
  732. "BankCode": validateModel.branch?.code ?? validateModel.bank?.code ?? "",
  733. "Amount": validateModel.amount,
  734. "PayoutPartner": validateModel.payoutPartner,
  735. "ProcessId": "",
  736. "BankId": validateModel.bank?.id ?? "",
  737. "ReceiverCountryId": validateModel.country?.countryId ?? "",
  738. "deliveryMethodId": validateModel.paymentMethod?.id ?? ""
  739. ]
  740. case .fetchInboundTransactionHistory(let from, let to):
  741. return [
  742. "FromDate": from,
  743. "ToDate": to,
  744. "tranId": ""
  745. ]
  746. case .saveKYCInformation(let model):
  747. let userID = GMEDB.shared.user.string(.userId) ?? ""
  748. return [
  749. "userId" : userID,
  750. "type": model.type,
  751. "fullName": model.personalInformation?.fullName ?? "",
  752. "gender": model.personalInformation?.gender ?? "",
  753. "dob": model.personalInformation?.dob ?? "",
  754. "email": model.personalInformation?.email ?? "",
  755. "city": model.personalInformation?.city ?? "",
  756. "address": model.personalInformation?.address ?? "",
  757. "occupation": model.personalInformation?.occupation ?? "",
  758. "nativeCountry": model.personalInformation?.nativeCountry ?? "",
  759. "bankId": model.primaryInformation?.bankID ?? "",
  760. "bankAccount": model.primaryInformation?.bankAccount ?? "",
  761. "passportNumber": model.primaryInformation?.passportNumber ?? "",
  762. "passportIssueDate": model.primaryInformation?.passportIssueDate ?? "",
  763. "passportExpiryDate": model.primaryInformation?.passportExpiryDate ?? "",
  764. "anotherIDType": model.primaryInformation?.anotherIDType ?? "",
  765. "anotherIDNumber": model.primaryInformation?.anotherIDNumber ?? "",
  766. "anotherIDIssueDate": model.primaryInformation?.anotherIDIssueDate ?? "",
  767. "anotherIDExpiryDate": model.primaryInformation?.anotherIDExpiryDate ?? "",
  768. "branchId": model.primaryInformation?.branchID ?? "",
  769. "refferalCode": model.primaryInformation?.refferalCode ?? ""
  770. ]
  771. case .submitKYC(let model):
  772. return [
  773. "type": model.type,
  774. "employeerName": model.personalInformation?.employeerName ?? "",
  775. "sourceOfFund": model.personalInformation?.sourceOfFund ?? "",
  776. "monthlyIncome": model.personalInformation?.monthlyIncome ?? "",
  777. "businessType": model.personalInformation?.businessType ?? "",
  778. "mobile": model.personalInformation?.mobile ?? "",
  779. "email": model.personalInformation?.email ?? "",
  780. "additionalAddress": model.personalInformation?.address ?? "",
  781. "idType": model.personalInformation?.idType ?? "",
  782. "additionalIdType": model.personalInformation?.additionalIdType ?? "",
  783. "userId": GMEDB.shared.user.string(.userId) ?? "",
  784. "occupation": model.personalInformation?.occupation ?? ""
  785. ]
  786. case .submitExistingCustomerKYC(let model):
  787. return [
  788. "type": model.type,
  789. "employeerName": model.personalInformation?.employeerName ?? "",
  790. "sourceOfFund": model.personalInformation?.sourceOfFund ?? "",
  791. "monthlyIncome": model.personalInformation?.monthlyIncome ?? "",
  792. "businessType": model.personalInformation?.businessType ?? "",
  793. "mobile": model.personalInformation?.mobile ?? "",
  794. "email": model.personalInformation?.email ?? "",
  795. "additionalAddress": model.personalInformation?.address ?? "",
  796. "idType": model.personalInformation?.idType ?? "",
  797. "visaStatus": model.personalInformation?.additionalIdType ?? "",
  798. "userId": GMEDB.shared.user.string(.userId) ?? "",
  799. "occupation": model.personalInformation?.occupation ?? ""
  800. ]
  801. case .pennyTestSubmitAtRegister(let accountNumber, let certNumber):
  802. let senderID = GMEDB.shared.user.string(.senderId) ?? ""
  803. return [
  804. "AccountNo": accountNumber,
  805. "CertNumber": certNumber,
  806. "CustomerId": senderID
  807. ]
  808. case .getNotifyInfo:
  809. let senderId = GMEDB.shared.user.string(.senderId) ?? ""
  810. return [
  811. "customerId": senderId
  812. ]
  813. case .getNotifyDetailInfo(let idx):
  814. return [
  815. "rowId": idx
  816. ]
  817. case .profileCheckPassword(let model, let target):
  818. let senderId = GMEDB.shared.user.string(.senderId) ?? ""
  819. return [
  820. "userId": senderId,
  821. "password": model.passwordForChangePersonalInformation ?? "",
  822. "tempValue": model.newValue ?? "",
  823. "targetInfo": target
  824. ]
  825. case .profileValidationOTP(let OTPPassword):
  826. let senderId = GMEDB.shared.user.string(.senderId) ?? ""
  827. return [
  828. "userId": senderId,
  829. "OTPNumber": OTPPassword
  830. ]
  831. case .profileChangeInformation(let newValue, let target):
  832. let senderId = GMEDB.shared.user.string(.senderId) ?? ""
  833. return [
  834. "userId": senderId,
  835. "newValue": newValue,
  836. "targetInfo": target
  837. ]
  838. case .resendOTPForChangeProfileInformation(let newValue):
  839. let senderId = GMEDB.shared.user.string(.senderId) ?? ""
  840. return [
  841. "userId" : senderId,
  842. "tempValue" : newValue
  843. ]
  844. case .fetchPersonalInformation:
  845. let userId = GMEDB.shared.user.string(.senderId) ?? ""
  846. return [
  847. "userId" : userId
  848. ]
  849. case .searchTxnByControlNumber(let controlNumber):
  850. return [
  851. "userId" : GMEDB.shared.user.string(.userId) ?? "",
  852. "controlNumber": controlNumber
  853. ]
  854. case .redeemCashPayment(let controlNumber, let txnId, let password):
  855. return [
  856. "userId" : GMEDB.shared.user.string(.userId) ?? "",
  857. "controlNumber": controlNumber,
  858. "txnId": txnId,
  859. "password": password
  860. ]
  861. case .withdrawWalletRequest(let amount):
  862. return [
  863. "userId" : GMEDB.shared.user.string(.userId) ?? "",
  864. "amount": amount
  865. ]
  866. case .withdrawFromWallet(let txnId, let amount, let password):
  867. return [
  868. "userId" : GMEDB.shared.user.string(.userId) ?? "",
  869. "amount": amount,
  870. "txnId" : txnId,
  871. "password" : password
  872. ]
  873. default: return nil
  874. }
  875. default : return nil
  876. }
  877. }
  878. }