Skip to content

Commit 156bac5

Browse files
committed
feat(limits): add saved filters limit check
- Implement limit check for saved filters based on user account type - Update existing limit logic to handle country, source, and topic items separately - Add new Premium, Standard, and Guest limits for saved filters
1 parent 7043258 commit 156bac5

File tree

1 file changed

+26
-6
lines changed

1 file changed

+26
-6
lines changed

lib/src/services/default_user_preference_limit_service.dart

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -50,18 +50,28 @@ class DefaultUserPreferenceLimitService implements UserPreferenceLimitService {
5050
// 2. Determine the limit based on the user's app role.
5151
int limit;
5252
String accountType;
53+
final isFollowedItem =
54+
itemType == 'country' || itemType == 'source' || itemType == 'topic';
5355

5456
switch (user.appRole) {
5557
case AppUserRole.premiumUser:
5658
accountType = 'premium';
57-
limit = (itemType == 'headline')
58-
? limits.premiumSavedHeadlinesLimit
59-
: limits.premiumFollowedItemsLimit;
59+
if (isFollowedItem) {
60+
limit = limits.premiumFollowedItemsLimit;
61+
} else if (itemType == 'headline') {
62+
limit = limits.premiumSavedHeadlinesLimit;
63+
} else {
64+
limit = limits.premiumSavedFiltersLimit;
65+
}
6066
case AppUserRole.standardUser:
6167
accountType = 'standard';
62-
limit = (itemType == 'headline')
63-
? limits.authenticatedSavedHeadlinesLimit
64-
: limits.authenticatedFollowedItemsLimit;
68+
if (isFollowedItem) {
69+
limit = limits.authenticatedFollowedItemsLimit;
70+
} else if (itemType == 'headline') {
71+
limit = limits.authenticatedSavedHeadlinesLimit;
72+
} else {
73+
limit = limits.authenticatedSavedFiltersLimit;
74+
}
6575
case AppUserRole.guestUser:
6676
accountType = 'guest';
6777
limit = (itemType == 'headline')
@@ -113,21 +123,25 @@ class DefaultUserPreferenceLimitService implements UserPreferenceLimitService {
113123
// 2. Determine limits based on the user's app role.
114124
int followedItemsLimit;
115125
int savedHeadlinesLimit;
126+
int savedFiltersLimit;
116127
String accountType;
117128

118129
switch (user.appRole) {
119130
case AppUserRole.premiumUser:
120131
accountType = 'premium';
121132
followedItemsLimit = limits.premiumFollowedItemsLimit;
122133
savedHeadlinesLimit = limits.premiumSavedHeadlinesLimit;
134+
savedFiltersLimit = limits.premiumSavedFiltersLimit;
123135
case AppUserRole.standardUser:
124136
accountType = 'standard';
125137
followedItemsLimit = limits.authenticatedFollowedItemsLimit;
126138
savedHeadlinesLimit = limits.authenticatedSavedHeadlinesLimit;
139+
savedFiltersLimit = limits.authenticatedSavedFiltersLimit;
127140
case AppUserRole.guestUser:
128141
accountType = 'guest';
129142
followedItemsLimit = limits.guestFollowedItemsLimit;
130143
savedHeadlinesLimit = limits.guestSavedHeadlinesLimit;
144+
savedFiltersLimit = limits.guestSavedFiltersLimit;
131145
}
132146

133147
// 3. Check if proposed preferences exceed limits
@@ -155,6 +169,12 @@ class DefaultUserPreferenceLimitService implements UserPreferenceLimitService {
155169
'for your account type ($accountType).',
156170
);
157171
}
172+
if (updatedPreferences.savedFilters.length > savedFiltersLimit) {
173+
throw ForbiddenException(
174+
'You have reached the maximum number of saved filters allowed '
175+
'for your account type ($accountType).',
176+
);
177+
}
158178
} on HttpException {
159179
// Propagate known exceptions from repositories
160180
rethrow;

0 commit comments

Comments
 (0)