Skip to content

Commit 66d1a0d

Browse files
committed
feat(database): add saved filters limit to remote config
- Introduce new fields for saved filters limits in remote config - Set default values for guest, authenticated, and premium user tiers - Implement migration to add these fields to existing documents - Create reversible migration with up and down methods
1 parent e0e01c7 commit 66d1a0d

File tree

1 file changed

+52
-0
lines changed

1 file changed

+52
-0
lines changed
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
import 'package:flutter_news_app_api_server_full_source_code/src/database/migration.dart';
2+
import 'package:logging/logging.dart';
3+
import 'package:mongo_dart/mongo_dart.dart';
4+
5+
/// Migration to add the `savedFiltersLimit` fields to existing
6+
/// `remote_configs` documents within the `userPreferenceConfig` sub-document.
7+
class AddSavedFiltersToRemoteConfig extends Migration {
8+
/// {@macro add_saved_filters_to_remote_config}
9+
AddSavedFiltersToRemoteConfig()
10+
: super(
11+
prDate: '20251013000057',
12+
prId: '57',
13+
prSummary:
14+
'This pull request introduces the ability for users to save and manage custom filter combinations for news headlines. It achieves this by adding a new SavedFilter data model, integrating it into the existing user content preferences, and implementing configurable limits for these saved filters based on user tiers',
15+
);
16+
17+
@override
18+
Future<void> up(Db db, Logger log) async {
19+
final collection = db.collection('remote_configs');
20+
final result = await collection.updateMany(
21+
// Filter for documents where 'userPreferenceConfig.guestSavedFiltersLimit' does not exist.
22+
// This assumes if one is missing, all are likely missing.
23+
where.notExists('userPreferenceConfig.guestSavedFiltersLimit'),
24+
// Set 'guestSavedFiltersLimit', 'authenticatedSavedFiltersLimit',
25+
// and 'premiumSavedFiltersLimit' to a default value.
26+
modify
27+
.set('userPreferenceConfig.guestSavedFiltersLimit', 3)
28+
.set('userPreferenceConfig.authenticatedSavedFiltersLimit', 10)
29+
.set('userPreferenceConfig.premiumSavedFiltersLimit', 25),
30+
);
31+
log.info(
32+
'Updated ${result.nModified} documents in remote_configs '
33+
'to include savedFiltersLimit fields.',
34+
);
35+
}
36+
37+
@override
38+
Future<void> down(Db db, Logger log) async {
39+
final collection = db.collection('remote_configs');
40+
await collection.updateMany(
41+
where.exists('userPreferenceConfig.guestSavedFiltersLimit'),
42+
modify
43+
.unset('userPreferenceConfig.guestSavedFiltersLimit')
44+
.unset('userPreferenceConfig.authenticatedSavedFiltersLimit')
45+
.unset('userPreferenceConfig.premiumSavedFiltersLimit'),
46+
);
47+
log.info(
48+
'Removed "savedFiltersLimit" fields from remote_configs '
49+
'userPreferenceConfig sub-document.',
50+
);
51+
}
52+
}

0 commit comments

Comments
 (0)