Skip to content

Commit cf7258d

Browse files
committed
Conditionally save SiteSummaryStats in Storage
1 parent 15af625 commit cf7258d

File tree

3 files changed

+35
-8
lines changed

3 files changed

+35
-8
lines changed

Yosemite/Yosemite/Actions/StatsActionV4.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,11 +49,13 @@ public enum StatsActionV4: Action {
4949
saveInStorage: Bool,
5050
onCompletion: (Result<TopEarnerStats, Error>) -> Void)
5151

52-
/// Retrieves the site summary stats for the provided site ID, period(s), and date, without saving them to the Storage layer.
52+
/// Retrieves the site summary stats for the provided site ID, period(s), and date.
53+
/// Conditionally saves them to storage, if a single period is retrieved.
5354
///
5455
case retrieveSiteSummaryStats(siteID: Int64,
5556
period: StatGranularity,
5657
quantity: Int,
5758
latestDateToInclude: Date,
59+
saveInStorage: Bool,
5860
onCompletion: (Result<SiteSummaryStats, Error>) -> Void)
5961
}

Yosemite/Yosemite/Stores/StatsStoreV4.swift

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,11 +94,13 @@ public final class StatsStoreV4: Store {
9494
let period,
9595
let quantity,
9696
let latestDateToInclude,
97+
let saveInStorage,
9798
let onCompletion):
9899
retrieveSiteSummaryStats(siteID: siteID,
99100
period: period,
100101
quantity: quantity,
101102
latestDateToInclude: latestDateToInclude,
103+
saveInStorage: saveInStorage,
102104
onCompletion: onCompletion)
103105
}
104106
}
@@ -189,19 +191,24 @@ private extension StatsStoreV4 {
189191
}
190192
}
191193

192-
/// Retrieves the site summary stats for the provided site ID, period(s), and date, without saving them to the Storage layer.
194+
/// Retrieves the site summary stats for the provided site ID, period(s), and date.
195+
/// Conditionally saves them to storage, if a single period is retrieved.
193196
///
194197
func retrieveSiteSummaryStats(siteID: Int64,
195198
period: StatGranularity,
196199
quantity: Int,
197200
latestDateToInclude: Date,
201+
saveInStorage: Bool,
198202
onCompletion: @escaping (Result<SiteSummaryStats, Error>) -> Void) {
199203
if quantity == 1 {
200204
siteStatsRemote.loadSiteSummaryStats(for: siteID,
201205
period: period,
202-
includingDate: latestDateToInclude) { result in
206+
includingDate: latestDateToInclude) { [weak self] result in
203207
switch result {
204208
case .success(let siteSummaryStats):
209+
if saveInStorage {
210+
self?.upsertStoredSiteSummaryStats(readOnlyStats: siteSummaryStats)
211+
}
205212
onCompletion(.success(siteSummaryStats))
206213
case .failure(let error):
207214
onCompletion(.failure(SiteStatsStoreError(error: error)))
@@ -486,6 +493,19 @@ extension StatsStoreV4 {
486493
}
487494
}
488495

496+
// MARK: Site summary stats
497+
extension StatsStoreV4 {
498+
/// Updates (OR Inserts) the specified ReadOnly SiteSummaryStats Entity into the Storage Layer.
499+
///
500+
func upsertStoredSiteSummaryStats(readOnlyStats: Networking.SiteSummaryStats) {
501+
assert(Thread.isMainThread)
502+
503+
let storage = storageManager.viewStorage
504+
let storageSiteSummaryStats = storage.loadSiteSummaryStats(date: readOnlyStats.date, period: readOnlyStats.period.rawValue) ?? storage.insertNewObject(ofType: Storage.SiteSummaryStats.self)
505+
storageSiteSummaryStats.update(with: readOnlyStats)
506+
storage.saveIfNeeded()
507+
}
508+
}
489509

490510
// MARK: Convert Leaderboard into TopEarnerStats
491511
//

Yosemite/YosemiteTests/Stores/StatsStoreV4Tests.swift

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -518,7 +518,8 @@ final class StatsStoreV4Tests: XCTestCase {
518518
let action = StatsActionV4.retrieveSiteSummaryStats(siteID: self.sampleSiteID,
519519
period: .day,
520520
quantity: 1,
521-
latestDateToInclude: DateFormatter.dateFromString(with: "2022-12-09T17:06:55")) { result in
521+
latestDateToInclude: DateFormatter.dateFromString(with: "2022-12-09T17:06:55"),
522+
saveInStorage: false) { result in
522523
promise(result)
523524
}
524525
store.onAction(action)
@@ -541,7 +542,8 @@ final class StatsStoreV4Tests: XCTestCase {
541542
let action = StatsActionV4.retrieveSiteSummaryStats(siteID: self.sampleSiteID,
542543
period: .month,
543544
quantity: 3,
544-
latestDateToInclude: DateFormatter.dateFromString(with: "2022-12-31T17:06:55")) { _ in
545+
latestDateToInclude: DateFormatter.dateFromString(with: "2022-12-31T17:06:55"),
546+
saveInStorage: false) { _ in
545547
promise(())
546548
}
547549
store.onAction(action)
@@ -567,7 +569,8 @@ final class StatsStoreV4Tests: XCTestCase {
567569
let action = StatsActionV4.retrieveSiteSummaryStats(siteID: self.sampleSiteID,
568570
period: .month,
569571
quantity: 3,
570-
latestDateToInclude: DateFormatter.dateFromString(with: "2022-12-31T17:06:55")) { result in
572+
latestDateToInclude: DateFormatter.dateFromString(with: "2022-12-31T17:06:55"),
573+
saveInStorage: false) { result in
571574
promise(result)
572575
}
573576
store.onAction(action)
@@ -591,7 +594,8 @@ final class StatsStoreV4Tests: XCTestCase {
591594
let action = StatsActionV4.retrieveSiteSummaryStats(siteID: self.sampleSiteID,
592595
period: .day,
593596
quantity: 1,
594-
latestDateToInclude: DateFormatter.dateFromString(with: "2022-12-09T17:06:55")) { result in
597+
latestDateToInclude: DateFormatter.dateFromString(with: "2022-12-09T17:06:55"),
598+
saveInStorage: false) { result in
595599
promise(result)
596600
}
597601
store.onAction(action)
@@ -612,7 +616,8 @@ final class StatsStoreV4Tests: XCTestCase {
612616
let action = StatsActionV4.retrieveSiteSummaryStats(siteID: self.sampleSiteID,
613617
period: .day,
614618
quantity: 1,
615-
latestDateToInclude: DateFormatter.dateFromString(with: "2022-12-09T17:06:55")) { result in
619+
latestDateToInclude: DateFormatter.dateFromString(with: "2022-12-09T17:06:55"),
620+
saveInStorage: false) { result in
616621
promise(result)
617622
}
618623
store.onAction(action)

0 commit comments

Comments
 (0)