Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -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<void> 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<void> 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.',
);
}
}
2 changes: 2 additions & 0 deletions lib/src/database/migrations/all_migrations.dart
Original file line number Diff line number Diff line change
@@ -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;

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