Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Loads exchange rate data for default fiat currencies on app launch
  • Loading branch information
roz0n committed Oct 10, 2021
1 parent 81cd794 commit fd09690
Show file tree
Hide file tree
Showing 5 changed files with 28 additions and 19 deletions.
8 changes: 4 additions & 4 deletions Guap.xcodeproj/project.pbxproj
Expand Up @@ -20,7 +20,7 @@
23BEB065270E8F0C00BCCA71 /* PrimaryButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23BEB064270E8F0C00BCCA71 /* PrimaryButton.swift */; };
23BEB067270E991100BCCA71 /* ConverterTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23BEB066270E991100BCCA71 /* ConverterTextField.swift */; };
23BEB06C270EA6FB00BCCA71 /* K.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23BEB06B270EA6FB00BCCA71 /* K.swift */; };
23BEB072270EBACA00BCCA71 /* FiatDataNetworkManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23BEB071270EBACA00BCCA71 /* FiatDataNetworkManager.swift */; };
23BEB072270EBACA00BCCA71 /* FiatCurrencyNetworkManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23BEB071270EBACA00BCCA71 /* FiatCurrencyNetworkManager.swift */; };
23BEB075270EC72900BCCA71 /* currencies.json in Resources */ = {isa = PBXBuildFile; fileRef = 23BEB074270EC72900BCCA71 /* currencies.json */; };
23BEB078270EC7D900BCCA71 /* FiatCurrency.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23BEB077270EC7D900BCCA71 /* FiatCurrency.swift */; };
23BEB07C270ED05500BCCA71 /* CurrencyTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23BEB07B270ED05500BCCA71 /* CurrencyTableViewController.swift */; };
Expand Down Expand Up @@ -63,7 +63,7 @@
23BEB064270E8F0C00BCCA71 /* PrimaryButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrimaryButton.swift; sourceTree = "<group>"; };
23BEB066270E991100BCCA71 /* ConverterTextField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConverterTextField.swift; sourceTree = "<group>"; };
23BEB06B270EA6FB00BCCA71 /* K.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = K.swift; sourceTree = "<group>"; };
23BEB071270EBACA00BCCA71 /* FiatDataNetworkManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FiatDataNetworkManager.swift; sourceTree = "<group>"; };
23BEB071270EBACA00BCCA71 /* FiatCurrencyNetworkManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FiatCurrencyNetworkManager.swift; sourceTree = "<group>"; };
23BEB074270EC72900BCCA71 /* currencies.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = currencies.json; sourceTree = "<group>"; };
23BEB077270EC7D900BCCA71 /* FiatCurrency.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FiatCurrency.swift; sourceTree = "<group>"; };
23BEB07B270ED05500BCCA71 /* CurrencyTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CurrencyTableViewController.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -239,7 +239,7 @@
23BEB070270EBAAF00BCCA71 /* Managers */ = {
isa = PBXGroup;
children = (
23BEB071270EBACA00BCCA71 /* FiatDataNetworkManager.swift */,
23BEB071270EBACA00BCCA71 /* FiatCurrencyNetworkManager.swift */,
);
path = Managers;
sourceTree = "<group>";
Expand Down Expand Up @@ -408,7 +408,7 @@
2334904B27122D380013DA8B /* FiatExchangeRate.swift in Sources */,
23BEB035270E57B100BCCA71 /* ConverterViewController.swift in Sources */,
23BEB0822710DB2900BCCA71 /* ConverterParameter.swift in Sources */,
23BEB072270EBACA00BCCA71 /* FiatDataNetworkManager.swift in Sources */,
23BEB072270EBACA00BCCA71 /* FiatCurrencyNetworkManager.swift in Sources */,
23BEB06C270EA6FB00BCCA71 /* K.swift in Sources */,
23BEB031270E57B100BCCA71 /* AppDelegate.swift in Sources */,
23349049271178DE0013DA8B /* CurrencyTableViewCell.swift in Sources */,
Expand Down
23 changes: 16 additions & 7 deletions Guap/Controllers/Converter/ConverterViewController.swift
Expand Up @@ -11,11 +11,13 @@ class ConverterViewController: UIViewController {

// MARK: - Properties

let fiatDataManager = FiatDataNetworkManager()
let defaultBaseCurrency = "USD"
let defaultTargetCurrency = "JPY"
let fiatDataManager = FiatCurrencyNetworkManager()
var currencies: [FiatCurrency]?

var baseCurrencyButton = PrimaryButton(title: "...", color: .white, background: .systemGray6)
var targetCurrencyButton = PrimaryButton(title: "...", color: .white, background: .systemGray6)
var baseCurrencyButton = PrimaryButton(title: "Base", color: .white, background: .systemGray6)
var targetCurrencyButton = PrimaryButton(title: "Target", color: .white, background: .systemGray6)
var convertButton = PrimaryButton(title: K.Labels.convertButton, color: .white, background: .systemGreen)

var baseValueTextView = ConverterTextField(label: "Convert from: ")
Expand Down Expand Up @@ -65,13 +67,13 @@ class ConverterViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()

fetchFiatCurrencies()
configureViewController()
configureTargetButton()
applyLayouts()
applyGestures()

fiatDataManager.fetchPairConversionRate(baseCode: "USD", targetCode: "JPY")
fetchFiatCurrencies()
fetchFiatExchangeRate(baseCode: defaultBaseCurrency, targetCode: defaultTargetCurrency)
}

// MARK: - Configurations
Expand Down Expand Up @@ -154,12 +156,19 @@ private extension ConverterViewController {

fiatDataManager.getCurrenciesList { [weak self] data in
// TODO: Perform O(1) lookup here with a Set instead of using .first
self?.baseCurrencyData = data?.first(where: { currencyData in currencyData.iso4217 == "USD" })
self?.targetCurrencyData = data?.first(where: { currencyData in currencyData.iso4217 == "JPY" })
self?.baseCurrencyData = data?.first(where: { [weak self] currencyData in currencyData.iso4217 == self?.defaultBaseCurrency })
self?.targetCurrencyData = data?.first(where: { [weak self] currencyData in currencyData.iso4217 == self?.defaultTargetCurrency })
self?.currencies = data
}
}

func fetchFiatExchangeRate(baseCode: String, targetCode: String) {
fiatDataManager.fetchPairExchangeRate(baseCode: baseCode, targetCode: targetCode) { responseData in
print("Got conversion data")
print(responseData)
}
}

}

