Skip to content

Commit 3a8b6ee

Browse files
authored
Merge pull request #51 from flutter-news-app-full-source-code/fix-country-service-aggregation
Fix country service aggregation
2 parents 53e0df1 + 8346a30 commit 3a8b6ee

File tree

2 files changed

+29
-8
lines changed

2 files changed

+29
-8
lines changed

lib/src/services/country_service.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -73,12 +73,12 @@ class CountryService {
7373
_log.info('Fetching countries with filter: $filter');
7474

7575
final usage = filter?['usage'] as String?;
76-
final name = filter?['name'] as String?;
76+
final q = filter?['q'] as String?;
7777

7878
Map<String, dynamic>? nameFilter;
79-
if (name != null && name.isNotEmpty) {
79+
if (q != null && q.isNotEmpty) {
8080
// Create a case-insensitive regex filter for the name.
81-
nameFilter = {r'$regex': name, r'$options': 'i'};
81+
nameFilter = {r'$regex': q, r'$options': 'i'};
8282
}
8383

8484
if (usage == null || usage.isEmpty) {

lib/src/services/database_seeding_service.dart

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -103,33 +103,54 @@ class DatabaseSeedingService {
103103
Future<void> _ensureIndexes() async {
104104
_log.info('Ensuring database indexes exist...');
105105
try {
106-
// Text index for searching headlines by title
106+
/// Text index for searching headlines by title.
107+
/// This index supports efficient full-text search queries on the 'title' field
108+
/// of headline documents, crucial for the main search functionality.
107109
await _db
108110
.collection('headlines')
109111
.createIndex(keys: {'title': 'text'}, name: 'headlines_text_index');
110112

111-
// Text index for searching topics by name
113+
/// Text index for searching topics by name.
114+
/// This index enables efficient full-text search on the 'name' field of
115+
/// topic documents, used for searching topics.
112116
await _db
113117
.collection('topics')
114118
.createIndex(keys: {'name': 'text'}, name: 'topics_text_index');
115119

116-
// Text index for searching sources by name
120+
/// Text index for searching sources by name.
121+
/// This index facilitates efficient full-text search on the 'name' field of
122+
/// source documents, used for searching sources.
117123
await _db
118124
.collection('sources')
119125
.createIndex(keys: {'name': 'text'}, name: 'sources_text_index');
120126

121-
// Index for searching countries by name (case-insensitive friendly)
127+
/// Index for searching countries by name.
128+
/// This index supports efficient queries and sorting on the 'name' field
129+
/// of country documents, particularly for direct country searches.
122130
await _db
123131
.collection('countries')
124132
.createIndex(keys: {'name': 1}, name: 'countries_name_index');
125133

126-
// Indexes for country aggregation queries
134+
/// Indexes for country aggregation queries.
135+
/// This compound index optimizes queries that filter by 'status' and
136+
/// group by 'eventCountry.id' in the headlines collection.
127137
await _db
128138
.collection('headlines')
129139
.createIndex(
130140
keys: {'status': 1, 'eventCountry.id': 1},
131141
name: 'status_eventCountry_index',
132142
);
143+
/// Index for efficient filtering of headlines by the name of the
144+
/// associated event country. This is crucial for the country search
145+
/// functionality when filtering by 'eventCountry' usage.
146+
await _db
147+
.collection('headlines')
148+
.createIndex(
149+
keys: {'eventCountry.name': 1},
150+
name: 'eventCountry_name_index',
151+
);
152+
/// This compound index optimizes queries that filter by 'status' and
153+
/// group by 'headquarters.id' in the sources collection.
133154
await _db
134155
.collection('sources')
135156
.createIndex(

0 commit comments

Comments
 (0)