@@ -6,6 +6,7 @@ import 'package:data_repository/data_repository.dart';
66import 'package:flutter_news_app_api_server_full_source_code/src/helpers/response_helper.dart' ;
77import 'package:flutter_news_app_api_server_full_source_code/src/middlewares/ownership_check_middleware.dart' ;
88import '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' ;
910import 'package:flutter_news_app_api_server_full_source_code/src/registry/model_registry.dart' ;
1011import 'package:flutter_news_app_api_server_full_source_code/src/services/user_preference_limit_service.dart' ;
1112import 'package:logging/logging.dart' ;
@@ -185,70 +186,16 @@ Future<dynamic> _updateItem(
185186 'Executing _updateItem for model "$modelName ", id "$id ", userId: $userId .' ,
186187 );
187188 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+ );
251197 }
198+ return await updater (context, id, itemToUpdate, userId);
252199 } catch (e, s) {
253200 _logger.severe (
254201 'Unhandled exception in _updateItem for model "$modelName ", id "$id ".' ,
@@ -272,58 +219,16 @@ Future<void> _deleteItem(
272219 'Executing _deleteItem for model "$modelName ", id "$id ", userId: $userId .' ,
273220 );
274221 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+ );
326230 }
231+ return await deleter (context, id, userId);
327232 } catch (e, s) {
328233 _logger.severe (
329234 'Unhandled exception in _deleteItem for model "$modelName ", id "$id ".' ,
0 commit comments