handler method
- @Route('/order/<shortCode>/cancel')
- @OpenApiRoute(requestBody: OrderCancelDto)
Future<JsonResponse<void>>
handler( - Request request,
- String shortCode
)
Implementation
@Route.post('/order/<shortCode>/cancel')
@OpenApiRoute(requestBody: OrderCancelDto)
Future<JsonResponse<void>> handler(Request request, String shortCode) async {
final bodyStr = await request.readAsString();
final eventData = jsonDecode(bodyStr);
print('Endpoint: /order/$shortCode/cancel. Request body: $eventData');
final validationResponse = _validateJsonFormat(eventData);
if (validationResponse != null) return validationResponse;
try {
final order = await orderRepository.getOrderByShortCode(shortCode);
final orderId = order.id!;
final refuseReason = OrderRefuseReason.getReason(eventData['reason']);
final validateJsonInputResponse = _validateJsonInput(
eventData,
refuseReason!,
shortCode,
);
if (validateJsonInputResponse != null) return validateJsonInputResponse;
await orderRepository.updateOrder(
Order(
id: orderId,
statusName: OrderStatusName.refuse.value,
reasonRefusal: refuseReason.reason,
driverRefuseReasonId: refuseReason.id,
),
);
final cancellationComment = _serializeCommentData(
eventData,
orderId,
refuseReason,
);
if (cancellationComment != null) {
await orderRepository.insertOrderComment(cancellationComment);
}
return JsonResponse.ok(
body: 'OrderCancellationController: Order ${order.shortCode} '
'cancellation process has been done successfully.',
);
} catch (e, stackTrace) {
print('Error: $e');
print('StackTrace: $stackTrace');
if (e is Exception && e.toString().contains('not found')) {
return JsonResponse.notFound(
body: jsonEncode({
'error': 'OrderCancellationController: ${e.toString()}',
}),
);
}
return JsonResponse.internalServerError(
body: jsonEncode({
'error': 'OrderCancellationController: ${e.toString()}',
}),
);
}
}