@@ -9,8 +9,13 @@ final class GenerateAllVariationsUseCase {
99 ///
1010 private let stores : StoresManager
1111
12- init ( stores: StoresManager ) {
12+ /// Analytics tracker.
13+ ///
14+ private let analytics : Analytics
15+
16+ init ( stores: StoresManager , analytics: Analytics = ServiceLocator . analytics) {
1317 self . stores = stores
18+ self . analytics = analytics
1419 }
1520
1621 /// Generates all missing variations for a product. Up to 100 variations.
@@ -22,7 +27,7 @@ final class GenerateAllVariationsUseCase {
2227
2328 // Fetch Previous variations
2429 onStateChanged ( . fetching)
25- fetchAllVariations ( of: product) { result in
30+ fetchAllVariations ( of: product) { [ analytics ] result in
2631 switch result {
2732 case . success( let existingVariations) :
2833
@@ -31,6 +36,7 @@ final class GenerateAllVariationsUseCase {
3136
3237 // Guard for 100 variation limit
3338 guard variationsToGenerate. count <= 100 else {
39+ analytics. track ( event: . Variations. productVariationGenerationLimitReached ( count: Int64 ( variationsToGenerate. count) ) )
3440 return onStateChanged ( . error( . tooManyVariations( variationCount: variationsToGenerate. count) ) )
3541 }
3642
@@ -46,6 +52,8 @@ final class GenerateAllVariationsUseCase {
4652 return onStateChanged ( . canceled)
4753 }
4854
55+ analytics. track ( event: . Variations. productVariationGenerationConfirmed ( count: Int64 ( variationsToGenerate. count) ) )
56+
4957 // Create variations remotely
5058 onStateChanged ( . creating)
5159 self . createVariationsRemotely ( for: product, variations: variationsToGenerate) { result in
@@ -65,7 +73,8 @@ final class GenerateAllVariationsUseCase {
6573
6674 case . failure( let error) :
6775 onStateChanged ( . error( . unableToFetchVariations) )
68- DDLogError ( " ⛔️ Failed to create variations: \( error) " )
76+ DDLogError ( " ⛔️ Failed to fetch variations: \( error) " )
77+ analytics. track ( event: . Variations. productVariationGenerationFailure ( ) )
6978 }
7079 }
7180 }
@@ -88,13 +97,16 @@ private extension GenerateAllVariationsUseCase {
8897 onCompletion: @escaping ( Result < [ ProductVariation ] , GenerationError > ) -> Void ) {
8998 let action = ProductVariationAction . createProductVariations ( siteID: product. siteID,
9099 productID: product. productID,
91- productVariations: variations, onCompletion: { result in
100+ productVariations: variations, onCompletion: { [ analytics ] result in
92101 switch result {
93102 case . success( let variations) :
94103 onCompletion ( . success( variations) )
104+ analytics. track ( event: . Variations. productVariationGenerationSuccess ( ) )
105+
95106 case . failure( let error) :
96107 onCompletion ( . failure( . unableToCreateVariations) )
97108 DDLogError ( " ⛔️ Failed to create variations: \( error) " )
109+ analytics. track ( event: . Variations. productVariationGenerationFailure ( ) )
98110 }
99111 } )
100112 stores. dispatch ( action)
0 commit comments