handler method
- @Route('/order/add')
- @OpenApiRoute(requestBody: OrderCreateDto)
Future<JsonResponse<void>>
handler( - Request request
)
Implementation
@Route.post('/order/add')
@OpenApiRoute(requestBody: OrderCreateDto)
Future<JsonResponse<void>> handler(Request request) async {
final bodyStr = await request.readAsString();
final ordersUmbrella = jsonDecode(bodyStr) as List;
print('Endpoint: /order/add. Request body: ${(ordersUmbrella)}');
final ordersList = ordersUmbrella
.map((json) => OrderCreateDto.fromJson(json as Map<String, dynamic>))
.toList();
final orders = <Order>[];
final districts = <District>[];
final addedDistricts = <String>{};
try {
var districtsIdsList = <String>[];
for (var order in ordersList) {
final validateOrderResponse = _validateOrder(order);
if (validateOrderResponse != null) return validateOrderResponse;
final districtId = await _findClientDistrict(order.client);
final isDeliveryProviderEnabled = order.deliveryProviderId != null &&
order.deliveryProviderId == providerIdRappi;
//* Получаем департамент парой (Department, storekeperId?)
final departmentPair = await _getOrderDepartament(
order,
districtId,
districtsIdsList,
isDeliveryProviderEnabled,
);
final plannedDateWithDuration =
DateWithDuration.getPlannedDateAndDuration(
preferredDate: order.preferredDate,
preferredDeliveryTime: order.preferredDeliveryTime,
);
final newOrder = _serializeOrderAddData(
order,
plannedDateWithDuration,
departmentPair,
districtId,
isDeliveryProviderEnabled,
);
orders.add(newOrder);
if (!addedDistricts.contains(districtId)) {
districts.add(District(id: districtId));
}
addedDistricts.add(districtId);
}
final failureOrResult = await repository.addOrders(orders, districts);
return failureOrResult.fold(
(l) => JsonResponse.internalServerError(body: {'error': l.toString()}),
(r) => JsonResponse.ok(body: {'Created orders': r.toString()}),
);
} on FormatException catch (e) {
print('OrderCreateController: A format exception occurred: ${e.message}');
return JsonResponse.badRequest(
body: 'OrderCreateController: Bad input data: ${e.message}',
);
} catch (e) {
print({'request': ordersUmbrella});
print({
'deserializedRequest':
orders.map((e) => e.toGQLJson(includeIfNull: false)).toList()
});
print('OrderCreateController: $e');
return JsonResponse.internalServerError(
body: 'OrderCreateController: $e',
);
}
}