@@ -28,20 +28,34 @@ Future<Response> _handleGet(RequestContext context) async {
2828 final authenticatedUser = context.read <User >();
2929 final params = context.request.uri.queryParameters;
3030
31- final filter = params.containsKey ('filter' )
32- ? jsonDecode (params['filter' ]! ) as Map <String , dynamic >
33- : null ;
31+ Map <String , dynamic >? filter;
32+ if (params.containsKey ('filter' )) {
33+ try {
34+ filter = jsonDecode (params['filter' ]! ) as Map <String , dynamic >;
35+ } on FormatException catch (e) {
36+ throw BadRequestException (
37+ 'Invalid "filter" parameter: Not valid JSON. $e ' ,
38+ );
39+ }
40+ }
3441
35- final sort = params.containsKey ('sort' )
36- ? (params['sort' ]! .split (',' ).map ((s) {
37- final parts = s.split (':' );
38- final field = parts[0 ];
39- final order = (parts.length > 1 && parts[1 ] == 'desc' )
40- ? SortOrder .desc
41- : SortOrder .asc;
42- return SortOption (field, order);
43- }).toList ())
44- : null ;
42+ List <SortOption >? sort;
43+ if (params.containsKey ('sort' )) {
44+ try {
45+ sort = params['sort' ]! .split (',' ).map ((s) {
46+ final parts = s.split (':' );
47+ final field = parts[0 ];
48+ final order = (parts.length > 1 && parts[1 ] == 'desc' )
49+ ? SortOrder .desc
50+ : SortOrder .asc;
51+ return SortOption (field, order);
52+ }).toList ();
53+ } catch (e) {
54+ throw const BadRequestException (
55+ 'Invalid "sort" parameter format. Use "field:order,field2:order".' ,
56+ );
57+ }
58+ }
4559
4660 final pagination =
4761 (params.containsKey ('limit' ) || params.containsKey ('cursor' ))
@@ -91,7 +105,14 @@ Future<Response> _handlePost(RequestContext context) async {
91105 requestBody['createdAt' ] = now;
92106 requestBody['updatedAt' ] = now;
93107
94- final itemToCreate = modelConfig.fromJson (requestBody);
108+ dynamic itemToCreate;
109+ try {
110+ itemToCreate = modelConfig.fromJson (requestBody);
111+ } on TypeError catch (e) {
112+ throw BadRequestException (
113+ 'Invalid request body: Missing or invalid required field(s). $e ' ,
114+ );
115+ }
95116
96117 final userIdForRepoCall =
97118 (modelConfig.getOwnerId != null &&
0 commit comments