Mercurial > public > lazybear
changeset 135:528550464bef
Rename files and variables ✍🏻
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/HistoryData+CoreDataClass.swift Mon Feb 08 23:18:53 2021 +0100 @@ -0,0 +1,15 @@ +// +// HistoryData+CoreDataClass.swift +// LazyBear +// +// Created by Dennis Concepción Martín on 8/2/21. +// +// + +import Foundation +import CoreData + +@objc(HistoryData) +public class HistoryData: NSManagedObject { + +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/HistoryData+CoreDataProperties.swift Mon Feb 08 23:18:53 2021 +0100 @@ -0,0 +1,27 @@ +// +// HistoryData+CoreDataProperties.swift +// LazyBear +// +// Created by Dennis Concepción Martín on 8/2/21. +// +// + +import Foundation +import CoreData + + +extension HistoryData { + + @nonobjc public class func fetchRequest() -> NSFetchRequest<HistoryData> { + return NSFetchRequest<HistoryData>(entityName: "HistoryData") + } + + @NSManaged public var date: Date? + @NSManaged public var name: String? + @NSManaged public var symbol: String? + +} + +extension HistoryData : Identifiable { + +}
--- a/LazyBear.xcodeproj/project.pbxproj Mon Feb 08 19:33:22 2021 +0100 +++ b/LazyBear.xcodeproj/project.pbxproj Mon Feb 08 23:18:53 2021 +0100 @@ -22,13 +22,17 @@ 9589C94D25CE0B4C0045DFF3 /* AddWatchlist.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9589C94C25CE0B4C0045DFF3 /* AddWatchlist.swift */; }; 958B678525C42B2400BF9F89 /* ApiManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 958B678425C42B2400BF9F89 /* ApiManager.swift */; }; 9597CE0425C1DFE7004DDFED /* LogoPlaceholder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9597CE0325C1DFE7004DDFED /* LogoPlaceholder.swift */; }; - 9598CFE325D06A6D00FA9E1B /* CreateButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9598CFE225D06A6C00FA9E1B /* CreateButton.swift */; }; + 9598CFE325D06A6D00FA9E1B /* AddButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9598CFE225D06A6C00FA9E1B /* AddButton.swift */; }; 959D28DC25CC99710029F689 /* NewsModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 959D28DB25CC99710029F689 /* NewsModel.swift */; }; 959D28DF25CC9A1A0029F689 /* News.swift in Sources */ = {isa = PBXBuildFile; fileRef = 959D28DE25CC9A1A0029F689 /* News.swift */; }; 959D28E225CC9B370029F689 /* NewsRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 959D28E125CC9B370029F689 /* NewsRow.swift */; }; 95AB4A7A259DCBAE0064C9C1 /* ReadJson.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95AB4A79259DCBAE0064C9C1 /* ReadJson.swift */; }; 95AB4A7D259DCC0C0064C9C1 /* CompanyModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95AB4A7C259DCC0C0064C9C1 /* CompanyModel.swift */; }; 95AB4A90259DD66D0064C9C1 /* CompanyRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95AB4A8F259DD66D0064C9C1 /* CompanyRow.swift */; }; + 95B0421725D1EC2F00230109 /* HistoryData+CoreDataClass.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95B0421525D1EC2F00230109 /* HistoryData+CoreDataClass.swift */; }; + 95B0421825D1EC3000230109 /* HistoryData+CoreDataProperties.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95B0421625D1EC2F00230109 /* HistoryData+CoreDataProperties.swift */; }; + 95B0421C25D1EC4200230109 /* WatchlistData+CoreDataClass.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95B0421A25D1EC4200230109 /* WatchlistData+CoreDataClass.swift */; }; + 95B0421D25D1EC4200230109 /* WatchlistData+CoreDataProperties.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95B0421B25D1EC4200230109 /* WatchlistData+CoreDataProperties.swift */; }; 95B04EB325212369000AD27F /* LazyBearApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95B04EB225212369000AD27F /* LazyBearApp.swift */; }; 95B04EB525212369000AD27F /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95B04EB425212369000AD27F /* ContentView.swift */; }; 95B04EB72521236A000AD27F /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 95B04EB62521236A000AD27F /* Assets.xcassets */; }; @@ -48,8 +52,6 @@ 95E411A725BEE03000A9C23F /* Watchlist.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95E411A625BEE03000A9C23F /* Watchlist.swift */; }; 95E411B625BEE84E00A9C23F /* Stock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95E411B525BEE84E00A9C23F /* Stock.swift */; }; 95E411BE25BEEA6C00A9C23F /* WatchlistRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95E411BD25BEEA6C00A9C23F /* WatchlistRow.swift */; }; - 95ED176B25CEFE1B00AE34B3 /* RecentSearch+CoreDataClass.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95ED176925CEFE1B00AE34B3 /* RecentSearch+CoreDataClass.swift */; }; - 95ED176C25CEFE1B00AE34B3 /* RecentSearch+CoreDataProperties.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95ED176A25CEFE1B00AE34B3 /* RecentSearch+CoreDataProperties.swift */; }; 95ED8CD425D0242200B6B605 /* CompanyList.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95ED8CD325D0242200B6B605 /* CompanyList.swift */; }; 95ED8CD725D0242900B6B605 /* HistoryList.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95ED8CD625D0242900B6B605 /* HistoryList.swift */; }; 95ED8CDB25D02DF300B6B605 /* LogoModifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95ED8CDA25D02DF300B6B605 /* LogoModifier.swift */; }; @@ -59,9 +61,7 @@ 95F6CA0525CF2A4E0064E4E9 /* ViewSelector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95F6CA0425CF2A4E0064E4E9 /* ViewSelector.swift */; }; 95F6F45C25C20D8D002AC66A /* Price.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95F6F45B25C20D8D002AC66A /* Price.swift */; }; 95F7CAF625ADC7B7009E0E7C /* LazyBear.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 95F7CAF425ADC7B7009E0E7C /* LazyBear.xcdatamodeld */; }; - 95FE646725C2DC580052832E /* WatchlistCompany+CoreDataClass.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95FE646525C2DC570052832E /* WatchlistCompany+CoreDataClass.swift */; }; - 95FE646825C2DC580052832E /* WatchlistCompany+CoreDataProperties.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95FE646625C2DC570052832E /* WatchlistCompany+CoreDataProperties.swift */; }; - 95FE646B25C30B880052832E /* ApiModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95FE646A25C30B880052832E /* ApiModel.swift */; }; + 95FE646B25C30B880052832E /* ApiManagerModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95FE646A25C30B880052832E /* ApiManagerModel.swift */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -81,13 +81,17 @@ 9589C94C25CE0B4C0045DFF3 /* AddWatchlist.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = AddWatchlist.swift; path = LazyBear/Views/AddWatchlist.swift; sourceTree = SOURCE_ROOT; }; 958B678425C42B2400BF9F89 /* ApiManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = ApiManager.swift; path = lazybear/ApiManager.swift; sourceTree = SOURCE_ROOT; }; 9597CE0325C1DFE7004DDFED /* LogoPlaceholder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LogoPlaceholder.swift; sourceTree = "<group>"; }; - 9598CFE225D06A6C00FA9E1B /* CreateButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = CreateButton.swift; path = lazybear/Views/CreateButton.swift; sourceTree = SOURCE_ROOT; }; + 9598CFE225D06A6C00FA9E1B /* AddButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = AddButton.swift; path = lazybear/Views/AddButton.swift; sourceTree = SOURCE_ROOT; }; 959D28DB25CC99710029F689 /* NewsModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = NewsModel.swift; path = lazybear/Models/NewsModel.swift; sourceTree = SOURCE_ROOT; }; 959D28DE25CC9A1A0029F689 /* News.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = News.swift; path = LazyBear/Views/News.swift; sourceTree = SOURCE_ROOT; }; 959D28E125CC9B370029F689 /* NewsRow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = NewsRow.swift; path = LazyBear/Views/NewsRow.swift; sourceTree = SOURCE_ROOT; }; 95AB4A79259DCBAE0064C9C1 /* ReadJson.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = ReadJson.swift; path = LazyBear/Jobs/ReadJson.swift; sourceTree = SOURCE_ROOT; }; 95AB4A7C259DCC0C0064C9C1 /* CompanyModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = CompanyModel.swift; path = lazybear/Models/CompanyModel.swift; sourceTree = SOURCE_ROOT; }; 95AB4A8F259DD66D0064C9C1 /* CompanyRow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CompanyRow.swift; sourceTree = "<group>"; }; + 95B0421525D1EC2F00230109 /* HistoryData+CoreDataClass.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "HistoryData+CoreDataClass.swift"; sourceTree = "<group>"; }; + 95B0421625D1EC2F00230109 /* HistoryData+CoreDataProperties.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "HistoryData+CoreDataProperties.swift"; sourceTree = "<group>"; }; + 95B0421A25D1EC4200230109 /* WatchlistData+CoreDataClass.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "WatchlistData+CoreDataClass.swift"; sourceTree = "<group>"; }; + 95B0421B25D1EC4200230109 /* WatchlistData+CoreDataProperties.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "WatchlistData+CoreDataProperties.swift"; sourceTree = "<group>"; }; 95B04EAF25212369000AD27F /* LazyBear.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = LazyBear.app; sourceTree = BUILT_PRODUCTS_DIR; }; 95B04EB225212369000AD27F /* LazyBearApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LazyBearApp.swift; sourceTree = "<group>"; }; 95B04EB425212369000AD27F /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = "<group>"; }; @@ -108,8 +112,6 @@ 95E411A625BEE03000A9C23F /* Watchlist.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Watchlist.swift; sourceTree = "<group>"; }; 95E411B525BEE84E00A9C23F /* Stock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Stock.swift; sourceTree = "<group>"; }; 95E411BD25BEEA6C00A9C23F /* WatchlistRow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WatchlistRow.swift; sourceTree = "<group>"; }; - 95ED176925CEFE1B00AE34B3 /* RecentSearch+CoreDataClass.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "RecentSearch+CoreDataClass.swift"; sourceTree = "<group>"; }; - 95ED176A25CEFE1B00AE34B3 /* RecentSearch+CoreDataProperties.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "RecentSearch+CoreDataProperties.swift"; sourceTree = "<group>"; }; 95ED8CD325D0242200B6B605 /* CompanyList.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = CompanyList.swift; path = lazybear/Views/CompanyList.swift; sourceTree = SOURCE_ROOT; }; 95ED8CD625D0242900B6B605 /* HistoryList.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = HistoryList.swift; path = lazybear/Views/HistoryList.swift; sourceTree = SOURCE_ROOT; }; 95ED8CDA25D02DF300B6B605 /* LogoModifier.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = LogoModifier.swift; path = lazybear/Views/LogoModifier.swift; sourceTree = SOURCE_ROOT; }; @@ -119,9 +121,7 @@ 95F6CA0425CF2A4E0064E4E9 /* ViewSelector.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = ViewSelector.swift; path = LazyBear/Views/ViewSelector.swift; sourceTree = SOURCE_ROOT; }; 95F6F45B25C20D8D002AC66A /* Price.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Price.swift; sourceTree = "<group>"; }; 95F7CAF525ADC7B7009E0E7C /* LazyBear.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = LazyBear.xcdatamodel; sourceTree = "<group>"; }; - 95FE646525C2DC570052832E /* WatchlistCompany+CoreDataClass.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "WatchlistCompany+CoreDataClass.swift"; sourceTree = "<group>"; }; - 95FE646625C2DC570052832E /* WatchlistCompany+CoreDataProperties.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "WatchlistCompany+CoreDataProperties.swift"; sourceTree = "<group>"; }; - 95FE646A25C30B880052832E /* ApiModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = ApiModel.swift; path = lazybear/Models/ApiModel.swift; sourceTree = SOURCE_ROOT; }; + 95FE646A25C30B880052832E /* ApiManagerModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = ApiManagerModel.swift; path = lazybear/Models/ApiManagerModel.swift; sourceTree = SOURCE_ROOT; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -160,7 +160,7 @@ children = ( 95AB4A7C259DCC0C0064C9C1 /* CompanyModel.swift */, 954D992425A2123B001F7F60 /* HistoricalPricesModel.swift */, - 95FE646A25C30B880052832E /* ApiModel.swift */, + 95FE646A25C30B880052832E /* ApiManagerModel.swift */, 954DDF0325C456E800848A4B /* QuoteModel.swift */, 95363CE125C87CF000B74131 /* InsiderTransactionModel.swift */, 959D28DB25CC99710029F689 /* NewsModel.swift */, @@ -184,7 +184,7 @@ 95F6F45B25C20D8D002AC66A /* Price.swift */, 95E07B7125CE95D9001718AB /* Settings.swift */, 95F6C2EF25BAE2ED003CF389 /* Company.swift */, - 9598CFE225D06A6C00FA9E1B /* CreateButton.swift */, + 9598CFE225D06A6C00FA9E1B /* AddButton.swift */, 95F6CA0425CF2A4E0064E4E9 /* ViewSelector.swift */, 95E411B525BEE84E00A9C23F /* Stock.swift */, 95DDC7AF25D1ABF5002B2C9A /* Title.swift */, @@ -232,10 +232,10 @@ 95B04EA625212369000AD27F = { isa = PBXGroup; children = ( - 95ED176925CEFE1B00AE34B3 /* RecentSearch+CoreDataClass.swift */, - 95ED176A25CEFE1B00AE34B3 /* RecentSearch+CoreDataProperties.swift */, - 95FE646525C2DC570052832E /* WatchlistCompany+CoreDataClass.swift */, - 95FE646625C2DC570052832E /* WatchlistCompany+CoreDataProperties.swift */, + 95B0421A25D1EC4200230109 /* WatchlistData+CoreDataClass.swift */, + 95B0421B25D1EC4200230109 /* WatchlistData+CoreDataProperties.swift */, + 95B0421525D1EC2F00230109 /* HistoryData+CoreDataClass.swift */, + 95B0421625D1EC2F00230109 /* HistoryData+CoreDataProperties.swift */, 95B04EB125212369000AD27F /* LazyBear */, 95B04EB025212369000AD27F /* Products */, 9500257E256D17D9008FFD28 /* Frameworks */, @@ -362,9 +362,10 @@ 9520F0B525C7131300692610 /* LineChart.swift in Sources */, 9597CE0425C1DFE7004DDFED /* LogoPlaceholder.swift in Sources */, 959D28DF25CC9A1A0029F689 /* News.swift in Sources */, + 95B0421D25D1EC4200230109 /* WatchlistData+CoreDataProperties.swift in Sources */, 95DDC7B025D1ABF5002B2C9A /* Title.swift in Sources */, 95E07B9D25CEAC46001718AB /* TransactionDetail.swift in Sources */, - 95FE646B25C30B880052832E /* ApiModel.swift in Sources */, + 95FE646B25C30B880052832E /* ApiManagerModel.swift in Sources */, 95B3552F25CD629F00BCDE8E /* TransactionCodes.swift in Sources */, 95612C512598D48200F7698F /* SearchBar.swift in Sources */, 95E411BE25BEEA6C00A9C23F /* WatchlistRow.swift in Sources */, @@ -374,15 +375,14 @@ 95E07B7225CE95D9001718AB /* Settings.swift in Sources */, 959D28DC25CC99710029F689 /* NewsModel.swift in Sources */, 95F6C30925BAF7C2003CF389 /* Selection.swift in Sources */, + 95B0421C25D1EC4200230109 /* WatchlistData+CoreDataClass.swift in Sources */, 95F6C2F025BAE2ED003CF389 /* Company.swift in Sources */, 95ED8CE025D03D8900B6B605 /* StockAndNews.swift in Sources */, 95D1BF4925ADCF7700E5D063 /* Persistence.swift in Sources */, 958B678525C42B2400BF9F89 /* ApiManager.swift in Sources */, 95B04EB325212369000AD27F /* LazyBearApp.swift in Sources */, - 9598CFE325D06A6D00FA9E1B /* CreateButton.swift in Sources */, + 9598CFE325D06A6D00FA9E1B /* AddButton.swift in Sources */, 95E07B6B25CE9398001718AB /* AppView.swift in Sources */, - 95ED176C25CEFE1B00AE34B3 /* RecentSearch+CoreDataProperties.swift in Sources */, - 95ED176B25CEFE1B00AE34B3 /* RecentSearch+CoreDataClass.swift in Sources */, 95AB4A7D259DCC0C0064C9C1 /* CompanyModel.swift in Sources */, 95E411B625BEE84E00A9C23F /* Stock.swift in Sources */, 95DDC7B525D1AD3C002B2C9A /* Placeholder.swift in Sources */, @@ -392,14 +392,14 @@ 95F6CA0525CF2A4E0064E4E9 /* ViewSelector.swift in Sources */, 95E07BA325CEAC7D001718AB /* Transactions.swift in Sources */, 954D992525A2123B001F7F60 /* HistoricalPricesModel.swift in Sources */, - 95FE646725C2DC580052832E /* WatchlistCompany+CoreDataClass.swift in Sources */, 95E411A725BEE03000A9C23F /* Watchlist.swift in Sources */, 95825AFC25C7255600465409 /* NormalizeData.swift in Sources */, 95363CDC25C8741900B74131 /* Request.swift in Sources */, 95363CE225C87CF000B74131 /* InsiderTransactionModel.swift in Sources */, 95E07B6E25CE95A1001718AB /* Search.swift in Sources */, + 95B0421725D1EC2F00230109 /* HistoryData+CoreDataClass.swift in Sources */, 95F7CAF625ADC7B7009E0E7C /* LazyBear.xcdatamodeld in Sources */, - 95FE646825C2DC580052832E /* WatchlistCompany+CoreDataProperties.swift in Sources */, + 95B0421825D1EC3000230109 /* HistoryData+CoreDataProperties.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; };
Binary file LazyBear.xcodeproj/project.xcworkspace/xcuserdata/dennis.xcuserdatad/UserInterfaceState.xcuserstate has changed
--- a/RecentSearch+CoreDataClass.swift Mon Feb 08 19:33:22 2021 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,15 +0,0 @@ -// -// RecentSearch+CoreDataClass.swift -// LazyBear -// -// Created by Dennis Concepción Martín on 6/2/21. -// -// - -import Foundation -import CoreData - -@objc(RecentSearch) -public class RecentSearch: NSManagedObject { - -}
--- a/RecentSearch+CoreDataProperties.swift Mon Feb 08 19:33:22 2021 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,27 +0,0 @@ -// -// RecentSearch+CoreDataProperties.swift -// LazyBear -// -// Created by Dennis Concepción Martín on 6/2/21. -// -// - -import Foundation -import CoreData - - -extension RecentSearch { - - @nonobjc public class func fetchRequest() -> NSFetchRequest<RecentSearch> { - return NSFetchRequest<RecentSearch>(entityName: "RecentSearch") - } - - @NSManaged public var name: String? - @NSManaged public var symbol: String? - @NSManaged public var date: Date? - -} - -extension RecentSearch : Identifiable { - -}
--- a/WatchlistCompany+CoreDataClass.swift Mon Feb 08 19:33:22 2021 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,15 +0,0 @@ -// -// WatchlistCompany+CoreDataClass.swift -// LazyBear -// -// Created by Dennis Concepción Martín on 28/1/21. -// -// - -import Foundation -import CoreData - -@objc(WatchlistCompany) -public class WatchlistCompany: NSManagedObject { - -}
--- a/WatchlistCompany+CoreDataProperties.swift Mon Feb 08 19:33:22 2021 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,38 +0,0 @@ -// -// WatchlistCompany+CoreDataProperties.swift -// LazyBear -// -// Created by Dennis Concepción Martín on 28/1/21. -// -// - -import Foundation -import CoreData - - -extension WatchlistCompany { - - @nonobjc public class func fetchRequest() -> NSFetchRequest<WatchlistCompany> { - return NSFetchRequest<WatchlistCompany>(entityName: "WatchlistCompany") - } - - @NSManaged public var cik: String? - @NSManaged public var currency: String? - @NSManaged public var date: String? - @NSManaged public var exchange: String? - @NSManaged public var exchangeName: String? - @NSManaged public var exchangeSuffix: String? - @NSManaged public var figi: String? - @NSManaged public var iexId: String? - @NSManaged public var isEnabled: Bool - @NSManaged public var lei: String? - @NSManaged public var name: String? - @NSManaged public var region: String? - @NSManaged public var symbol: String? - @NSManaged public var type: String? - -} - -extension WatchlistCompany : Identifiable { - -}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/WatchlistData+CoreDataClass.swift Mon Feb 08 23:18:53 2021 +0100 @@ -0,0 +1,15 @@ +// +// WatchlistData+CoreDataClass.swift +// LazyBear +// +// Created by Dennis Concepción Martín on 8/2/21. +// +// + +import Foundation +import CoreData + +@objc(WatchlistData) +public class WatchlistData: NSManagedObject { + +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/WatchlistData+CoreDataProperties.swift Mon Feb 08 23:18:53 2021 +0100 @@ -0,0 +1,38 @@ +// +// WatchlistData+CoreDataProperties.swift +// LazyBear +// +// Created by Dennis Concepción Martín on 8/2/21. +// +// + +import Foundation +import CoreData + + +extension WatchlistData { + + @nonobjc public class func fetchRequest() -> NSFetchRequest<WatchlistData> { + return NSFetchRequest<WatchlistData>(entityName: "WatchlistData") + } + + @NSManaged public var cik: String? + @NSManaged public var currency: String? + @NSManaged public var date: String? + @NSManaged public var exchange: String? + @NSManaged public var exchangeName: String? + @NSManaged public var exchangeSuffix: String? + @NSManaged public var figi: String? + @NSManaged public var iexId: String? + @NSManaged public var isEnabled: Bool + @NSManaged public var lei: String? + @NSManaged public var name: String? + @NSManaged public var region: String? + @NSManaged public var symbol: String? + @NSManaged public var type: String? + +} + +extension WatchlistData : Identifiable { + +}
--- a/lazybear/ApiManager.swift Mon Feb 08 19:33:22 2021 +0100 +++ b/lazybear/ApiManager.swift Mon Feb 08 23:18:53 2021 +0100 @@ -9,7 +9,7 @@ import CloudKit class ApiManager: ObservableObject { - @Published var results = [ApiModel]() + @Published var results = [ApiManagerModel]() @Published var showingView = false @Published var option = 2 // 1 -> Sandbox / 2 -> Production }
--- a/lazybear/AppView.swift Mon Feb 08 19:33:22 2021 +0100 +++ b/lazybear/AppView.swift Mon Feb 08 23:18:53 2021 +0100 @@ -29,13 +29,13 @@ // Assign CloudKit fetch to model private func cloudValues() { - var results = [ApiModel]() + var results = [ApiManagerModel]() cloudFetch.forEach({ (result) in let key = result.object(forKey: "key") as? String let name = result.object(forKey: "name") as? String let url = result.object(forKey: "url") as? String - let value = ApiModel(key: key, name: name, url: url) + let value = ApiManagerModel(key: key, name: name, url: url) results.append(value) }) // Main thread
--- a/lazybear/Data/TransactionCodes.swift Mon Feb 08 19:33:22 2021 +0100 +++ b/lazybear/Data/TransactionCodes.swift Mon Feb 08 23:18:53 2021 +0100 @@ -6,8 +6,8 @@ // import Foundation + // General transaction codes for Form 4 - let transactionCodes: [String: String] = [ "P": "Open market or private purchase of securities", "S": "Open market or private sale of securities",
--- a/lazybear/LazyBear.xcdatamodeld/LazyBear.xcdatamodel/contents Mon Feb 08 19:33:22 2021 +0100 +++ b/lazybear/LazyBear.xcdatamodeld/LazyBear.xcdatamodel/contents Mon Feb 08 23:18:53 2021 +0100 @@ -1,11 +1,11 @@ <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <model type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="17709" systemVersion="20D64" minimumToolsVersion="Automatic" sourceLanguage="Swift" userDefinedModelVersionIdentifier=""> - <entity name="RecentSearch" representedClassName="RecentSearch" syncable="YES"> + <entity name="HistoryData" representedClassName="HistoryData" syncable="YES"> <attribute name="date" optional="YES" attributeType="Date" usesScalarValueType="NO"/> <attribute name="name" optional="YES" attributeType="String"/> <attribute name="symbol" optional="YES" attributeType="String"/> </entity> - <entity name="WatchlistCompany" representedClassName="WatchlistCompany" syncable="YES"> + <entity name="WatchlistData" representedClassName="WatchlistData" syncable="YES"> <attribute name="cik" optional="YES" attributeType="String"/> <attribute name="currency" optional="YES" attributeType="String"/> <attribute name="date" optional="YES" attributeType="String"/> @@ -22,7 +22,7 @@ <attribute name="type" optional="YES" attributeType="String"/> </entity> <elements> - <element name="WatchlistCompany" positionX="-63" positionY="-18" width="128" height="239"/> - <element name="RecentSearch" positionX="-63" positionY="90" width="128" height="74"/> + <element name="HistoryData" positionX="160" positionY="192" width="128" height="74"/> + <element name="WatchlistData" positionX="-63" positionY="-18" width="128" height="239"/> </elements> </model> \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lazybear/Models/ApiManagerModel.swift Mon Feb 08 23:18:53 2021 +0100 @@ -0,0 +1,14 @@ +// +// ApiModel.swift +// LazyBear +// +// Created by Dennis Concepción Martín on 28/1/21. +// + +import Foundation + +struct ApiManagerModel { + var key: String? + var name: String? + var url: String? +}
--- a/lazybear/Models/ApiModel.swift Mon Feb 08 19:33:22 2021 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,14 +0,0 @@ -// -// ApiModel.swift -// LazyBear -// -// Created by Dennis Concepción Martín on 28/1/21. -// - -import Foundation - -struct ApiModel { - var key: String? - var name: String? - var url: String? -}
--- a/lazybear/Network/Request.swift Mon Feb 08 19:33:22 2021 +0100 +++ b/lazybear/Network/Request.swift Mon Feb 08 23:18:53 2021 +0100 @@ -7,7 +7,7 @@ import Foundation -// Request API +// Network request func request<T: Decodable>(url: String, model: T.Type, completion: @escaping (_ result: T) -> Void) { // We take some model data T.Type guard let url = URL(string: url) else {
--- a/lazybear/Persistence.swift Mon Feb 08 19:33:22 2021 +0100 +++ b/lazybear/Persistence.swift Mon Feb 08 23:18:53 2021 +0100 @@ -14,7 +14,7 @@ let result = PersistenceController(inMemory: true) let viewContext = result.container.viewContext for _ in 0..<14 { - let newItem = WatchlistCompany(context: viewContext) + let newItem = WatchlistData(context: viewContext) newItem.symbol = String() newItem.exchange = String() newItem.exchangeSuffix = String() @@ -32,7 +32,7 @@ } for _ in 0..<1 { - let newItem = RecentSearch(context: viewContext) + let newItem = HistoryData(context: viewContext) newItem.name = String() newItem.symbol = String() }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lazybear/Views/AddButton.swift Mon Feb 08 23:18:53 2021 +0100 @@ -0,0 +1,85 @@ +// +// CreateButton.swift +// LazyBear +// +// Created by Dennis Concepción Martín on 7/2/21. +// + +import SwiftUI +import SPAlert + +struct AddButton: View { + var symbol: String + var name: String + + @State private var showingActionSheet = false + + @Environment(\.managedObjectContext) private var viewContext + @FetchRequest(entity: WatchlistData.entity(), sortDescriptors: []) + var companies: FetchedResults<WatchlistData> // Fetch core data + + var body: some View { + Button(action: { self.showingActionSheet = true }) { + Image(systemName: "plus") + .imageScale(.large) + .frame(width: 30, height: 30) // This frame change the tappable area + .actionSheet(isPresented: $showingActionSheet) { alert() } + } + } + + // Create Action sheet + private func alert() -> ActionSheet { + var buttons: [ActionSheet.Button] = [.cancel(Text("Cancel")) { self.showingActionSheet = false }] + + // Logic to create buttons + let watchlistSymbols = companies.map { $0.symbol } + + if watchlistSymbols.contains(symbol) { + buttons.append(.destructive(Text("Remove from watchlist")) { removeWatchlist() } ) + } else { + buttons.append(.default(Text("Add to wachtlist")) { addWatchlist() }) + } + + let action = ActionSheet( + title: Text("Options"), + buttons: buttons) + + return action + } + + private func addWatchlist() { + let alertView = SPAlertView(title: "Added to watchlist", preset: .done) + let watchlistCompany = WatchlistData(context: viewContext) + watchlistCompany.name = name + watchlistCompany.symbol = symbol + do { + try viewContext.save() + print("Added to watchlist") + alertView.present(haptic: .success) + } catch { + print(error.localizedDescription) + } + } + + func removeWatchlist() { + let alertView = SPAlertView(title: "Removed from watchlist", preset: .done) + let watchlistSymbols = companies.map { $0.symbol } + let index = watchlistSymbols.firstIndex(of: symbol) + + viewContext.delete(companies[index!]) + do { + try viewContext.save() + print("Deleted from watchlist") + alertView.present(haptic: .success) + } catch { + print(error.localizedDescription) + } + } +} + + +struct CreateButton_Previews: PreviewProvider { + static var previews: some View { + AddButton(symbol: "aapl", name: "apple inc") + } +}
--- a/lazybear/Views/AddWatchlist.swift Mon Feb 08 19:33:22 2021 +0100 +++ b/lazybear/Views/AddWatchlist.swift Mon Feb 08 23:18:53 2021 +0100 @@ -14,17 +14,17 @@ // <--------- Core Data ---------> @Environment(\.managedObjectContext) private var viewContext - @FetchRequest(entity: WatchlistCompany.entity(), sortDescriptors: []) - var companies: FetchedResults<WatchlistCompany> + @FetchRequest(entity: WatchlistData.entity(), sortDescriptors: []) + var watchlistData: FetchedResults<WatchlistData> // <--------- Core Data ---------> var body: some View { - let watchSymbols = companies.map { $0.symbol } + let watchlistSymbols = watchlistData.map { $0.symbol } let alertView = SPAlertView(title: "Company added", preset: .done) - if !watchSymbols.contains(symbol) { + if !watchlistSymbols.contains(symbol) { Button(action: { - addWatchlist(name: name, symbol: symbol) + addWatchlist() alertView.present(haptic: .success) }) { Text("Add") @@ -32,10 +32,10 @@ } } - private func addWatchlist(name: String, symbol: String) { - let watchlistCompany = WatchlistCompany(context: viewContext) - watchlistCompany.name = name - watchlistCompany.symbol = symbol + private func addWatchlist() { + let watchlistData = WatchlistData(context: viewContext) + watchlistData.name = name + watchlistData.symbol = symbol do { try viewContext.save() print("Company saved.") @@ -44,9 +44,10 @@ } } } - +/* struct AddWatchlist_Previews: PreviewProvider { static var previews: some View { AddWatchlist(symbol: "aapl", name: "apple") } } + */
--- a/lazybear/Views/Company.swift Mon Feb 08 19:33:22 2021 +0100 +++ b/lazybear/Views/Company.swift Mon Feb 08 23:18:53 2021 +0100 @@ -28,7 +28,7 @@ .navigationBarTitle(symbol, displayMode: .inline) .navigationBarItems(trailing: HStack { - CreateButton(symbol: symbol, name: name) + AddButton(symbol: symbol, name: name) .padding(.trailing) Spacer() @@ -38,7 +38,7 @@ } private func saveSearch(name: String, symbol: String) { - let searched = RecentSearch(context: viewContext) + let searched = HistoryData(context: viewContext) searched.name = name searched.symbol = symbol searched.date = Date()
--- a/lazybear/Views/CompanyList.swift Mon Feb 08 19:33:22 2021 +0100 +++ b/lazybear/Views/CompanyList.swift Mon Feb 08 23:18:53 2021 +0100 @@ -14,7 +14,7 @@ List { ForEach(companiesData.filter({ searchedCompany.isEmpty ? true : $0.name.localizedStandardContains(searchedCompany) }) , id: \.symbol) { company in - CompanyRow(company: company) + CompanyRow(companyModel: company) } } .id(UUID()) // Increase speed in search the list }
--- a/lazybear/Views/CompanyRow.swift Mon Feb 08 19:33:22 2021 +0100 +++ b/lazybear/Views/CompanyRow.swift Mon Feb 08 23:18:53 2021 +0100 @@ -8,13 +8,13 @@ import SwiftUI struct CompanyRow: View { - var company: CompanyModel? - var history: RecentSearch? + var companyModel: CompanyModel? + var historyData: HistoryData? @State var showingCompany = false var body: some View { - let name = company?.name ?? history?.name ?? "" - let symbol = company?.symbol ?? history?.symbol ?? "" + let name = companyModel?.name ?? historyData?.name ?? "" + let symbol = companyModel?.symbol ?? historyData?.symbol ?? "" NavigationLink(destination: Company(name: name, symbol: symbol)) { HStack { @@ -26,7 +26,7 @@ .font(.subheadline) } - if history != nil { + if historyData != nil { Spacer() let (day, month) = formatDate() Text("\(day) \(month)") @@ -37,7 +37,7 @@ } private func formatDate() -> (String, String) { - let date = history?.date ?? Date() + let date = historyData?.date ?? Date() let calendar = Calendar.current let components = calendar.dateComponents([.day, .month], from: date) @@ -51,6 +51,6 @@ struct CompanyRown_Previews: PreviewProvider { static var previews: some View { - CompanyRow(company: companiesData[0]) + CompanyRow(companyModel: companiesData[0]) } }
--- a/lazybear/Views/CreateButton.swift Mon Feb 08 19:33:22 2021 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,85 +0,0 @@ -// -// CreateButton.swift -// LazyBear -// -// Created by Dennis Concepción Martín on 7/2/21. -// - -import SwiftUI -import SPAlert - -struct CreateButton: View { - var symbol: String - var name: String - - @State private var showingActionSheet = false - - @Environment(\.managedObjectContext) private var viewContext - @FetchRequest(entity: WatchlistCompany.entity(), sortDescriptors: []) - var companies: FetchedResults<WatchlistCompany> // Fetch core data - - var body: some View { - Button(action: { self.showingActionSheet = true }) { - Image(systemName: "plus") - .imageScale(.large) - .frame(width: 30, height: 30) // This frame change the tappable area - .actionSheet(isPresented: $showingActionSheet) { alert() } - } - } - - // Create Action sheet - private func alert() -> ActionSheet { - var buttons: [ActionSheet.Button] = [.cancel(Text("Cancel")) { self.showingActionSheet = false }] - - // Logic to create buttons - let watchlistSymbols = companies.map { $0.symbol } - - if watchlistSymbols.contains(symbol) { - buttons.append(.destructive(Text("Remove from watchlist")) { removeWatchlist() } ) - } else { - buttons.append(.default(Text("Add to wachtlist")) { addWatchlist() }) - } - - let action = ActionSheet( - title: Text("Options"), - buttons: buttons) - - return action - } - - private func addWatchlist() { - let alertView = SPAlertView(title: "Added to watchlist", preset: .done) - let watchlistCompany = WatchlistCompany(context: viewContext) - watchlistCompany.name = name - watchlistCompany.symbol = symbol - do { - try viewContext.save() - print("Added to watchlist") - alertView.present(haptic: .success) - } catch { - print(error.localizedDescription) - } - } - - func removeWatchlist() { - let alertView = SPAlertView(title: "Removed from watchlist", preset: .done) - let watchlistSymbols = companies.map { $0.symbol } - let index = watchlistSymbols.firstIndex(of: symbol) - - viewContext.delete(companies[index!]) - do { - try viewContext.save() - print("Deleted from watchlist") - alertView.present(haptic: .success) - } catch { - print(error.localizedDescription) - } - } -} - - -struct CreateButton_Previews: PreviewProvider { - static var previews: some View { - CreateButton(symbol: "aapl", name: "apple inc") - } -}
--- a/lazybear/Views/HistoryList.swift Mon Feb 08 19:33:22 2021 +0100 +++ b/lazybear/Views/HistoryList.swift Mon Feb 08 23:18:53 2021 +0100 @@ -12,12 +12,12 @@ // <--------- Core Data ---------> @Environment(\.managedObjectContext) private var viewContext - @FetchRequest(entity: RecentSearch.entity(), sortDescriptors: []) - var history: FetchedResults<RecentSearch> + @FetchRequest(entity: HistoryData.entity(), sortDescriptors: []) + var historyData: FetchedResults<HistoryData> // <--------- Core Data ---------> var body: some View { - if history.count > 0 { + if historyData.count > 0 { List { Section(header: Text("History"), footer: Button(action: { self.showingActionSheet = true } @@ -27,9 +27,9 @@ } ) { // Sorte array by Date. The new ones come first in the list - let sorted = history.sorted { $0.date ?? Date() > $1.date ?? Date() } + let sorted = historyData.sorted { $0.date ?? Date() > $1.date ?? Date() } ForEach(sorted) { company in - CompanyRow(history: company) + CompanyRow(historyData: company) } } } @@ -40,7 +40,7 @@ } private func delete() { - for company in history { + for company in historyData { viewContext.delete(company) } do {
--- a/lazybear/Views/ViewSelector.swift Mon Feb 08 19:33:22 2021 +0100 +++ b/lazybear/Views/ViewSelector.swift Mon Feb 08 23:18:53 2021 +0100 @@ -24,7 +24,6 @@ private func alert() -> ActionSheet { let action = ActionSheet( title: Text("Views"), - //message: Text("History will be claered from your device"), buttons: [.cancel(Text("Cancel")) { self.showingActionSheet = false }, .default(Text("Chart & news")) { self.viewSelected = 0 }, .default(Text("Insiders")) { self.viewSelected = 1 }
--- a/lazybear/Views/Watchlist.swift Mon Feb 08 19:33:22 2021 +0100 +++ b/lazybear/Views/Watchlist.swift Mon Feb 08 23:18:53 2021 +0100 @@ -10,17 +10,17 @@ struct Watchlist: View { @Environment(\.managedObjectContext) private var viewContext - @FetchRequest(entity: WatchlistCompany.entity(), sortDescriptors: []) - var companies: FetchedResults<WatchlistCompany> // Fetch core data + @FetchRequest(entity: WatchlistData.entity(), sortDescriptors: []) + var watchlistData: FetchedResults<WatchlistData> // Fetch core data var body: some View { NavigationView { VStack { - if companies.count > 0 { + if watchlistData.count > 0 { List { Section(header: Text("Watchlist")) { - ForEach(companies) { company in - WatchlistRow(company: company) + ForEach(watchlistData) { company in + WatchlistRow(watchlistData: company) } .onDelete { indexSet in deleteWatchlist(indexSet: indexSet) } // Delete from persistent storage } @@ -38,7 +38,7 @@ func deleteWatchlist(indexSet: IndexSet) { for index in indexSet { - viewContext.delete(companies[index]) + viewContext.delete(watchlistData[index]) } do { try viewContext.save()
--- a/lazybear/Views/WatchlistRow.swift Mon Feb 08 19:33:22 2021 +0100 +++ b/lazybear/Views/WatchlistRow.swift Mon Feb 08 23:18:53 2021 +0100 @@ -10,39 +10,41 @@ import SDWebImageSwiftUI struct WatchlistRow: View { - var company: WatchlistCompany + var watchlistData: WatchlistData @Environment(\.editMode) var editMode // EditButton list @EnvironmentObject var apiManager: ApiManager var body: some View { - NavigationLink(destination: Company(name: company.name ?? "", symbol: company.symbol ?? "")) { + let name = watchlistData.name ?? "" + let symbol = watchlistData.symbol ?? "" + NavigationLink(destination: Company(name: name, symbol: symbol)) { HStack { - WebImage(url: URL(string: endpoint())) + WebImage(url: URL(string: endpoint(symbol: symbol))) .resizable() .placeholder { LogoPlaceholder() } // If there is no logo .indicator(.activity) .modifier(LogoModifier()) VStack(alignment: .leading) { - Text(company.symbol ?? "".uppercased()) + Text(symbol.uppercased()) .fontWeight(.semibold) - Text(company.name ?? "".capitalized) + Text(name.capitalized) .font(.subheadline) } Spacer() if self.editMode?.wrappedValue.isEditing ?? true { } else { // If EditButton() is not clicked -> show prices - Price(symbol: company.symbol ?? "", showHorizontal: false) + Price(symbol: symbol, showHorizontal: false) } } .padding([.top, .bottom], 6) } } - private func endpoint() -> String { + private func endpoint(symbol: String) -> String { let url = apiManager.results[0].url - let path = "/iex/api/logos/\(company.symbol ?? "").png" + let path = "/iex/api/logos/\(symbol).png" let endpoint = url! + path return endpoint @@ -55,9 +57,10 @@ static let moc = NSManagedObjectContext(concurrencyType: .mainQueueConcurrencyType) static var previews: some View { - let watchlistCompany = WatchlistCompany(context: moc) - watchlistCompany.name = "apple inc" - watchlistCompany.symbol = "aapl" - return WatchlistRow(company: watchlistCompany) + let watchlistData = WatchlistData(context: moc) + watchlistData.name = "apple inc" + watchlistData.symbol = "aapl" + return WatchlistRow(watchlistData: watchlistData) } } +