handler method
- @override
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',
);
}
}