Mercurial > public > lazybear
view LazyBear/Views/Networking/HomeData.swift @ 336:6f904b166564
Implementing TradingDaysView
author | Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com> |
---|---|
date | Wed, 31 Mar 2021 20:42:44 +0200 |
parents | 2dad5828ccf6 |
children |
line wrap: on
line source
// // HomeData.swift // LazyBear // // Created by Dennis Concepción Martín on 30/3/21. // import SwiftUI class HomeData: ObservableObject { @Published var sectorPerformance = [SectorPerformanceModel]() @Published var list = ["mostactive": [CompanyRowModel](), "gainers": [CompanyRowModel](), "losers": [CompanyRowModel]()] @Published var intradayPrices = [String(): IntradayPricesArray(intradayPrices: [IntradayPricesModel(open: Double())])] @Published var holidayDates = [TradingDatesModel]() private let baseUrl = Bundle.main.infoDictionary?["IEX_URL"] as? String ?? "Empty url" private let apiKey = Bundle.main.infoDictionary?["IEX_API"] as? String ?? "Empty key" // PRINCIPAL FUNCTION TO CALL func get() { // 1. Request sector performance var url = "\(baseUrl)/stock/market/sector-performance?token=\(apiKey)" request(url: url, model: [SectorPerformanceModel].self) { self.sectorPerformance = $0 } // 2. Request lists var semaphore = 0 for key in self.list.keys { url = "\(self.baseUrl)/stock/market/collection/list?collectionName=\(key)&token=\(self.apiKey)" request(url: url, model: [CompanyRowModel].self) { self.list[key] = $0; semaphore += 1 // Finish modifying dictionary if semaphore == 3 { // When dictionary is modified // 3. Request intraday prices var symbols = [String]() for key in self.list.keys { // Iterate throught the list if let companies = self.list[key] { // Unwrap value for company in companies { // Iterate inside the list through the companies symbols.append(company.symbol) // Append symbol } } } // Now that I have all the symbols I can request the intraday prices and save it to the @Published var // First I have to concatenate the string to make the batch request url = "\(self.baseUrl)/stock/market/batch?symbols=" for symbol in symbols { // Concatenate symbol to the first part of the url if symbols.firstIndex(of: symbol) == 0 { url += symbol } else { url += ",\(symbol)" } } // Once it's made, I can append the final part of the url and make the request url = "\(url)&types=intraday-prices&token=\(self.apiKey)" request(url: url, model: [String: IntradayPricesArray].self) { self.intradayPrices = $0 } } } } // 4. Request trading and holiday days url = "\(baseUrl)/ref-data/us/dates/holiday/next/30?token=\(apiKey)" request(url: url, model: [TradingDatesModel].self) { self.holidayDates = $0 } } }