Skip to content

Commit bb05110

Browse files
authored
Merge pull request #325 from woocommerce/fix/site-visits-remote
Dashboard: Optimized SiteVisitStats data fetch with new URL param
2 parents cd318eb + 3ecf5d2 commit bb05110

File tree

7 files changed

+51
-345
lines changed

7 files changed

+51
-345
lines changed

Networking/Networking/Model/Stats/SiteVisitStatsItem.swift

Lines changed: 2 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -19,29 +19,9 @@ public struct SiteVisitStatsItem {
1919
return payload.fetchStringValue(for: FieldNames.period)
2020
}
2121

22-
public var views: Int {
23-
return payload.fetchIntValue(for: FieldNames.views)
24-
}
25-
2622
public var visitors: Int {
2723
return payload.fetchIntValue(for: FieldNames.visitors)
2824
}
29-
30-
public var likes: Int {
31-
return payload.fetchIntValue(for: FieldNames.likes)
32-
}
33-
34-
public var reblogs: Int {
35-
return payload.fetchIntValue(for: FieldNames.reblogs)
36-
}
37-
38-
public var comments: Int {
39-
return payload.fetchIntValue(for: FieldNames.comments)
40-
}
41-
42-
public var posts: Int {
43-
return payload.fetchIntValue(for: FieldNames.posts)
44-
}
4525
}
4626

4727

