Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 66ebf13

Browse files
authored
Merge pull request #33 from flutter-news-app-full-source-code/finish-language-model-data-route-integration
feat(api): make country and language models read-only
2 parents affa16d + 7ba4611 commit 66ebf13

File tree

2 files changed

+44
-4
lines changed

2 files changed

+44
-4
lines changed

‎lib/src/registry/model_registry.dart‎

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,9 @@ final modelRegistry = <String, ModelConfig<dynamic>>{
188188
'country': ModelConfig<Country>(
189189
fromJson: Country.fromJson,
190190
getId: (c) => c.id,
191-
// Countries: Admin-owned, read allowed by standard/guest users
191+
// Countries: Static data, read-only for all authenticated users.
192+
// Modification is not allowed via the API as this is real-world data
193+
// managed by database seeding.
192194
getCollectionPermission: const ModelActionPermission(
193195
type: RequiredPermissionType.specificPermission,
194196
permission: Permissions.countryRead,
@@ -197,14 +199,32 @@ final modelRegistry = <String, ModelConfig<dynamic>>{
197199
type: RequiredPermissionType.specificPermission,
198200
permission: Permissions.countryRead,
199201
),
202+
postPermission: const ModelActionPermission(type: RequiredPermissionType.unsupported),
203+
putPermission: const ModelActionPermission(type: RequiredPermissionType.unsupported),
204+
deletePermission: const ModelActionPermission(type: RequiredPermissionType.unsupported),
205+
),
206+
'language': ModelConfig<Language>(
207+
fromJson: Language.fromJson,
208+
getId: (l) => l.id,
209+
// Languages: Static data, read-only for all authenticated users.
210+
// Modification is not allowed via the API as this is real-world data
211+
// managed by database seeding.
212+
getCollectionPermission: const ModelActionPermission(
213+
type: RequiredPermissionType.specificPermission,
214+
permission: Permissions.languageRead,
215+
),
216+
getItemPermission: const ModelActionPermission(
217+
type: RequiredPermissionType.specificPermission,
218+
permission: Permissions.languageRead,
219+
),
200220
postPermission: const ModelActionPermission(
201-
type: RequiredPermissionType.adminOnly,
221+
type: RequiredPermissionType.unsupported,
202222
),
203223
putPermission: const ModelActionPermission(
204-
type: RequiredPermissionType.adminOnly,
224+
type: RequiredPermissionType.unsupported,
205225
),
206226
deletePermission: const ModelActionPermission(
207-
type: RequiredPermissionType.adminOnly,
227+
type: RequiredPermissionType.unsupported,
208228
),
209229
),
210230
'user': ModelConfig<User>(

‎routes/api/v1/data/[id]/index.dart‎

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,9 @@ Future<Response> _handleGet(
107107
case 'country':
108108
final repo = context.read<DataRepository<Country>>();
109109
item = await repo.read(id: id, userId: userIdForRepoCall);
110+
case 'language':
111+
final repo = context.read<DataRepository<Language>>();
112+
item = await repo.read(id: id, userId: userIdForRepoCall);
110113
case 'user': // Handle User model specifically if needed, or rely on generic
111114
final repo = context.read<DataRepository<User>>();
112115
item = await repo.read(id: id, userId: userIdForRepoCall);
@@ -309,6 +312,15 @@ Future<Response> _handlePut(
309312
userId: userIdForRepoCall,
310313
);
311314
}
315+
case 'language':
316+
{
317+
final repo = context.read<DataRepository<Language>>();
318+
updatedItem = await repo.update(
319+
id: id,
320+
item: itemToUpdate as Language,
321+
userId: userIdForRepoCall,
322+
);
323+
}
312324
case 'user':
313325
{
314326
final repo = context.read<DataRepository<User>>();
@@ -454,6 +466,9 @@ Future<Response> _handleDelete(
454466
case 'country':
455467
final repo = context.read<DataRepository<Country>>();
456468
itemToDelete = await repo.read(id: id, userId: userIdForRepoCall);
469+
case 'language':
470+
final repo = context.read<DataRepository<Language>>();
471+
itemToDelete = await repo.read(id: id, userId: userIdForRepoCall);
457472
case 'user':
458473
final repo = context.read<DataRepository<User>>();
459474
itemToDelete = await repo.read(id: id, userId: userIdForRepoCall);
@@ -517,6 +532,11 @@ Future<Response> _handleDelete(
517532
id: id,
518533
userId: userIdForRepoCall,
519534
);
535+
case 'language':
536+
await context.read<DataRepository<Language>>().delete(
537+
id: id,
538+
userId: userIdForRepoCall,
539+
);
520540
case 'user':
521541
await context.read<DataRepository<User>>().delete(
522542
id: id,

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /