-
Notifications
You must be signed in to change notification settings - Fork 18
Expand file tree
/
Copy pathRatingPromptRepository.swift
More file actions
72 lines (59 loc) · 3.12 KB
/
RatingPromptRepository.swift
File metadata and controls
72 lines (59 loc) · 3.12 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
import Domain
import Foundation
actor RatingPromptRepository: RatingPromptRepositoryProtocol {
private let userDefaultsManager: UserDefaultsManagerProtocol
init(userDefaultsManager: UserDefaultsManagerProtocol) {
self.userDefaultsManager = userDefaultsManager
}
func getRatingPromptData() async -> RatingPromptData {
let appLaunchCount = userDefaultsManager.getIntValue(for: UserDefaultsKey.ratingPromptAppLaunchCount.rawValue)
let firstLaunchDateData = userDefaultsManager.getDataValue(for: UserDefaultsKey.ratingPromptFirstLaunchDate.rawValue)
let lastPromptedVersion = userDefaultsManager.getStringValue(for: UserDefaultsKey.ratingPromptLastPromptedVersion.rawValue)
let significantEventCount = userDefaultsManager.getIntValue(for: UserDefaultsKey.ratingPromptSignificantEventCount.rawValue)
var firstLaunchDate: Date?
if let dateData = firstLaunchDateData {
firstLaunchDate = try? JSONDecoder().decode(Date.self, from: dateData)
}
return RatingPromptData(
appLaunchCount: appLaunchCount,
firstLaunchDate: firstLaunchDate,
lastPromptedVersion: lastPromptedVersion,
significantEventCount: significantEventCount
)
}
func recordAppLaunch() async {
let currentCount = userDefaultsManager.getIntValue(for: UserDefaultsKey.ratingPromptAppLaunchCount.rawValue)
userDefaultsManager.set(currentCount + 1, for: UserDefaultsKey.ratingPromptAppLaunchCount.rawValue)
if userDefaultsManager.getDataValue(for: UserDefaultsKey.ratingPromptFirstLaunchDate.rawValue) == nil {
let now = Date()
if let dateData = try? JSONEncoder().encode(now) {
userDefaultsManager.set(dateData, for: UserDefaultsKey.ratingPromptFirstLaunchDate.rawValue)
}
}
userDefaultsManager.synchronize()
}
func recordSignificantEvent() async {
let currentCount = userDefaultsManager.getIntValue(for: UserDefaultsKey.ratingPromptSignificantEventCount.rawValue)
userDefaultsManager.set(currentCount + 1, for: UserDefaultsKey.ratingPromptSignificantEventCount.rawValue)
userDefaultsManager.synchronize()
}
func recordPromptShown(for appVersion: String) async {
userDefaultsManager.set(appVersion, for: UserDefaultsKey.ratingPromptLastPromptedVersion.rawValue)
userDefaultsManager.synchronize()
}
func resetCounters() async {
userDefaultsManager.set(0, for: UserDefaultsKey.ratingPromptAppLaunchCount.rawValue)
userDefaultsManager.set(0, for: UserDefaultsKey.ratingPromptSignificantEventCount.rawValue)
userDefaultsManager.synchronize()
}
func clearAllData() async {
let keys = [
UserDefaultsKey.ratingPromptAppLaunchCount.rawValue,
UserDefaultsKey.ratingPromptFirstLaunchDate.rawValue,
UserDefaultsKey.ratingPromptLastPromptedVersion.rawValue,
UserDefaultsKey.ratingPromptSignificantEventCount.rawValue
]
userDefaultsManager.clearData(forKeys: keys)
userDefaultsManager.synchronize()
}
}