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.
277 lines
8.4 KiB
277 lines
8.4 KiB
//
|
|
// APIRouter.swift
|
|
// GME Remit
|
|
//
|
|
// Created by InKwon James Kim on 09/08/2019.
|
|
// Copyright © 2019 Gobal Money Express Co. Ltd. All rights reserved.
|
|
//
|
|
|
|
import Foundation
|
|
import Alamofire
|
|
import Localize_Swift
|
|
import ObjectMapper
|
|
|
|
enum APIRouter: ApiServiceType {
|
|
case accesscode(username: String, password: String)
|
|
case customerProfile(firebaseToken: String)
|
|
case customerRegister(registerModel: RegisterRequestModel, firebaseToken: String)
|
|
case passwordReset(userName: String)
|
|
case validation(userName: String, idNumber: String, idType: String)
|
|
case countriesServices
|
|
case calculateDefExRate(model: ExchangeRateRequestModel)
|
|
case recipientRequirement(country: String)
|
|
}
|
|
|
|
extension APIRouter {
|
|
private var manager: SessionManager {
|
|
let manager = Alamofire.SessionManager.default
|
|
manager.session.configuration.timeoutIntervalForRequest = 150
|
|
|
|
return manager
|
|
}
|
|
|
|
private var uuid: String {
|
|
guard let uuid = GMEDB.shared.app.string(.uuid) else {
|
|
let uuid = UUID().uuidString
|
|
GMEDB.shared.app.set(uuid, .uuid)
|
|
return uuid
|
|
}
|
|
|
|
return uuid
|
|
}
|
|
|
|
private var beforeLoginHeader: [String: String] {
|
|
let currentLanguage = Localize.currentLanguage()
|
|
let lang = Utility.getLanguageHeader(for: currentLanguage)
|
|
let authValue = "172017F9EC11222E8107142733:QRK2UM0Q:\(uuid)".toBase64()
|
|
|
|
return [
|
|
"Authorization": "Basic \(authValue)",
|
|
"GME-TOKEN" : "39587YT398@FBQOW8RY3#948R7GB@CNEQW987GF87$TD18$1981..919@@##joghndvberteiru",
|
|
"Content-Type": "application/json",
|
|
"lang" : lang
|
|
]
|
|
}
|
|
|
|
private var afterLoginHeader: [String: String] {
|
|
let accessCode = GMEDB.shared.user.string(.accessCode) ?? ""
|
|
let currentLanguage = Localize.currentLanguage()
|
|
let lang = Utility.getLanguageHeader(for: currentLanguage)
|
|
|
|
return [
|
|
"Authorization": "Bearer " + accessCode,
|
|
"GME-TOKEN" : "39587YT398@FBQOW8RY3#948R7GB@CNEQW987GF87$TD18$1981..919@@##joghndvberteiru",
|
|
"Content-Type": "application/json",
|
|
"clientId": Utility.getMyKftcClientId(),
|
|
"lang" : lang
|
|
]
|
|
}
|
|
|
|
func request<T: Mappable>(
|
|
encoding: ParameterEncoding = JSONEncoding.default,
|
|
needsAuthorization: Bool = true,
|
|
success: @escaping (T) -> Void,
|
|
failure: @escaping (Error) -> Void
|
|
) {
|
|
guard
|
|
let isReachable = NetworkReachabilityManager()?.isReachable,
|
|
isReachable else {
|
|
let error = NSError(
|
|
domain: "NETWORK_REACHABILITY_DOMAIN",
|
|
code: -99,
|
|
message: "No Internet connection found. Check your connection."
|
|
)
|
|
return failure(error)
|
|
}
|
|
|
|
manager.request(
|
|
self.endpoint,
|
|
method: self.method,
|
|
parameters: self.parameters,
|
|
encoding: encoding,
|
|
headers: needsAuthorization ? afterLoginHeader : beforeLoginHeader
|
|
).handle(success: success, failure: failure)
|
|
}
|
|
|
|
func kftcRequest<T: Mappable>(
|
|
method: HTTPMethod,
|
|
header: [String: String],
|
|
url: String,
|
|
params: [String: Any]?,
|
|
encoding: ParameterEncoding = JSONEncoding.default,
|
|
needsAuthorization: Bool = true,
|
|
success: @escaping (T) -> Void,
|
|
failure: @escaping (Error) -> Void
|
|
) {
|
|
guard
|
|
let isReachable = NetworkReachabilityManager()?.isReachable,
|
|
isReachable else {
|
|
let error = NSError(
|
|
domain: "NETWORK_REACHABILITY_DOMAIN",
|
|
code: -99,
|
|
message: "No Internet connection found. Check your connection."
|
|
)
|
|
return failure(error)
|
|
}
|
|
|
|
manager.request(
|
|
url,
|
|
method: method,
|
|
parameters: params,
|
|
encoding: encoding,
|
|
headers: header
|
|
).handle(success: success, failure: failure)
|
|
|
|
}
|
|
|
|
func requestMultipart<T: Mappable>(
|
|
method: HTTPMethod,
|
|
_ URLString: URLConvertible,
|
|
parameters: [String: String]? = nil,
|
|
images: [String: Data],
|
|
encoding: Alamofire.ParameterEncoding = URLEncoding.default,
|
|
needsAuthorization: Bool = true,
|
|
success: @escaping (T) -> Void,
|
|
failure: @escaping (Error) -> Void
|
|
) {
|
|
guard
|
|
let isReachable = NetworkReachabilityManager()?.isReachable,
|
|
isReachable else {
|
|
let error = NSError(
|
|
domain: "NETWORK_REACHABILITY_DOMAIN",
|
|
code: -99,
|
|
message: "No Internet connection found. Check your connection."
|
|
)
|
|
return failure(error)
|
|
}
|
|
|
|
manager.upload(
|
|
multipartFormData: { multipartFormData in
|
|
if !images.isEmpty {
|
|
images.forEach({ (data) in
|
|
multipartFormData.append(
|
|
data.value,
|
|
withName: data.key,
|
|
fileName: data.key + ".jpeg",
|
|
mimeType: "image/jpeg"
|
|
)
|
|
})
|
|
|
|
}
|
|
parameters?.forEach { (params) in
|
|
multipartFormData.append(
|
|
params.value.data(
|
|
using: String.Encoding.utf8,
|
|
allowLossyConversion: false
|
|
)!,
|
|
withName: params.key
|
|
)
|
|
}
|
|
},
|
|
to: URLString,
|
|
method: method,
|
|
headers: needsAuthorization ? afterLoginHeader : beforeLoginHeader,
|
|
encodingCompletion: { encodingResult in
|
|
switch encodingResult {
|
|
case .success(let upload, _, _):
|
|
upload.handle(success: success, failure: failure)
|
|
case .failure:
|
|
let error = NSError(
|
|
domain: "NETWORK_REACHABILITY_DOMAIN",
|
|
code: -99,
|
|
message: "No Internet connection found. Check your connection."
|
|
)
|
|
failure(error)
|
|
}
|
|
}
|
|
)
|
|
}
|
|
}
|
|
|
|
extension APIRouter {
|
|
private var endpoint: String {
|
|
switch self {
|
|
case .accesscode: return "\(baseUrl)/users/access-code"
|
|
case .customerProfile: return "\(baseUrl)/mobile/CustomerProfile"
|
|
case .customerRegister: return "\(baseUrlWithoutVersion)/v3/mobile/customerRegister"
|
|
case .passwordReset: return "\(baseUrl)/mobile/passwordReset"
|
|
case .validation: return "\(baseUrlWithoutVersion)/v3/validation"
|
|
case .countriesServices: return "\(baseUrl)/mobile/countriesServices"
|
|
case .calculateDefExRate: return "\(baseUrl)/mobile/calculateDefExRate"
|
|
case .recipientRequirement(let country): return "\(country)"
|
|
}
|
|
}
|
|
|
|
private var method: HTTPMethod {
|
|
switch self {
|
|
case .accesscode: return .post
|
|
case .customerProfile: return .post
|
|
case .customerRegister: return .post
|
|
case .passwordReset: return .post
|
|
case .validation: return .post
|
|
case .countriesServices: return .get
|
|
case .calculateDefExRate: return .post
|
|
case .recipientRequirement: return .get
|
|
}
|
|
}
|
|
|
|
private var parameters: Parameters? {
|
|
switch self {
|
|
case .accesscode(let username, let password):
|
|
return [
|
|
"userId": username,
|
|
"password": password
|
|
]
|
|
|
|
case .customerProfile(let firebaseToken):
|
|
return [
|
|
"userId" : Utility.getMyUserName(),
|
|
"uuid": self.uuid,
|
|
"appVersion": Utility.getAppVersion() ?? "",
|
|
"phoneBrand": Utility.getPhoneBrand(),
|
|
"phoneOs": Utility.getPhoneOs(),
|
|
"fcmId": firebaseToken,
|
|
"osVersion": Utility.getOsVersion()
|
|
]
|
|
|
|
case .customerRegister(let registerModel, let firebaseToken):
|
|
return [
|
|
"username": registerModel.username ?? "",
|
|
"password": registerModel.encryptedPassword ?? "",
|
|
"nativecountry": registerModel.nativeCountry ?? "",
|
|
"mobilenumber": registerModel.mobileNumber ?? "",
|
|
"clientId": Utility.getCliendId(),
|
|
"uuid": self.uuid,
|
|
"appVersion": Utility.getAppVersion() ?? "",
|
|
"phoneBrand": Utility.getPhoneBrand(),
|
|
"phoneOs": Utility.getPhoneOs(),
|
|
"fcmId": firebaseToken,
|
|
"osVersion": Utility.getOsVersion()
|
|
]
|
|
|
|
case .passwordReset(let userName):
|
|
return ["username": userName]
|
|
|
|
case .validation(let userName, let idNumber, let idType):
|
|
return [
|
|
"Username": userName,
|
|
"IdNumber": idNumber,
|
|
"IdType": idType
|
|
]
|
|
case .countriesServices: return nil
|
|
case .calculateDefExRate(let model):
|
|
return [
|
|
"cAmount" : model.senderAmount,
|
|
"sCurrency" : model.senderCurrency,
|
|
"pAmount" : model.recipientAmount,
|
|
"pCurrency" : model.recipientCurrency,
|
|
"pCountry" : model.recipientCountryID,
|
|
"serviceType": model.serviceType,
|
|
"calcBy" : model.calcBy,
|
|
"sCountry" : model.senderCountryID,
|
|
"pCountryName": model.recipientCountry
|
|
]
|
|
case .recipientRequirement: return nil
|
|
}
|
|
}
|
|
}
|