handler method

  1. @Route('/order/<shortCode>/cancel')
  2. @OpenApiRoute(requestBody: OrderCancelDto)
Future<JsonResponse<void>> handler(
  1. Request request,
  2. 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()}',
      }),
    );
  }
}