Skip to content

Commit f2728d3

Browse files
committed
style: misc
1 parent c07b782 commit f2728d3

File tree

7 files changed

+42
-30
lines changed

7 files changed

+42
-30
lines changed

analysis_options.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ analyzer:
99
avoid_dynamic_calls: ignore
1010
avoid_catching_errors: ignore
1111
document_ignores: ignore
12+
one_member_abstracts: ignore
1213
exclude:
1314
- build/**
1415
linter:

lib/src/feed_enhancement/decorators/ad_decorator.dart

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@ import 'package:uuid/uuid.dart';
1212
/// {@endtemplate}
1313
class AdDecorator implements FeedDecorator {
1414
/// {@macro ad_decorator}
15-
const AdDecorator({Uuid? uuidGenerator}) : _uuid = uuidGenerator ?? const Uuid();
15+
const AdDecorator({Uuid? uuidGenerator})
16+
: _uuid = uuidGenerator ?? const Uuid();
1617

1718
final Uuid _uuid;
1819

@@ -49,8 +50,7 @@ class AdDecorator implements FeedDecorator {
4950
}
5051

5152
final decoratedFeed = <FeedItem>[];
52-
int primaryItemCount = 0;
53-
int adsInjected = 0;
53+
var primaryItemCount = 0;
5454

5555
for (var i = 0; i < currentFeedItems.length; i++) {
5656
decoratedFeed.add(currentFeedItems[i]);
@@ -66,10 +66,10 @@ class AdDecorator implements FeedDecorator {
6666
targetUrl: 'https://example.com/ad_click_target',
6767
adType: AdType.banner, // Example ad type
6868
placement: AdPlacement.feedInlineStandardBanner, // Example placement
69-
action: const OpenExternalUrl(url: 'https://example.com/ad_click_target'),
69+
action:
70+
const OpenExternalUrl(url: 'https://example.com/ad_click_target'),
7071
);
7172
decoratedFeed.add(adItem);
72-
adsInjected++;
7373
// Reset primaryItemCount to ensure interval is respected after injection
7474
primaryItemCount = 0;
7575
}

lib/src/feed_enhancement/decorators/engagement_decorator.dart

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import 'package:ht_api/src/feed_enhancement/feed_decorator.dart';
22
import 'package:ht_api/src/feed_enhancement/feed_enhancement_context.dart';
3-
import 'package:ht_data_repository/ht_data_repository.dart';
43
import 'package:ht_shared/ht_shared.dart';
54
import 'package:uuid/uuid.dart';
65

@@ -55,7 +54,7 @@ class EngagementDecorator implements FeedDecorator {
5554
// Variables to hold the selected rule and template
5655
EngagementRule? ruleToInject;
5756
EngagementContentTemplate? templateToInject;
58-
int selectedRuleShownCount = 0; // Initialize to 0
57+
var selectedRuleShownCount = 0; // Initialize to 0
5958

6059
for (final rule in rules) {
6160
// 1. Check user role
@@ -80,8 +79,8 @@ class EngagementDecorator implements FeedDecorator {
8079
}
8180

8281
// 4. Check minDaysSinceLastShown
83-
final lastShownTimestamp =
84-
updatedAppSettings.engagementLastShownTimestamps[rule.templateType.name];
82+
final lastShownTimestamp = updatedAppSettings
83+
.engagementLastShownTimestamps[rule.templateType.name];
8584
if (rule.minDaysSinceLastShown != null && lastShownTimestamp != null) {
8685
final daysSinceLastShown = now.difference(lastShownTimestamp).inDays;
8786
if (daysSinceLastShown < rule.minDaysSinceLastShown!) {
@@ -109,7 +108,8 @@ class EngagementDecorator implements FeedDecorator {
109108
// If we reach here, this rule is a candidate.
110109
// For simplicity, we'll inject the first valid one found.
111110
ruleToInject = rule;
112-
selectedRuleShownCount = currentShownCount; // Capture for the selected rule
111+
selectedRuleShownCount =
112+
currentShownCount; // Capture for the selected rule
113113
break; // Exit loop after finding the first suitable rule
114114
}
115115

@@ -123,7 +123,8 @@ class EngagementDecorator implements FeedDecorator {
123123
EngagementContentType.values.byName(ruleToInject.templateType.name),
124124
// Action for the client to perform when this is tapped.
125125
// This could be more dynamic based on templateType or rule.
126-
action: const OpenExternalUrl(url: 'https://example.com/engagement_action'),
126+
action:
127+
const OpenExternalUrl(url: 'https://example.com/engagement_action'),
127128
);
128129

129130
// Determine placement (simple for now, can be enhanced)
@@ -136,7 +137,10 @@ class EngagementDecorator implements FeedDecorator {
136137
// Not enough primary items for this placement, do not insert
137138
} else if (placement.afterPrimaryItemIndex != null &&
138139
placement.afterPrimaryItemIndex! < decoratedFeed.length) {
139-
decoratedFeed.insert(placement.afterPrimaryItemIndex! + 1, engagementItem);
140+
decoratedFeed.insert(
141+
placement.afterPrimaryItemIndex! + 1,
142+
engagementItem,
143+
);
140144
inserted = true;
141145
} else if (placement.relativePosition == 'middle' &&
142146
decoratedFeed.isNotEmpty) {

lib/src/feed_enhancement/decorators/suggested_content_decorator.dart

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import 'package:ht_api/src/feed_enhancement/feed_decorator.dart';
22
import 'package:ht_api/src/feed_enhancement/feed_enhancement_context.dart';
3-
import 'package:ht_data_repository/ht_data_repository.dart';
43
import 'package:ht_shared/ht_shared.dart';
54
import 'package:uuid/uuid.dart';
65

@@ -38,7 +37,7 @@ class SuggestedContentDecorator implements FeedDecorator {
3837
// Find a suitable suggestion to inject
3938
SuggestionRule? ruleToInject;
4039
SuggestedContentTemplate? templateToInject;
41-
List<FeedItem> dynamicItems = [];
40+
var dynamicItems = <FeedItem>[];
4241

4342
for (final rule in rules) {
4443
// 1. Check user role
@@ -139,7 +138,10 @@ class SuggestedContentDecorator implements FeedDecorator {
139138
// Not enough primary items for this placement, do not insert
140139
} else if (placement.afterPrimaryItemIndex != null &&
141140
placement.afterPrimaryItemIndex! < decoratedFeed.length) {
142-
decoratedFeed.insert(placement.afterPrimaryItemIndex! + 1, suggestedItem);
141+
decoratedFeed.insert(
142+
placement.afterPrimaryItemIndex! + 1,
143+
suggestedItem,
144+
);
143145
inserted = true;
144146
} else if (placement.relativePosition == 'middle' &&
145147
decoratedFeed.isNotEmpty) {

lib/src/feed_enhancement/feed_enhancement_context.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import 'package:ht_api/src/feed_enhancement/feed_decorator.dart'
2+
show FeedDecorator;
13
import 'package:ht_data_repository/ht_data_repository.dart';
24
import 'package:ht_shared/ht_shared.dart';
35

routes/_middleware.dart

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,20 @@ import 'dart:convert';
22
import 'dart:io';
33

44
import 'package:dart_frog/dart_frog.dart';
5+
import 'package:ht_api/src/feed_enhancement/decorators/ad_decorator.dart'; // New
6+
import 'package:ht_api/src/feed_enhancement/decorators/engagement_decorator.dart'; // New
7+
import 'package:ht_api/src/feed_enhancement/decorators/suggested_content_decorator.dart'; // New
58
import 'package:ht_api/src/middlewares/error_handler.dart';
69
import 'package:ht_api/src/rbac/permission_service.dart'; // Import PermissionService
710
import 'package:ht_api/src/registry/model_registry.dart';
811
import 'package:ht_api/src/services/auth_service.dart';
912
import 'package:ht_api/src/services/auth_token_service.dart';
1013
import 'package:ht_api/src/services/default_user_preference_limit_service.dart'; // Import DefaultUserPreferenceLimitService
14+
import 'package:ht_api/src/services/feed_enhancement_service.dart'; // New
1115
import 'package:ht_api/src/services/jwt_auth_token_service.dart';
1216
import 'package:ht_api/src/services/token_blacklist_service.dart';
1317
import 'package:ht_api/src/services/user_preference_limit_service.dart'; // Import UserPreferenceLimitService interface
1418
import 'package:ht_api/src/services/verification_code_storage_service.dart';
15-
import 'package:ht_api/src/services/feed_enhancement_service.dart'; // New
16-
import 'package:ht_api/src/feed_enhancement/feed_decorator.dart'; // New
17-
import 'package:ht_api/src/feed_enhancement/decorators/ad_decorator.dart'; // New
18-
import 'package:ht_api/src/feed_enhancement/decorators/engagement_decorator.dart'; // New
19-
import 'package:ht_api/src/feed_enhancement/decorators/suggested_content_decorator.dart'; // New
2019
import 'package:ht_data_inmemory/ht_data_inmemory.dart';
2120
import 'package:ht_data_repository/ht_data_repository.dart';
2221
import 'package:ht_email_inmemory/ht_email_inmemory.dart';
@@ -308,11 +307,12 @@ Handler middleware(Handler handler) {
308307
print('[MiddlewareSetup] DefaultUserPreferenceLimitService instantiated.');
309308

310309
// --- Feed Enhancement Dependencies ---
311-
final adDecorator = AdDecorator(uuidGenerator: uuid);
312-
final engagementDecorator = EngagementDecorator(uuidGenerator: uuid);
313-
final suggestedContentDecorator = SuggestedContentDecorator(uuidGenerator: uuid);
310+
const adDecorator = AdDecorator(uuidGenerator: uuid);
311+
const engagementDecorator = EngagementDecorator(uuidGenerator: uuid);
312+
const suggestedContentDecorator =
313+
SuggestedContentDecorator(uuidGenerator: uuid);
314314

315-
final feedEnhancementService = FeedEnhancementService(
315+
const feedEnhancementService = FeedEnhancementService(
316316
decorators: [
317317
adDecorator,
318318
engagementDecorator,

routes/api/v1/data/index.dart

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,7 @@ Future<Response> onRequest(RequestContext context) async {
2121
final authenticatedUser = context.read<User>();
2222
final permissionService =
2323
context.read<PermissionService>(); // Read PermissionService
24-
final feedEnhancementService =
25-
context.read<FeedEnhancementService>(); // New
24+
final feedEnhancementService = context.read<FeedEnhancementService>(); // New
2625

2726
// The main try/catch block here is removed to let the errorHandler middleware
2827
// handle all exceptions thrown by the handlers below.
@@ -62,7 +61,8 @@ Future<Response> _handleGet(
6261
ModelConfig<dynamic> modelConfig,
6362
User authenticatedUser,
6463
PermissionService permissionService, // Receive PermissionService
65-
FeedEnhancementService feedEnhancementService, // Receive FeedEnhancementService
64+
FeedEnhancementService
65+
feedEnhancementService, // Receive FeedEnhancementService
6666
String requestId,
6767
) async {
6868
// Authorization check is handled by authorizationMiddleware before this.
@@ -251,9 +251,12 @@ Future<Response> _handleGet(
251251
authenticatedUser: authenticatedUser,
252252
appConfig: context.read<AppConfig>(),
253253
primaryModelName: modelName,
254-
userAppSettingsRepository: context.read<HtDataRepository<UserAppSettings>>(),
255-
engagementContentTemplateRepository: context.read<HtDataRepository<EngagementContentTemplate>>(),
256-
suggestedContentTemplateRepository: context.read<HtDataRepository<SuggestedContentTemplate>>(),
254+
userAppSettingsRepository:
255+
context.read<HtDataRepository<UserAppSettings>>(),
256+
engagementContentTemplateRepository:
257+
context.read<HtDataRepository<EngagementContentTemplate>>(),
258+
suggestedContentTemplateRepository:
259+
context.read<HtDataRepository<SuggestedContentTemplate>>(),
257260
categoryRepository: context.read<HtDataRepository<Category>>(),
258261
sourceRepository: context.read<HtDataRepository<Source>>(),
259262
countryRepository: context.read<HtDataRepository<Country>>(),

0 commit comments

Comments
 (0)