Skip to content

Commit 321f87f

Browse files
authored
Merge pull request #69 from flutter-news-app-full-source-code/fix/new-migration-to-add-saved-filters-limit-to-remote-config
Fix/new migration to add saved filters limit to remote config
2 parents e0e01c7 + b5e201d commit 321f87f

File tree

3 files changed

+56
-1
lines changed

3 files changed

+56
-1
lines changed

lib/src/database/migrations/20251013000056_add_saved_filters_to_user_preferences.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ class AddSavedFiltersToUserPreferences extends Migration {
1010
: super(
1111
prDate: '20251013000056',
1212
prId: '56',
13-
prSummary: 'Add savedFilters field to user_content_preferences',
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',
1415
);
1516

1617
@override
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+
}

lib/src/database/migrations/all_migrations.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import 'package:flutter_news_app_api_server_full_source_code/src/database/migration.dart';
22
import 'package:flutter_news_app_api_server_full_source_code/src/database/migrations/20250924084800__refactor_ad_config_to_role_based.dart';
33
import 'package:flutter_news_app_api_server_full_source_code/src/database/migrations/20251013000056_add_saved_filters_to_user_preferences.dart';
4+
import 'package:flutter_news_app_api_server_full_source_code/src/database/migrations/20251013000057_add_saved_filters_to_remote_config.dart';
45
import 'package:flutter_news_app_api_server_full_source_code/src/services/database_migration_service.dart'
56
show DatabaseMigrationService;
67

@@ -12,4 +13,5 @@ import 'package:flutter_news_app_api_server_full_source_code/src/services/databa
1213
final List<Migration> allMigrations = [
1314
RefactorAdConfigToRoleBased(),
1415
AddSavedFiltersToUserPreferences(),
16+
AddSavedFiltersToRemoteConfig(),
1517
];

0 commit comments

Comments
 (0)