From 1e3b1e836ac1ba1aef1d41aa1f2e9bed42cb526a Mon Sep 17 00:00:00 2001 From: Jan Klausa Date: Sat, 23 Feb 2019 01:57:24 +0100 Subject: [PATCH 1/2] expose a memberwise initializer for `PostingStreakEvent` --- WordPressKit/Insights/StatsPostingStreakInsight.swift | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/WordPressKit/Insights/StatsPostingStreakInsight.swift b/WordPressKit/Insights/StatsPostingStreakInsight.swift index 4b8e1eb7..fe4bd72f 100644 --- a/WordPressKit/Insights/StatsPostingStreakInsight.swift +++ b/WordPressKit/Insights/StatsPostingStreakInsight.swift @@ -12,6 +12,11 @@ public struct StatsPostingStreakInsight { public struct PostingStreakEvent { public let date: Date public let postCount: Int + + public init(date: Date, postCount: Int) { + self.date = date + self.postCount = postCount + } } extension StatsPostingStreakInsight: InsightProtocol { From 9a4172773b2a0b35c8fad25942171b1128b551db Mon Sep 17 00:00:00 2001 From: Jan Klausa Date: Mon, 25 Feb 2019 17:02:43 +0100 Subject: [PATCH 2/2] Change how streak insights are fetched in hope of getting all of them --- .../Insights/StatsPostingStreakInsight.swift | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/WordPressKit/Insights/StatsPostingStreakInsight.swift b/WordPressKit/Insights/StatsPostingStreakInsight.swift index fe4bd72f..57e68dc0 100644 --- a/WordPressKit/Insights/StatsPostingStreakInsight.swift +++ b/WordPressKit/Insights/StatsPostingStreakInsight.swift @@ -26,6 +26,32 @@ extension StatsPostingStreakInsight: InsightProtocol { return "stats/streak" } + // Some heavy-traffic sites can have A LOT of posts and the default query parameters wouldn't + // return all the relevant streak data, so we manualy override the `max` and `startDate``/endDate` + // parameters to hopefully get all. + public static var queryProperties: [String: String] { + let today = Date() + + let numberOfDaysInCurrentMonth = Calendar.autoupdatingCurrent.range(of: .day, in: .month, for: today) + + guard + let firstDayIndex = numberOfDaysInCurrentMonth?.first, + let lastDayIndex = numberOfDaysInCurrentMonth?.last, + let lastDayOfMonth = Calendar.autoupdatingCurrent.date(bySetting: .day, value: lastDayIndex, of: today), + let firstDayOfMonth = Calendar.autoupdatingCurrent.date(bySetting: .day, value: firstDayIndex, of: today), + let yearAgo = Calendar.autoupdatingCurrent.date(byAdding: .year, value: -1, to: firstDayOfMonth) + else { + return [:] + } + + let firstDayString = self.dateFormatter.string(from: yearAgo) + let lastDayString = self.dateFormatter.string(from: lastDayOfMonth) + + return ["startDate": "\(firstDayString)", + "endDate": "\(lastDayString)", + "max": "5000"] + } + public init?(jsonDictionary: [String: AnyObject]) { guard let postsData = jsonDictionary["data"] as? [String: AnyObject],