1
1
import 'dart:convert' ;
2
2
import 'package:ht_shared/ht_shared.dart' ;
3
- import 'package:ht_shared/src/fixtures/fixtures.dart' ;
4
3
import 'package:logging/logging.dart' ;
5
4
import 'package:postgres/postgres.dart' ;
6
5
@@ -174,8 +173,7 @@ class DatabaseSeedingService {
174
173
try {
175
174
// Seed Topics
176
175
_log.fine ('Seeding topics...' );
177
- for (final data in topicsFixturesData) {
178
- final topic = Topic .fromJson (data);
176
+ for (final topic in topicsFixturesData) {
179
177
final params = topic.toJson ()
180
178
..putIfAbsent ('description' , () => null )
181
179
..putIfAbsent ('icon_url' , () => null )
@@ -194,8 +192,7 @@ class DatabaseSeedingService {
194
192
195
193
// Seed Countries (must be done before sources and headlines)
196
194
_log.fine ('Seeding countries...' );
197
- for (final data in countriesFixturesData) {
198
- final country = Country .fromJson (data);
195
+ for (final country in countriesFixturesData) {
199
196
final params = country.toJson ()
200
197
..putIfAbsent ('updated_at' , () => null );
201
198
@@ -212,8 +209,7 @@ class DatabaseSeedingService {
212
209
213
210
// Seed Sources
214
211
_log.fine ('Seeding sources...' );
215
- for (final data in sourcesFixturesData) {
216
- final source = Source .fromJson (data);
212
+ for (final source in sourcesFixturesData) {
217
213
final params = source.toJson ()
218
214
// The `headquarters` field in the model is a nested `Country`
219
215
// object. We extract its ID to store in the
@@ -243,8 +239,7 @@ class DatabaseSeedingService {
243
239
244
240
// Seed Headlines
245
241
_log.fine ('Seeding headlines...' );
246
- for (final data in headlinesFixturesData) {
247
- final headline = Headline .fromJson (data);
242
+ for (final headline in headlinesFixturesData) {
248
243
final params = headline.toJson ()
249
244
..['source_id' ] = headline.source.id
250
245
..['topic_id' ] = headline.topic.id
@@ -296,7 +291,7 @@ class DatabaseSeedingService {
296
291
try {
297
292
// Seed RemoteConfig
298
293
_log.fine ('Seeding RemoteConfig...' );
299
- final remoteConfig = RemoteConfig . fromJson (remoteConfigFixtureData) ;
294
+ final remoteConfig = remoteConfigFixture ;
300
295
// The `remote_config` table has multiple JSONB columns. We must
301
296
// provide an explicit map with JSON-encoded values to avoid a
302
297
// "superfluous variables" error from the postgres driver.
@@ -322,11 +317,10 @@ class DatabaseSeedingService {
322
317
// Seed Admin User
323
318
_log.fine ('Seeding admin user...' );
324
319
// Find the admin user in the fixture data.
325
- final adminUserFixture = usersFixturesData.firstWhere (
326
- (data ) => data[ 'dashboard_role' ] == DashboardUserRole .admin.name ,
320
+ final adminUser = usersFixturesData.firstWhere (
321
+ (user ) => user.dashboardRole == DashboardUserRole .admin,
327
322
orElse: () => throw StateError ('Admin user not found in fixtures.' ),
328
323
);
329
- final adminUser = User .fromJson (adminUserFixture);
330
324
331
325
// The `users` table has specific columns for roles and status.
332
326
await _connection.execute (
@@ -336,19 +330,20 @@ class DatabaseSeedingService {
336
330
'@dashboard_role, @feed_action_status) '
337
331
'ON CONFLICT (id) DO NOTHING' ,
338
332
),
339
- parameters: adminUser.toJson ()
340
- ..['feed_action_status' ] =
341
- jsonEncode (adminUser.feedActionStatus.toJson ()),
333
+ parameters: () {
334
+ final params = adminUser.toJson ();
335
+ params['feed_action_status' ] =
336
+ jsonEncode (params['feed_action_status' ]);
337
+ return params;
338
+ }(),
342
339
);
343
340
344
341
// Seed default settings and preferences for the admin user.
345
- final adminSettings = UserAppSettings .fromJson (
346
- userAppSettingsFixturesData
347
- .firstWhere ((data) => data['id' ] == adminUser.id),
342
+ final adminSettings = userAppSettingsFixturesData.firstWhere (
343
+ (settings) => settings.id == adminUser.id,
348
344
);
349
- final adminPreferences = UserContentPreferences .fromJson (
350
- userContentPreferencesFixturesData
351
- .firstWhere ((data) => data['id' ] == adminUser.id),
345
+ final adminPreferences = userContentPreferencesFixturesData.firstWhere (
346
+ (prefs) => prefs.id == adminUser.id,
352
347
);
353
348
354
349
await _connection.execute (
@@ -358,10 +353,13 @@ class DatabaseSeedingService {
358
353
'@display_settings, @language, @feed_preferences) '
359
354
'ON CONFLICT (id) DO NOTHING' ,
360
355
),
361
- parameters: adminSettings.toJson ()
362
- ..['user_id' ] = adminUser.id
363
- ..['display_settings' ] = jsonEncode (adminSettings.displaySettings)
364
- ..['feed_preferences' ] = jsonEncode (adminSettings.feedPreferences),
356
+ parameters: () {
357
+ final params = adminSettings.toJson ();
358
+ params['user_id' ] = adminUser.id;
359
+ params['display_settings' ] = jsonEncode (params['display_settings' ]);
360
+ params['feed_preferences' ] = jsonEncode (params['feed_preferences' ]);
361
+ return params;
362
+ }(),
365
363
);
366
364
367
365
await _connection.execute (
@@ -372,12 +370,15 @@ class DatabaseSeedingService {
372
370
'@followed_sources, @followed_countries, @saved_headlines) '
373
371
'ON CONFLICT (id) DO NOTHING' ,
374
372
),
375
- parameters: adminPreferences.toJson ()
376
- ..['user_id' ] = adminUser.id
377
- ..['followed_topics' ] = jsonEncode (adminPreferences.followedTopics)
378
- ..['followed_sources' ] = jsonEncode (adminPreferences.followedSources)
379
- ..['followed_countries' ] = jsonEncode (adminPreferences.followedCountries)
380
- ..['saved_headlines' ] = jsonEncode (adminPreferences.savedHeadlines),
373
+ parameters: () {
374
+ final params = adminPreferences.toJson ();
375
+ params['user_id' ] = adminUser.id;
376
+ params['followed_topics' ] = jsonEncode (params['followed_topics' ]);
377
+ params['followed_sources' ] = jsonEncode (params['followed_sources' ]);
378
+ params['followed_countries' ] = jsonEncode (params['followed_countries' ]);
379
+ params['saved_headlines' ] = jsonEncode (params['saved_headlines' ]);
380
+ return params;
381
+ }(),
381
382
);
382
383
383
384
await _connection.execute ('COMMIT' );
0 commit comments