Skip to content

Commit 28ed413

Browse files
authored
Merge pull request #285 from woocommerce/feature/178-top-performers-mark2
Top performers Mark2: Storage + Yosemite fmwk support
2 parents 4e3a8f6 + 9bbb121 commit 28ed413

File tree

21 files changed

+608
-8
lines changed

21 files changed

+608
-8
lines changed

Networking/Networking.xcodeproj/project.pbxproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
748D424A210F92EA00CF7D1B /* OrderStatsItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 748D4249210F92EA00CF7D1B /* OrderStatsItem.swift */; };
2525
748D424C210FA34400CF7D1B /* OrderStatsMapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 748D424B210FA34400CF7D1B /* OrderStatsMapper.swift */; };
2626
748D424E210FB1F500CF7D1B /* order-stats-day.json in Resources */ = {isa = PBXBuildFile; fileRef = 748D424D210FB1F500CF7D1B /* order-stats-day.json */; };
27+
7497376A2141F2BE0008C490 /* top-performers-week-alt.json in Resources */ = {isa = PBXBuildFile; fileRef = 749737692141F2BE0008C490 /* top-performers-week-alt.json */; };
2728
74A1196C2110F4BB00E1E5F0 /* OrderStats.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74A1196B2110F4BB00E1E5F0 /* OrderStats.swift */; };
2829
74A1D263211898F000931DFA /* site-visits-day.json in Resources */ = {isa = PBXBuildFile; fileRef = 74A1D25F211898F000931DFA /* site-visits-day.json */; };
2930
74A1D264211898F000931DFA /* site-visits-week.json in Resources */ = {isa = PBXBuildFile; fileRef = 74A1D260211898F000931DFA /* site-visits-week.json */; };
@@ -132,6 +133,7 @@
132133
748D4249210F92EA00CF7D1B /* OrderStatsItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OrderStatsItem.swift; sourceTree = "<group>"; };
133134
748D424B210FA34400CF7D1B /* OrderStatsMapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OrderStatsMapper.swift; sourceTree = "<group>"; };
134135
748D424D210FB1F500CF7D1B /* order-stats-day.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "order-stats-day.json"; sourceTree = "<group>"; };
136+
749737692141F2BE0008C490 /* top-performers-week-alt.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "top-performers-week-alt.json"; sourceTree = "<group>"; };
135137
74A1196B2110F4BB00E1E5F0 /* OrderStats.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OrderStats.swift; sourceTree = "<group>"; };
136138
74A1D25F211898F000931DFA /* site-visits-day.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "site-visits-day.json"; sourceTree = "<group>"; };
137139
74A1D260211898F000931DFA /* site-visits-week.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "site-visits-week.json"; sourceTree = "<group>"; };
@@ -447,6 +449,7 @@
447449
743BF8BD21191B63008A9D87 /* site-visits.json */,
448450
74ABA1C4213F17AA00FFAD30 /* top-performers-day.json */,
449451
74ABA1C8213F19FE00FFAD30 /* top-performers-week.json */,
452+
749737692141F2BE0008C490 /* top-performers-week-alt.json */,
450453
74ABA1C6213F19FD00FFAD30 /* top-performers-month.json */,
451454
74ABA1C7213F19FE00FFAD30 /* top-performers-year.json */,
452455
);
@@ -620,6 +623,7 @@
620623
74ABA1C9213F19FE00FFAD30 /* top-performers-month.json in Resources */,
621624
B58D10C82114D21D00107ED4 /* generic_error.json in Resources */,
622625
B5147876211B9227007562E5 /* broken-orders-mark-2.json in Resources */,
626+
7497376A2141F2BE0008C490 /* top-performers-week-alt.json in Resources */,
623627
743BF8BE21191B63008A9D87 /* site-visits.json in Resources */,
624628
B505F6D520BEE4E700BB1B69 /* me.json in Resources */,
625629
B5C6FCD620A3768900A4F8E4 /* order.json in Resources */,

Networking/Networking/Model/Stats/TopEarnerStats.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,8 @@ extension TopEarnerStats: Comparable {
5454
return lhs.date == rhs.date &&
5555
lhs.granularity == rhs.granularity &&
5656
lhs.limit == rhs.limit &&
57-
lhs.items == rhs.items
57+
lhs.items?.count == rhs.items?.count &&
58+
lhs.items?.sorted() == rhs.items?.sorted()
5859
}
5960

