Skip to content

Commit 7f1a38b

Browse files
committed
refactor(api): simplify data collection route with ResponseHelper
Updates the `/api/v1/data/index.dart` route handler to use the new `ResponseHelper.success` method for both GET and POST requests. This change removes several lines of boilerplate code related to manually creating metadata and the success response object, making the handler cleaner and more focused on its core logic.
1 parent c9f42d8 commit 7f1a38b

File tree

1 file changed

+11
-36
lines changed

1 file changed

+11
-36
lines changed

routes/api/v1/data/index.dart

Lines changed: 11 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,12 @@ import 'dart:convert';
22
import 'dart:io';
33

44
import 'package:dart_frog/dart_frog.dart';
5+
import 'package:ht_api/src/helpers/response_helper.dart';
6+
import 'package:ht_api/src/rbac/permission_service.dart';
57
import 'package:ht_api/src/registry/model_registry.dart';
68
import 'package:ht_data_repository/ht_data_repository.dart';
7-
import 'package:ht_api/src/rbac/permission_service.dart';
89
import 'package:ht_shared/ht_shared.dart';
910

10-
import '../../../_middleware.dart'; // For RequestId
11-
1211
/// Handles requests for the /api/v1/data collection endpoint.
1312
/// Dispatches requests to specific handlers based on the HTTP method.
1413
Future<Response> onRequest(RequestContext context) async {
@@ -31,7 +30,6 @@ Future<Response> _handleGet(RequestContext context) async {
3130
final modelName = context.read<String>();
3231
final modelConfig = context.read<ModelConfig<dynamic>>();
3332
final authenticatedUser = context.read<User>();
34-
final requestId = context.read<RequestId>().id;
3533

3634
// --- Parse Query Parameters ---
3735
final params = context.request.uri.queryParameters;
@@ -64,7 +62,7 @@ Future<Response> _handleGet(RequestContext context) async {
6462
})
6563
.toList();
6664
} catch (e) {
67-
throw BadRequestException(
65+
throw const BadRequestException(
6866
'Invalid "sort" parameter format. Use "field:order,field2:order".',
6967
);
7068
}
@@ -134,24 +132,12 @@ Future<Response> _handleGet(RequestContext context) async {
134132
);
135133
}
136134

137-
// --- Format and Return Response ---
138-
final metadata = ResponseMetadata(
139-
requestId: requestId,
140-
timestamp: DateTime.now().toUtc(),
141-
);
142-
143-
final successResponse = SuccessApiResponse<dynamic>(
135+
return ResponseHelper.success(
136+
context: context,
144137
data: responseData,
145-
metadata: metadata,
146-
);
147-
148-
final responseJson = successResponse.toJson(
149-
(paginated) => (paginated as PaginatedResponse<dynamic>).toJson(
150-
(item) => (item as dynamic).toJson(),
151-
),
138+
toJsonT: (paginated) => (paginated as PaginatedResponse<dynamic>)
139+
.toJson((item) => (item as dynamic).toJson()),
152140
);
153-
154-
return Response.json(body: responseJson);
155141
}
156142

157143
/// Handles POST requests: Creates a new item in a collection.
@@ -160,7 +146,6 @@ Future<Response> _handlePost(RequestContext context) async {
160146
final modelName = context.read<String>();
161147
final modelConfig = context.read<ModelConfig<dynamic>>();
162148
final authenticatedUser = context.read<User>();
163-
final requestId = context.read<RequestId>().id;
164149

165150
// --- Parse Body ---
166151
final requestBody = await context.request.json() as Map<String, dynamic>?;
@@ -221,20 +206,10 @@ Future<Response> _handlePost(RequestContext context) async {
221206
);
222207
}
223208

224-
// --- Format and Return Response ---
225-
final metadata = ResponseMetadata(
226-
requestId: requestId,
227-
timestamp: DateTime.now().toUtc(),
228-
);
229-
230-
final successResponse = SuccessApiResponse<dynamic>(
209+
return ResponseHelper.success(
210+
context: context,
231211
data: createdItem,
232-
metadata: metadata,
212+
toJsonT: (item) => (item as dynamic).toJson(),
213+
statusCode: HttpStatus.created,
233214
);
234-
235-
final responseJson = successResponse.toJson(
236-
(item) => (item as dynamic).toJson(),
237-
);
238-
239-
return Response.json(statusCode: HttpStatus.created, body: responseJson);
240215
}

0 commit comments

Comments
 (0)