@@ -20,34 +20,37 @@ import 'package:mongo_dart/mongo_dart.dart';
2020class RefactorAdConfigToRoleBased extends Migration {
2121 /// {@macro refactor_ad_config_to_role_based}
2222 RefactorAdConfigToRoleBased ()
23- : super (
24- version: '20250924084800' ,
25- description: 'Refactor adConfig to use role-based visibleTo maps' ,
26- gitHubPullRequest:
27- 'https://github.com/flutter-news-app-full-source-code/core/pull/50' ,
28- );
23+ : super (
24+ prDate: '20250924084800' ,
25+ prSummary: 'Refactor adConfig to use role-based visibleTo maps' ,
26+ prId: '50' ,
27+ );
2928
3029 @override
3130 Future <void > up (Db db, Logger log) async {
32- log.info ('Applying migration: Refactor adConfig to role-based visibleTo maps.' );
31+ log.info (
32+ 'Applying migration PR#$prId (Date: $prDate ): $prSummary .' ,
33+ );
3334
3435 final remoteConfigCollection = db.collection ('remote_configs' );
3536
3637 // Define default FeedAdFrequencyConfig for roles
37- const defaultGuestFeedAdFrequency =
38- FeedAdFrequencyConfig (adFrequency: 5 , adPlacementInterval: 3 );
39- const defaultStandardUserFeedAdFrequency =
40- FeedAdFrequencyConfig (adFrequency: 10 , adPlacementInterval: 5 );
41- const defaultPremiumUserFeedAdFrequency =
42- FeedAdFrequencyConfig (adFrequency: 0 , adPlacementInterval: 0 );
43-
38+ const defaultGuestFeedAdFrequency = FeedAdFrequencyConfig (
39+ adFrequency: 5 ,
40+ adPlacementInterval: 3 ,
41+ );
42+ const defaultStandardUserFeedAdFrequency = FeedAdFrequencyConfig (
43+ adFrequency: 10 ,
44+ adPlacementInterval: 5 ,
45+ );
4446 // Define default InterstitialAdFrequencyConfig for roles
45- const defaultGuestInterstitialAdFrequency =
46- InterstitialAdFrequencyConfig (transitionsBeforeShowingInterstitialAds: 5 );
47+ const defaultGuestInterstitialAdFrequency = InterstitialAdFrequencyConfig (
48+ transitionsBeforeShowingInterstitialAds: 5 ,
49+ );
4750 const defaultStandardUserInterstitialAdFrequency =
48- InterstitialAdFrequencyConfig (transitionsBeforeShowingInterstitialAds : 10 );
49- const defaultPremiumUserInterstitialAdFrequency =
50- InterstitialAdFrequencyConfig (transitionsBeforeShowingInterstitialAds : 50000 );
51+ InterstitialAdFrequencyConfig (
52+ transitionsBeforeShowingInterstitialAds : 10 ,
53+ );
5154
5255 // Define default ArticleAdSlot visibility for roles
5356 final defaultArticleAdSlots = {
@@ -57,25 +60,35 @@ class RefactorAdConfigToRoleBased extends Migration {
5760
5861 final result = await remoteConfigCollection.updateMany (
5962 // Find documents that still have the old structure (e.g., old frequency fields)
60- where.exists ('adConfig.feedAdConfiguration.frequencyConfig.guestAdFrequency' ),
63+ where.exists (
64+ 'adConfig.feedAdConfiguration.frequencyConfig.guestAdFrequency' ,
65+ ),
6166 ModifierBuilder ()
6267 // --- FeedAdConfiguration Transformation ---
6368 // Remove old frequencyConfig fields
6469 ..unset ('adConfig.feedAdConfiguration.frequencyConfig.guestAdFrequency' )
65- ..unset ('adConfig.feedAdConfiguration.frequencyConfig.guestAdPlacementInterval' )
66- ..unset ('adConfig.feedAdConfiguration.frequencyConfig.authenticatedAdFrequency' )
67- ..unset ('adConfig.feedAdConfiguration.frequencyConfig.authenticatedAdPlacementInterval' )
68- ..unset ('adConfig.feedAdConfiguration.frequencyConfig.premiumAdFrequency' )
69- ..unset ('adConfig.feedAdConfiguration.frequencyConfig.premiumAdPlacementInterval' )
70+ ..unset (
71+ 'adConfig.feedAdConfiguration.frequencyConfig.guestAdPlacementInterval' ,
72+ )
73+ ..unset (
74+ 'adConfig.feedAdConfiguration.frequencyConfig.authenticatedAdFrequency' ,
75+ )
76+ ..unset (
77+ 'adConfig.feedAdConfiguration.frequencyConfig.authenticatedAdPlacementInterval' ,
78+ )
79+ ..unset (
80+ 'adConfig.feedAdConfiguration.frequencyConfig.premiumAdFrequency' ,
81+ )
82+ ..unset (
83+ 'adConfig.feedAdConfiguration.frequencyConfig.premiumAdPlacementInterval' ,
84+ )
7085 // Set the new visibleTo map for FeedAdConfiguration
7186 ..set (
7287 'adConfig.feedAdConfiguration.visibleTo' ,
7388 {
7489 AppUserRole .guestUser.name: defaultGuestFeedAdFrequency.toJson (),
75- AppUserRole .standardUser.name:
76- defaultStandardUserFeedAdFrequency.toJson (),
77- AppUserRole .premiumUser.name:
78- defaultPremiumUserFeedAdFrequency.toJson (),
90+ AppUserRole .standardUser.name: defaultStandardUserFeedAdFrequency
91+ .toJson (),
7992 },
8093 )
8194 // --- ArticleAdConfiguration Transformation ---
@@ -87,24 +100,27 @@ class RefactorAdConfigToRoleBased extends Migration {
87100 {
88101 AppUserRole .guestUser.name: defaultArticleAdSlots,
89102 AppUserRole .standardUser.name: defaultArticleAdSlots,
90- AppUserRole .premiumUser.name: defaultArticleAdSlots,
91103 },
92104 )
93105 // --- InterstitialAdConfiguration Transformation ---
94106 // Remove old feedInterstitialAdFrequencyConfig fields
95- ..unset ('adConfig.interstitialAdConfiguration.feedInterstitialAdFrequencyConfig.guestTransitionsBeforeShowingInterstitialAds' )
96- ..unset ('adConfig.interstitialAdConfiguration.feedInterstitialAdFrequencyConfig.standardUserTransitionsBeforeShowingInterstitialAds' )
97- ..unset ('adConfig.interstitialAdConfiguration.feedInterstitialAdFrequencyConfig.premiumUserTransitionsBeforeShowingInterstitialAds' )
107+ ..unset (
108+ 'adConfig.interstitialAdConfiguration.feedInterstitialAdFrequencyConfig.guestTransitionsBeforeShowingInterstitialAds' ,
109+ )
110+ ..unset (
111+ 'adConfig.interstitialAdConfiguration.feedInterstitialAdFrequencyConfig.standardUserTransitionsBeforeShowingInterstitialAds' ,
112+ )
113+ ..unset (
114+ 'adConfig.interstitialAdConfiguration.feedInterstitialAdFrequencyConfig.premiumUserTransitionsBeforeShowingInterstitialAds' ,
115+ )
98116 // Set the new visibleTo map for InterstitialAdConfiguration
99117 ..set (
100118 'adConfig.interstitialAdConfiguration.visibleTo' ,
101119 {
102- AppUserRole .guestUser.name:
103- defaultGuestInterstitialAdFrequency .toJson (),
120+ AppUserRole .guestUser.name: defaultGuestInterstitialAdFrequency
121+ .toJson (),
104122 AppUserRole .standardUser.name:
105123 defaultStandardUserInterstitialAdFrequency.toJson (),
106- AppUserRole .premiumUser.name:
107- defaultPremiumUserInterstitialAdFrequency.toJson (),
108124 },
109125 ),
110126 );
@@ -125,7 +141,9 @@ class RefactorAdConfigToRoleBased extends Migration {
125141 // Reverting to the old structure would require re-introducing the old fields
126142 // and potentially losing data if the new structure was used.
127143 // For simplicity in this example, we'll just unset the new fields.
128- final result = await db.collection ('remote_configs' ).updateMany (
144+ final result = await db
145+ .collection ('remote_configs' )
146+ .updateMany (
129147 where.exists ('adConfig.feedAdConfiguration.visibleTo' ),
130148 ModifierBuilder ()
131149 ..unset ('adConfig.feedAdConfiguration.visibleTo' )
0 commit comments