@@ -6,6 +6,7 @@ import 'package:data_repository/data_repository.dart';
6
6
import 'package:flutter_news_app_api_server_full_source_code/src/helpers/response_helper.dart' ;
7
7
import 'package:flutter_news_app_api_server_full_source_code/src/middlewares/ownership_check_middleware.dart' ;
8
8
import 'package:flutter_news_app_api_server_full_source_code/src/rbac/permission_service.dart' ;
9
+ import 'package:flutter_news_app_api_server_full_source_code/src/registry/data_operation_registry.dart' ;
9
10
import 'package:flutter_news_app_api_server_full_source_code/src/registry/model_registry.dart' ;
10
11
import 'package:flutter_news_app_api_server_full_source_code/src/services/user_preference_limit_service.dart' ;
11
12
import 'package:logging/logging.dart' ;
@@ -185,70 +186,16 @@ Future<dynamic> _updateItem(
185
186
'Executing _updateItem for model "$modelName ", id "$id ", userId: $userId .' ,
186
187
);
187
188
try {
188
- switch (modelName) {
189
- case 'headline' :
190
- return await context.read <DataRepository <Headline >>().update (
191
- id: id,
192
- item: itemToUpdate as Headline ,
193
- userId: userId,
194
- );
195
- case 'topic' :
196
- return await context.read <DataRepository <Topic >>().update (
197
- id: id,
198
- item: itemToUpdate as Topic ,
199
- userId: userId,
200
- );
201
- case 'source' :
202
- return await context.read <DataRepository <Source >>().update (
203
- id: id,
204
- item: itemToUpdate as Source ,
205
- userId: userId,
206
- );
207
- case 'country' :
208
- return await context.read <DataRepository <Country >>().update (
209
- id: id,
210
- item: itemToUpdate as Country ,
211
- userId: userId,
212
- );
213
- case 'language' :
214
- return await context.read <DataRepository <Language >>().update (
215
- id: id,
216
- item: itemToUpdate as Language ,
217
- userId: userId,
218
- );
219
- case 'user' :
220
- final repo = context.read <DataRepository <User >>();
221
- final existingUser = context.read <FetchedItem <dynamic >>().data as User ;
222
- final updatedUser = existingUser.copyWith (
223
- feedActionStatus: (itemToUpdate as User ).feedActionStatus,
224
- );
225
- return await repo.update (id: id, item: updatedUser, userId: userId);
226
- case 'user_app_settings' :
227
- return await context.read <DataRepository <UserAppSettings >>().update (
228
- id: id,
229
- item: itemToUpdate as UserAppSettings ,
230
- userId: userId,
231
- );
232
- case 'user_content_preferences' :
233
- return await context
234
- .read <DataRepository <UserContentPreferences >>()
235
- .update (
236
- id: id,
237
- item: itemToUpdate as UserContentPreferences ,
238
- userId: userId,
239
- );
240
- case 'remote_config' :
241
- return await context.read <DataRepository <RemoteConfig >>().update (
242
- id: id,
243
- item: itemToUpdate as RemoteConfig ,
244
- userId: userId,
245
- );
246
- default :
247
- _logger.warning ('Unsupported model type "$modelName " for update operation.' );
248
- throw OperationFailedException (
249
- 'Unsupported model type "$modelName " for update operation.' ,
250
- );
189
+ final registry = context.read <DataOperationRegistry >();
190
+ final updater = registry.itemUpdaters[modelName];
191
+
192
+ if (updater == null ) {
193
+ _logger.warning ('Unsupported model type "$modelName " for update operation.' );
194
+ throw OperationFailedException (
195
+ 'Unsupported model type "$modelName " for update operation.' ,
196
+ );
251
197
}
198
+ return await updater (context, id, itemToUpdate, userId);
252
199
} catch (e, s) {
253
200
_logger.severe (
254
201
'Unhandled exception in _updateItem for model "$modelName ", id "$id ".' ,
@@ -272,58 +219,16 @@ Future<void> _deleteItem(
272
219
'Executing _deleteItem for model "$modelName ", id "$id ", userId: $userId .' ,
273
220
);
274
221
try {
275
- switch (modelName) {
276
- case 'headline' :
277
- return await context.read <DataRepository <Headline >>().delete (
278
- id: id,
279
- userId: userId,
280
- );
281
- case 'topic' :
282
- return await context.read <DataRepository <Topic >>().delete (
283
- id: id,
284
- userId: userId,
285
- );
286
- case 'source' :
287
- return await context.read <DataRepository <Source >>().delete (
288
- id: id,
289
- userId: userId,
290
- );
291
- case 'country' :
292
- return await context.read <DataRepository <Country >>().delete (
293
- id: id,
294
- userId: userId,
295
- );
296
- case 'language' :
297
- return await context.read <DataRepository <Language >>().delete (
298
- id: id,
299
- userId: userId,
300
- );
301
- case 'user' :
302
- return await context.read <DataRepository <User >>().delete (
303
- id: id,
304
- userId: userId,
305
- );
306
- case 'user_app_settings' :
307
- return await context.read <DataRepository <UserAppSettings >>().delete (
308
- id: id,
309
- userId: userId,
310
- );
311
- case 'user_content_preferences' :
312
- return await context.read <DataRepository <UserContentPreferences >>().delete (
313
- id: id,
314
- userId: userId,
315
- );
316
- case 'remote_config' :
317
- return await context.read <DataRepository <RemoteConfig >>().delete (
318
- id: id,
319
- userId: userId,
320
- );
321
- default :
322
- _logger.warning ('Unsupported model type "$modelName " for delete operation.' );
323
- throw OperationFailedException (
324
- 'Unsupported model type "$modelName " for delete operation.' ,
325
- );
222
+ final registry = context.read <DataOperationRegistry >();
223
+ final deleter = registry.itemDeleters[modelName];
224
+
225
+ if (deleter == null ) {
226
+ _logger.warning ('Unsupported model type "$modelName " for delete operation.' );
227
+ throw OperationFailedException (
228
+ 'Unsupported model type "$modelName " for delete operation.' ,
229
+ );
326
230
}
231
+ return await deleter (context, id, userId);
327
232
} catch (e, s) {
328
233
_logger.severe (
329
234
'Unhandled exception in _deleteItem for model "$modelName ", id "$id ".' ,
0 commit comments