Skip to content

Commit ededb48

Browse files
authored
Fix race condition in appendUserEvent by making it async (#328)
1 parent e62e612 commit ededb48

File tree

2 files changed

+12
-14
lines changed

2 files changed

+12
-14
lines changed

Sources/Nubrick/Data/container.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,7 @@ class ContainerImpl: Container {
217217
func fetchInAppMessage(trigger: String) async -> Result<UIBlock, NubrickError> {
218218
// send the user track event and save it to database
219219
self.trackRepository.trackEvent(TrackUserEvent(name: trigger))
220-
self.databaseRepository.appendUserEvent(name: trigger)
220+
await self.databaseRepository.appendUserEvent(name: trigger)
221221

222222
// fetch config from cdn
223223
var configs: ExperimentConfigs

Sources/Nubrick/Data/database/database.swift

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import Foundation
99
import CoreData
1010

1111
protocol DatabaseRepository {
12-
func appendUserEvent(name: String)
12+
func appendUserEvent(name: String) async
1313
func appendExperimentHistory(experimentId: String)
1414
func isNotInFrequency(experimentId: String, frequency: ExperimentFrequency?) -> Boolean
1515
func isMatchedToUserEventFrequencyCondition(condition: UserEventFrequencyCondition?) -> Boolean
@@ -22,18 +22,16 @@ class DatabaseRepositoryImpl: DatabaseRepository {
2222
self.persistentContainer = persistentContainer
2323
}
2424

25-
func appendUserEvent(name: String) {
26-
Task {
27-
await MainActor.run {
28-
let context = self.persistentContainer.viewContext
29-
let event = UserEventEntity(context: context)
30-
event.name = name
31-
event.timestamp = getCurrentDate()
32-
do {
33-
try context.save()
34-
} catch {
35-
print("Cound'nt save UserEventEntity \(error)")
36-
}
25+
func appendUserEvent(name: String) async {
26+
await MainActor.run {
27+
let context = self.persistentContainer.viewContext
28+
let event = UserEventEntity(context: context)
29+
event.name = name
30+
event.timestamp = getCurrentDate()
31+
do {
32+
try context.save()
33+
} catch {
34+
print("Cound'nt save UserEventEntity \(error)")
3735
}
3836
}
3937
}

0 commit comments

Comments
 (0)