diff --git a/lib/src/database/migrations/20251013000056_add_saved_filters_to_user_preferences.dart b/lib/src/database/migrations/20251013000056_add_saved_filters_to_user_preferences.dart index 919df74..da1a245 100644 --- a/lib/src/database/migrations/20251013000056_add_saved_filters_to_user_preferences.dart +++ b/lib/src/database/migrations/20251013000056_add_saved_filters_to_user_preferences.dart @@ -10,7 +10,8 @@ class AddSavedFiltersToUserPreferences extends Migration { : super( prDate: '20251013000056', prId: '56', - prSummary: 'Add savedFilters field to user_content_preferences', + prSummary: + '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', ); @override diff --git a/lib/src/database/migrations/20251013000057_add_saved_filters_to_remote_config.dart b/lib/src/database/migrations/20251013000057_add_saved_filters_to_remote_config.dart new file mode 100644 index 0000000..f64ff79 --- /dev/null +++ b/lib/src/database/migrations/20251013000057_add_saved_filters_to_remote_config.dart @@ -0,0 +1,52 @@ +import 'package:flutter_news_app_api_server_full_source_code/src/database/migration.dart'; +import 'package:logging/logging.dart'; +import 'package:mongo_dart/mongo_dart.dart'; + +/// Migration to add the `savedFiltersLimit` fields to existing +/// `remote_configs` documents within the `userPreferenceConfig` sub-document. +class AddSavedFiltersToRemoteConfig extends Migration { + /// {@macro add_saved_filters_to_remote_config} + AddSavedFiltersToRemoteConfig() + : super( + prDate: '20251013000057', + prId: '57', + prSummary: + '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', + ); + + @override + Future up(Db db, Logger log) async { + final collection = db.collection('remote_configs'); + final result = await collection.updateMany( + // Filter for documents where 'userPreferenceConfig.guestSavedFiltersLimit' does not exist. + // This assumes if one is missing, all are likely missing. + where.notExists('userPreferenceConfig.guestSavedFiltersLimit'), + // Set 'guestSavedFiltersLimit', 'authenticatedSavedFiltersLimit', + // and 'premiumSavedFiltersLimit' to a default value. + modify + .set('userPreferenceConfig.guestSavedFiltersLimit', 3) + .set('userPreferenceConfig.authenticatedSavedFiltersLimit', 10) + .set('userPreferenceConfig.premiumSavedFiltersLimit', 25), + ); + log.info( + 'Updated ${result.nModified} documents in remote_configs ' + 'to include savedFiltersLimit fields.', + ); + } + + @override + Future down(Db db, Logger log) async { + final collection = db.collection('remote_configs'); + await collection.updateMany( + where.exists('userPreferenceConfig.guestSavedFiltersLimit'), + modify + .unset('userPreferenceConfig.guestSavedFiltersLimit') + .unset('userPreferenceConfig.authenticatedSavedFiltersLimit') + .unset('userPreferenceConfig.premiumSavedFiltersLimit'), + ); + log.info( + 'Removed "savedFiltersLimit" fields from remote_configs ' + 'userPreferenceConfig sub-document.', + ); + } +} diff --git a/lib/src/database/migrations/all_migrations.dart b/lib/src/database/migrations/all_migrations.dart index 596767a..699d2dc 100644 --- a/lib/src/database/migrations/all_migrations.dart +++ b/lib/src/database/migrations/all_migrations.dart @@ -1,6 +1,7 @@ import 'package:flutter_news_app_api_server_full_source_code/src/database/migration.dart'; import 'package:flutter_news_app_api_server_full_source_code/src/database/migrations/20250924084800__refactor_ad_config_to_role_based.dart'; import 'package:flutter_news_app_api_server_full_source_code/src/database/migrations/20251013000056_add_saved_filters_to_user_preferences.dart'; +import 'package:flutter_news_app_api_server_full_source_code/src/database/migrations/20251013000057_add_saved_filters_to_remote_config.dart'; import 'package:flutter_news_app_api_server_full_source_code/src/services/database_migration_service.dart' show DatabaseMigrationService; @@ -12,4 +13,5 @@ import 'package:flutter_news_app_api_server_full_source_code/src/services/databa final List allMigrations = [ RefactorAdConfigToRoleBased(), AddSavedFiltersToUserPreferences(), + AddSavedFiltersToRemoteConfig(), ];