handler method
- @Route('/order/defer')
- @OpenApiRoute(requestBody: OrderDeferDto)
Future<JsonResponse<void>>
handler( - Request request
)
Implementation
@Route.post('/order/defer')
@OpenApiRoute(requestBody: OrderDeferDto)
Future<JsonResponse<void>> handler(Request request) async {
final bodyStr = await request.readAsString();
final eventData = jsonDecode(bodyStr);
print('Endpoint: /order/defer. Request body: ${(eventData)}');
if (eventData.isEmpty) {
return _badRequest('order is required!');
}
if (eventData['orderId'] == null) {
return _badRequest('orderId must be specified!');
}
final orderJson = OrderDeferDto.fromJson(eventData);
try {
final order = await orderRepository.getOrder(orderJson.orderId);
final newDriverRefuseReasonId = orderJson.driverRefuseReasonId;
final validationResponse = _validateEventData(
orderJson,
newDriverRefuseReasonId,
);
if (validationResponse != null) return validationResponse;
final newStatusName = _getNewOrderStatus(
newDriverRefuseReasonId,
orderJson.isRecalled,
order.rescheduleCount,
);
final orderUpdateData = _serializeOrderDeferData(
orderJson,
newStatusName,
newDriverRefuseReasonId,
orderJson.orderId,
);
await orderRepository.updateOrderWithGeoEvent(
orderId: orderJson.orderId,
order: orderUpdateData,
latitude: orderJson.lat,
longitude: orderJson.lng,
);
return JsonResponse.ok(body: {'updated': true});
} catch (e, stackTrace) {
print('Error: $e');
print('StackTrace: $stackTrace');
return JsonResponse.internalServerError(
body: jsonEncode({
'error': e.toString(),
}),
);
}
}