handler method

  1. @override
Future<Response> handler()
override

Must be implemented

Implementation

@override
Future<Response> handler() async {
  final bodyStr = await request.readAsString();
  final eventDataOrder = jsonDecode(bodyStr)['event']['data']['new'];
  final order = TriggerOrderCreateDto.fromJson(eventDataOrder);
  print(order.toJson());

  final orderId = order.id;
  final plannedDate = order.plannedDate;
  final createdAt = order.createdAt;
  final driverID = order.driverId;

  try {
    if (driverID != null) {
      return Response.ok(
        'TriggerOrderCreateController: the order has already been assigned to the driver',
      );
    }

    final client = await orderRepository.getClient(order.clientId);

    final drivers = await postgresRepository.getDriversByDistrictId(
      districtId: client.districtId!,
      plannedDateStart: DateTime(
        order.plannedDate.year,
        order.plannedDate.month,
        order.plannedDate.day,
        order.plannedDate.hour,
        order.plannedDate.minute,
      ),
    );

    if (drivers.isEmpty) {
      return Response.badRequest(
        body: 'TriggerOrderCreateController: No drivers found.',
      );
    }

    final availableDriverId = await postgresRepository.getAvailableDriver(
      plannedDateStart: order.plannedDate,
      weekday: order.plannedDate.weekday,
      drivers: drivers,
    );

    if (availableDriverId == null) {
      return Response.badRequest(
        body: 'TriggerOrderCreateController: No suitable driver found.',
      );
    }

    await orderRepository.assignDriverToOrder(
      orderId,
      availableDriverId,
    );

    //* Шлем уведомление водителю
    await urgentOrderNotification(
      orderId,
      plannedDate,
      createdAt,
      availableDriverId,
    );

    return Response.ok(
      'TriggerOrderCreateController: driver assigned $availableDriverId.',
    );
  } catch (e) {
    return Response.internalServerError(
      body: 'TriggerOrderCreateContoller error: $e',
    );
  }
}