@@ -50,18 +30,12 @@ public struct SiteVisitStatsItem {
5030
extension SiteVisitStatsItem: Comparable {
5131
public static func == (lhs: SiteVisitStatsItem, rhs: SiteVisitStatsItem) -> Bool {
5232
return lhs.period == rhs.period &&
53-
lhs.views == rhs.views &&
54-
lhs.visitors == rhs.visitors &&
55-
lhs.likes == rhs.likes &&
56-
lhs.reblogs == rhs.reblogs &&
57-
lhs.comments == rhs.comments &&
58-
lhs.posts == rhs.posts
33+
lhs.visitors == rhs.visitors
5934
}
6035

6136
public static func < (lhs: SiteVisitStatsItem, rhs: SiteVisitStatsItem) -> Bool {
6237
return lhs.period < rhs.period ||
63-
(lhs.period == rhs.period && lhs.views < rhs.views) ||
64-
(lhs.period == rhs.period && lhs.views == rhs.views && lhs.likes < rhs.likes)
38+
(lhs.period == rhs.period && lhs.visitors < rhs.visitors)
6539
}
6640
}
6741

@@ -73,11 +47,6 @@ private extension SiteVisitStatsItem {
7347
///
7448
enum FieldNames: String {
7549
case period = "period"
76-
case views = "views"
7750
case visitors = "visitors"
78-
case likes = "likes"
79-
case reblogs = "reblogs"
80-
case comments = "comments"
81-
case posts = "posts"
8251
}
8352
}

Networking/Networking/Remote/SiteVisitStatsRemote.swift

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ public class SiteVisitStatsRemote: Remote {
1919
let path = "\(Constants.sitesPath)/\(siteID)/\(Constants.siteVisitStatsPath)/"
2020
let parameters = [ParameterKeys.unit: unit.rawValue,
2121
ParameterKeys.date: DateFormatter.Stats.statsDayFormatter.string(from: latestDateToInclude),
22-
ParameterKeys.quantity: String(quantity)]
22+
ParameterKeys.quantity: String(quantity),
23+
ParameterKeys.statFields: Constants.visitorStatFieldValue]
2324
let request = DotcomRequest(wordpressApiVersion: .mark1_1, method: .get, path: path, parameters: parameters)
2425
let mapper = SiteVisitStatsMapper()
2526
enqueue(request, mapper: mapper, completion: completion)
@@ -31,13 +32,15 @@ public class SiteVisitStatsRemote: Remote {
3132
//
3233
private extension SiteVisitStatsRemote {
3334
enum Constants {
34-
static let sitesPath: String = "sites"
35-
static let siteVisitStatsPath: String = "stats/visits"
35+
static let sitesPath: String = "sites"
36+
static let siteVisitStatsPath: String = "stats/visits"
37+
static let visitorStatFieldValue: String = "visitors"
3638
}
3739

3840
enum ParameterKeys {
39-
static let unit: String = "unit"
40-
static let date: String = "date"
41-
static let quantity: String = "quantity"
41+
static let unit: String = "unit"
42+
static let date: String = "date"
43+
static let quantity: String = "quantity"
44+
static let statFields: String = "stat_fields"
4245
}
4346
}

Networking/NetworkingTests/Mapper/SiteVisitStatsMapperTests.swift

Lines changed: 4 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -16,27 +16,17 @@ class SiteVisitStatsMapperTests: XCTestCase {
1616

1717
XCTAssertEqual(dayStats.granularity, .day)
1818
XCTAssertEqual(dayStats.date, "2018-08-06")
19-
XCTAssertEqual(dayStats.fields.count, 7)
19+
XCTAssertEqual(dayStats.fields.count, 2)
2020
XCTAssertEqual(dayStats.items!.count, 12)
2121
XCTAssertEqual(dayStats.totalVisitors, 105)
2222

2323
let sampleItem1 = dayStats.items![0]
2424
XCTAssertEqual(sampleItem1.period, "2018-07-26")
25-
XCTAssertEqual(sampleItem1.views, 206)
2625
XCTAssertEqual(sampleItem1.visitors, 101)
27-
XCTAssertEqual(sampleItem1.likes, 12)
28-
XCTAssertEqual(sampleItem1.reblogs, 2)
29-
XCTAssertEqual(sampleItem1.comments, 17)
30-
XCTAssertEqual(sampleItem1.posts, 3)
3126

3227
let sampleItem2 = dayStats.items![11]
3328
XCTAssertEqual(sampleItem2.period, "2018-08-06")
34-
XCTAssertEqual(sampleItem2.views, 1)
3529
XCTAssertEqual(sampleItem2.visitors, 2)
36-
XCTAssertEqual(sampleItem2.likes, 3)
37-
XCTAssertEqual(sampleItem2.reblogs, 4)
38-
XCTAssertEqual(sampleItem2.comments, 5)
39-
XCTAssertEqual(sampleItem2.posts, 6)
4030
}
4131

4232
/// Verifies that all of the week unit SiteVisitStats fields are parsed correctly.
@@ -49,28 +39,17 @@ class SiteVisitStatsMapperTests: XCTestCase {
4939

5040
XCTAssertEqual(weekStats.granularity, .week)
5141
XCTAssertEqual(weekStats.date, "2018-08-06")
52-
XCTAssertEqual(weekStats.fields.count, 7)
42+
XCTAssertEqual(weekStats.fields.count, 2)
5343
XCTAssertEqual(weekStats.items!.count, 12)
5444
XCTAssertEqual(weekStats.totalVisitors, 123123241)
5545

5646
let sampleItem1 = weekStats.items![0]
5747
XCTAssertEqual(sampleItem1.period, "2018W05W21")
58-
XCTAssertEqual(sampleItem1.views, 5)
5948
XCTAssertEqual(sampleItem1.visitors, 4)
60-
XCTAssertEqual(sampleItem1.likes, 0)
61-
XCTAssertEqual(sampleItem1.reblogs, 0)
62-
XCTAssertEqual(sampleItem1.comments, 0)
63-
XCTAssertEqual(sampleItem1.posts, 0)
6449

6550
let sampleItem2 = weekStats.items![11]
6651
XCTAssertEqual(sampleItem2.period, "2018W08W06")
67-
XCTAssertEqual(sampleItem2.views, 33)
6852
XCTAssertEqual(sampleItem2.visitors, 123123123)
69-
XCTAssertEqual(sampleItem2.likes, 1)
70-
XCTAssertEqual(sampleItem2.reblogs, 9999999)
71-
XCTAssertEqual(sampleItem2.comments, 123345)
72-
XCTAssertEqual(sampleItem2.posts, 56)
73-
7453
}
7554

7655
/// Verifies that all of the month unit SiteVisitStats fields are parsed correctly.
@@ -83,27 +62,17 @@ class SiteVisitStatsMapperTests: XCTestCase {
8362

8463
XCTAssertEqual(monthStats.granularity, .month)
8564
XCTAssertEqual(monthStats.date, "2018-08-06")
86-
XCTAssertEqual(monthStats.fields.count, 7)
65+
XCTAssertEqual(monthStats.fields.count, 2)
8766
XCTAssertEqual(monthStats.items!.count, 12)
8867
XCTAssertEqual(monthStats.totalVisitors, 292)
8968

9069
let sampleItem1 = monthStats.items![0]
9170
XCTAssertEqual(sampleItem1.period, "2017-09-01")
92-
XCTAssertEqual(sampleItem1.views, 36)
9371
XCTAssertEqual(sampleItem1.visitors, 224)
94-
XCTAssertEqual(sampleItem1.likes, 1)
95-
XCTAssertEqual(sampleItem1.reblogs, 0)
96-
XCTAssertEqual(sampleItem1.comments, 3)
97-
XCTAssertEqual(sampleItem1.posts, 2)
9872

9973
let sampleItem2 = monthStats.items![10]
10074
XCTAssertEqual(sampleItem2.period, "2018-07-01")
101-
XCTAssertEqual(sampleItem2.views, 16)
10275
XCTAssertEqual(sampleItem2.visitors, 6)
103-
XCTAssertEqual(sampleItem2.likes, 9)
104-
XCTAssertEqual(sampleItem2.reblogs, 0)
105-
XCTAssertEqual(sampleItem2.comments, 0)
106-
XCTAssertEqual(sampleItem2.posts, 0)
10776
}
10877

10978
/// Verifies that all of the year unit SiteVisitStats fields are parsed correctly.
@@ -116,28 +85,17 @@ class SiteVisitStatsMapperTests: XCTestCase {
11685

11786
XCTAssertEqual(yearStats.granularity, .year)
11887
XCTAssertEqual(yearStats.date, "2018-08-06")
119-
XCTAssertEqual(yearStats.fields.count, 7)
88+
XCTAssertEqual(yearStats.fields.count, 2)
12089
XCTAssertEqual(yearStats.items!.count, 5)
12190
XCTAssertEqual(yearStats.totalVisitors, 3336)
12291

12392
let sampleItem1 = yearStats.items![0]
12493
XCTAssertEqual(sampleItem1.period, "2014-01-01")
125-
XCTAssertEqual(sampleItem1.views, 12821)
12694
XCTAssertEqual(sampleItem1.visitors, 1145)
127-
XCTAssertEqual(sampleItem1.likes, 1094)
128-
XCTAssertEqual(sampleItem1.reblogs, 0)
129-
XCTAssertEqual(sampleItem1.comments, 1611)
130-
XCTAssertEqual(sampleItem1.posts, 597)
131-
13295

13396
let sampleItem2 = yearStats.items![3]
13497
XCTAssertEqual(sampleItem2.period, "2017-01-01")
135-
XCTAssertEqual(sampleItem2.views, 348)
13698
XCTAssertEqual(sampleItem2.visitors, 144)
137-
XCTAssertEqual(sampleItem2.likes, 3)
138-
XCTAssertEqual(sampleItem2.reblogs, 0)
139-
XCTAssertEqual(sampleItem2.comments, 5)
140-
XCTAssertEqual(sampleItem2.posts, 4)
14199
}
142100
}
143101

Networking/NetworkingTests/Responses/site-visits-day.json

Lines changed: 5 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -3,121 +3,57 @@
33
"unit": "day",
44
"fields": [
55
"period",
6-
"views",
7-
"visitors",
8-
"likes",
9-
"reblogs",
10-
"comments",
11-
"posts"
6+
"visitors"
127
],
138
"data": [
149
[
1510
"2018-07-26",
16-
206,
1711
101,
18-
12,
19-
2,
20-
17,
21-
3
12+
12
2213
],
2314
[
2415
"2018-07-27",
25-
0,
26-
0,
27-
0,
28-
0,
29-
0,
3016
0
3117
],
3218
[
3319
"2018-07-28",
34-
0,
35-
0,
36-
0,
37-
0,
38-
0,
3920
0
4021
],
4122
[
4223
"2018-07-29",
43-
0,
44-
0,
45-
0,
46-
0,
47-
0,
4824
0
4925
],
5026
[
5127
"2018-07-30",
52-
0,
53-
0,
54-
0,
55-
0,
56-
0,
5728
0
5829
],
5930
[
6031
"2018-07-31",
61-
1,
62-
1,
63-
0,
64-
0,
65-
0,
66-
0
32+
1
6733
],
6834
[
6935
"2018-08-01",
70-
0,
71-
0,
72-
0,
73-
0,
74-
0,
7536
0
7637
],
7738
[
7839
"2018-08-02",
79-
1,
80-
1,
81-
0,
82-
0,
83-
0,
84-
0
40+
1
8541
],
8642
[
8743
"2018-08-03",
88-
0,
89-
0,
90-
0,
91-
0,
92-
0,
9344
0
9445
],
9546
[
9647
"2018-08-04",
97-
0,
98-
0,
99-
0,
100-
0,
101-
0,
10248
0
10349
],
10450
[
10551
"2018-08-05",
106-
0,
107-
0,
108-
0,
109-
0,
110-
0,
11152
0
11253
],
11354
[
11455
"2018-08-06",
115-
1,
116-
2,
117-
3,
118-
4,
119-
5,
120-
6
56+
2
12157
]
12258
]
12359
}

0 commit comments

Comments
 (0)