6061
public static func < (lhs: TopEarnerStats, rhs: TopEarnerStats) -> Bool {
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
{
2+
"date": "2018-W12",
3+
"unit": "week",
4+
"limit": "4",
5+
"data": [
6+
{
7+
"ID": 996,
8+
"name": "Funky Hoodie 2",
9+
"total": 2,
10+
"quantity": 444,
11+
"price": 40,
12+
"image": "https:\/\/jamosova3.mystagingwebsite.com\/wp-content\/uploads\/2017\/05\/hoodie-with-logo.jpg",
13+
"currency": "USD"
14+
},
15+
{
16+
"ID": 933,
17+
"name": "Smile T-Shirt 2",
18+
"total": 161.00,
19+
"quantity": 555,
20+
"price": 55.44,
21+
"image": "https:\/\/jamosova3.mystagingwebsite.com\/wp-content\/uploads\/2018\/04\/smile.gif",
22+
"currency": "USD"
23+
}
24+
]
25+
}

Networking/NetworkingTests/Responses/top-performers-week.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,4 @@
3131
"currency": "USD"
3232
}
3333
]
34-
}
34+
}

Storage/Storage.xcodeproj/project.pbxproj

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@
1515
7426A05120F69D00002A4E07 /* OrderCoupon+CoreDataProperties.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7426A04F20F69D00002A4E07 /* OrderCoupon+CoreDataProperties.swift */; };
1616
7426A05420F69DA4002A4E07 /* OrderItem+CoreDataClass.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7426A05220F69DA4002A4E07 /* OrderItem+CoreDataClass.swift */; };
1717
7426A05520F69DA4002A4E07 /* OrderItem+CoreDataProperties.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7426A05320F69DA4002A4E07 /* OrderItem+CoreDataProperties.swift */; };
18+
746A9D21214078080013F6FF /* TopEarnerStats+CoreDataClass.swift in Sources */ = {isa = PBXBuildFile; fileRef = 746A9D1D214078080013F6FF /* TopEarnerStats+CoreDataClass.swift */; };
19+
746A9D22214078080013F6FF /* TopEarnerStats+CoreDataProperties.swift in Sources */ = {isa = PBXBuildFile; fileRef = 746A9D1E214078080013F6FF /* TopEarnerStats+CoreDataProperties.swift */; };
20+
746A9D23214078080013F6FF /* TopEarnerStatsItem+CoreDataClass.swift in Sources */ = {isa = PBXBuildFile; fileRef = 746A9D1F214078080013F6FF /* TopEarnerStatsItem+CoreDataClass.swift */; };
21+
746A9D24214078080013F6FF /* TopEarnerStatsItem+CoreDataProperties.swift in Sources */ = {isa = PBXBuildFile; fileRef = 746A9D20214078080013F6FF /* TopEarnerStatsItem+CoreDataProperties.swift */; };
1822
74B7D6AD20F90CBB002667AC /* OrderNote+CoreDataClass.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74B7D6AB20F90CBB002667AC /* OrderNote+CoreDataClass.swift */; };
1923
74B7D6AE20F90CBB002667AC /* OrderNote+CoreDataProperties.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74B7D6AC20F90CBB002667AC /* OrderNote+CoreDataProperties.swift */; };
2024
B505255420EE6914008090F5 /* StorageType+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = B505255320EE6914008090F5 /* StorageType+Extensions.swift */; };
@@ -59,6 +63,12 @@
5963
7426A04F20F69D00002A4E07 /* OrderCoupon+CoreDataProperties.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "OrderCoupon+CoreDataProperties.swift"; sourceTree = "<group>"; };
6064
7426A05220F69DA4002A4E07 /* OrderItem+CoreDataClass.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "OrderItem+CoreDataClass.swift"; sourceTree = "<group>"; };
6165
7426A05320F69DA4002A4E07 /* OrderItem+CoreDataProperties.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "OrderItem+CoreDataProperties.swift"; sourceTree = "<group>"; };
66+
746A9D12214071EB0013F6FF /* MIGRATIONS.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = MIGRATIONS.md; sourceTree = "<group>"; };
67+
746A9D14214071F90013F6FF /* Model 2.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "Model 2.xcdatamodel"; sourceTree = "<group>"; };
68+
746A9D1D214078080013F6FF /* TopEarnerStats+CoreDataClass.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TopEarnerStats+CoreDataClass.swift"; sourceTree = "<group>"; };
69+
746A9D1E214078080013F6FF /* TopEarnerStats+CoreDataProperties.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TopEarnerStats+CoreDataProperties.swift"; sourceTree = "<group>"; };
70+
746A9D1F214078080013F6FF /* TopEarnerStatsItem+CoreDataClass.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TopEarnerStatsItem+CoreDataClass.swift"; sourceTree = "<group>"; };
71+
746A9D20214078080013F6FF /* TopEarnerStatsItem+CoreDataProperties.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TopEarnerStatsItem+CoreDataProperties.swift"; sourceTree = "<group>"; };
6272
74B7D6AB20F90CBB002667AC /* OrderNote+CoreDataClass.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "OrderNote+CoreDataClass.swift"; sourceTree = "<group>"; };
6373
74B7D6AC20F90CBB002667AC /* OrderNote+CoreDataProperties.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "OrderNote+CoreDataProperties.swift"; sourceTree = "<group>"; };
6474
7C81935EDD982072BBDCC837 /* Pods-Storage.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Storage.release.xcconfig"; path = "../Pods/Target Support Files/Pods-Storage/Pods-Storage.release.xcconfig"; sourceTree = "<group>"; };
@@ -236,6 +246,7 @@
236246
B59E11D720A9CFF3004121A4 /* Model */ = {
237247
isa = PBXGroup;
238248
children = (
249+
746A9D12214071EB0013F6FF /* MIGRATIONS.md */,
239250
B59E11D820A9D00C004121A4 /* WooCommerce.xcdatamodeld */,
240251
B505F6D920BEEA3200BB1B69 /* Account+CoreDataClass.swift */,
241252
B505F6D820BEEA3100BB1B69 /* Account+CoreDataProperties.swift */,
@@ -249,6 +260,10 @@
249260
7426A05320F69DA4002A4E07 /* OrderItem+CoreDataProperties.swift */,
250261
74B7D6AB20F90CBB002667AC /* OrderNote+CoreDataClass.swift */,
251262
74B7D6AC20F90CBB002667AC /* OrderNote+CoreDataProperties.swift */,
263+
746A9D1D214078080013F6FF /* TopEarnerStats+CoreDataClass.swift */,
264+
746A9D1E214078080013F6FF /* TopEarnerStats+CoreDataProperties.swift */,
265+
746A9D1F214078080013F6FF /* TopEarnerStatsItem+CoreDataClass.swift */,
266+
746A9D20214078080013F6FF /* TopEarnerStatsItem+CoreDataProperties.swift */,
252267
);
253268
path = Model;
254269
sourceTree = "<group>";
@@ -441,17 +456,21 @@
441456
7426A05520F69DA4002A4E07 /* OrderItem+CoreDataProperties.swift in Sources */,
442457
7426A04720F68F27002A4E07 /* Order+CoreDataClass.swift in Sources */,
443458
B54CA5BD20A4BD3B00F38CD1 /* NSManagedObjectContext+Storage.swift in Sources */,
459+
746A9D21214078080013F6FF /* TopEarnerStats+CoreDataClass.swift in Sources */,
444460
74B7D6AD20F90CBB002667AC /* OrderNote+CoreDataClass.swift in Sources */,
445461
B52B0F7920AA287C00477698 /* StorageManagerType.swift in Sources */,
446462
7426A05420F69DA4002A4E07 /* OrderItem+CoreDataClass.swift in Sources */,
447463
B505F6E020BEEA8100BB1B69 /* StorageType.swift in Sources */,
464+
746A9D22214078080013F6FF /* TopEarnerStats+CoreDataProperties.swift in Sources */,
448465
B54CA5C920A4C17800F38CD1 /* NSObject+Storage.swift in Sources */,
449466
B505F6DA20BEEA3200BB1B69 /* Account+CoreDataProperties.swift in Sources */,
450467
74B7D6AE20F90CBB002667AC /* OrderNote+CoreDataProperties.swift in Sources */,
451468
B505255420EE6914008090F5 /* StorageType+Extensions.swift in Sources */,
452469
B52B0F7B20AA28A800477698 /* Object.swift in Sources */,
453470
7426A05020F69D00002A4E07 /* OrderCoupon+CoreDataClass.swift in Sources */,
471+
746A9D23214078080013F6FF /* TopEarnerStatsItem+CoreDataClass.swift in Sources */,
454472
B505F6DE20BEEA4F00BB1B69 /* CoreDataManager.swift in Sources */,
473+
746A9D24214078080013F6FF /* TopEarnerStatsItem+CoreDataProperties.swift in Sources */,
455474
);
456475
runOnlyForDeploymentPostprocessing = 0;
457476
};
@@ -742,9 +761,10 @@
742761
B59E11D820A9D00C004121A4 /* WooCommerce.xcdatamodeld */ = {
743762
isa = XCVersionGroup;
744763
children = (
764+
746A9D14214071F90013F6FF /* Model 2.xcdatamodel */,
745765
B59E11D920A9D00C004121A4 /* Model.xcdatamodel */,
746766
);
747-
currentVersion = B59E11D920A9D00C004121A4 /* Model.xcdatamodel */;
767+
currentVersion = 746A9D14214071F90013F6FF /* Model 2.xcdatamodel */;
748768
path = WooCommerce.xcdatamodeld;
749769
sourceTree = "<group>";
750770
versionGroupType = wrapper.xcdatamodel;
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
# Core Data Migrations
2+
3+
This file documents changes in the extensions data model. Please explain any changes to the data model as well as any custom migrations.
4+
5+
## Model 2
6+
- @bummytime 2018-09-05
7+
- Added new entity: `TopEarnerStats`, to encapsulate all of the top earner stats for a given site & granularity
8+
- Added new entity: `TopEarnerStatsItem`, to encapsulate all the top earner stats for a specific product
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import Foundation
2+
import CoreData
3+
4+
@objc(TopEarnerStats)
5+
public class TopEarnerStats: NSManagedObject {
6+
7+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import Foundation
2+
import CoreData
3+
4+
5+
extension TopEarnerStats {
6+
7+
@nonobjc public class func fetchRequest() -> NSFetchRequest<TopEarnerStats> {
8+
return NSFetchRequest<TopEarnerStats>(entityName: "TopEarnerStats")
9+
}
10+
11+
@NSManaged public var granularity: String
12+
@NSManaged public var limit: String
13+
@NSManaged public var date: String
14+
@NSManaged public var items: Set<TopEarnerStatsItem>?
15+
}
16+
17+
// MARK: Generated accessors for items
18+
extension TopEarnerStats {
19+
20+
@objc(addItemsObject:)
21+
@NSManaged public func addToItems(_ value: TopEarnerStatsItem)
22+
23+
@objc(removeItemsObject:)
24+
@NSManaged public func removeFromItems(_ value: TopEarnerStatsItem)
25+
26+
@objc(addItems:)
27+
@NSManaged public func addToItems(_ values: NSSet)
28+
29+
@objc(removeItems:)
30+
@NSManaged public func removeFromItems(_ values: NSSet)
31+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import Foundation
2+
import CoreData
3+
4+
@objc(TopEarnerStatsItem)
5+
public class TopEarnerStatsItem: NSManagedObject {
6+
7+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import Foundation
2+
import CoreData
3+
4+
5+
extension TopEarnerStatsItem {
6+
7+
@nonobjc public class func fetchRequest() -> NSFetchRequest<TopEarnerStatsItem> {
8+
return NSFetchRequest<TopEarnerStatsItem>(entityName: "TopEarnerStatsItem")
9+
}
10+
11+
@NSManaged public var productID: Int64
12+
@NSManaged public var productName: String?
13+
@NSManaged public var quantity: Int16
14+
@NSManaged public var price: Double
15+
@NSManaged public var total: Double
16+
@NSManaged public var currency: String?
17+
@NSManaged public var imageUrl: String?
18+
@NSManaged public var stats: TopEarnerStats?
19+
}

0 commit comments

Comments
 (0)