// MARK: - Layout
Expand Down
Expand Up @@ -12,7 +12,7 @@ class CurrencyTableViewController: UITableViewController {

// MARK: - Properties

let dataManager = FiatDataNetworkManager()
let dataManager = FiatCurrencyNetworkManager()
var selectionHandler: ((_: FiatCurrency?, _ type: ConverterParameter?) -> Void)
var selectionType: ConverterParameter
var currencies: [FiatCurrency]?
Expand Down
@@ -1,13 +1,13 @@
//
// FiatDataNetworkManager.swift
// FiatCurrencyNetworkManager.swift
// Guap
//
// Created by Arnaldo Rozon on 10/7/21.
//

import Foundation

class FiatDataNetworkManager {
class FiatCurrencyNetworkManager {

// MARK: - Types

Expand Down Expand Up @@ -90,7 +90,7 @@ class FiatDataNetworkManager {

// MARK: - Networking

func fetchPairConversionRate(baseCode: String, targetCode: String, completion: @escaping (_ responseData: Result<FiatExchangeRateResponseData, NetworkManagerErrors>) -> Void) {
func fetchPairExchangeRate(baseCode: String, targetCode: String, completion: @escaping (_ responseData: Result<FiatExchangeRateResponse, NetworkManagerErrors>) -> Void) {
guard let requestUrl = URL(string: "https://8c4e-2601-241-8c01-2ff0-3106-9534-bad8-f013.ngrok.io/fiat/pair") else {
return
}
Expand All @@ -116,7 +116,7 @@ class FiatDataNetworkManager {
}

do {
let decodedData = try self?.decoder.decode(FiatExchangeRateResponseData.self, from: data)
let decodedData = try self?.decoder.decode(FiatExchangeRateResponse.self, from: data)

guard let decodedData = decodedData else {
throw NetworkManagerErrors.dataError
Expand Down
6 changes: 3 additions & 3 deletions Guap/Models/Fiat/FiatExchangeRate.swift
Expand Up @@ -14,16 +14,16 @@ struct FiatExchangeRateBody: Codable {
var targetCode: String
}

struct FiatExchangeRateResponse: Codable {
struct FiatExchangeRateData: Codable {
var baseCode: String
var targetCode: String
var conversionRate: Decimal
}

// MARK: - API Responses

struct FiatExchangeRateResponseData: Codable {
struct FiatExchangeRateResponse: Codable {
var success: Bool
var data: FiatExchangeRateResponse
var data: FiatExchangeRateData
var error: Bool?
}

0 comments on commit fd09690

Please sign in to comment.