TriggerOrderCreateController class
Введение
- Описание: Контроллер
TriggerOrderCreateControllerпредоставляет конечную точку API для привязки заказа и отправке уведомлений водителю. - Маршруты: Обрабатываются POST-запросы по маршрутам
/trigger/order_create.
Формат запроса
Тело заказа содержится в словаре new: JSON-объект, содержащий данные заказа, описан в классе TriggerOrderCreateDto.
{
"headers": [
{
"name": "Content-Type",
"value": "application/json"
},
{
"name": "User-Agent",
"value": "hasura-graphql-engine/v2.36.0"
}
],
"payload": {
"created_at": "2025-02-20T14:57:10.516881",
"delivery_info": {
"current_retry": 0,
"max_retries": 0
},
"event": {
"data": {
"new": {
"clientID": 985656,
"comment": "comment",
"createdAt": "2025-02-19T09:51:18.679796+00:00",
"deliveredDate": null,
"deliveryPrice": 0,
"departmentId": 4,
"discountId": null,
"discounts": [],
"districtId": "CL_5",
"driverID": "6964cc22-c639-4bfd-88fd-6d408d88f9c1",
"driverRefuseReasonId": null,
"externalKey": null,
"externalKey_vendorDatalinkId": null,
"externalStatus": null,
"id": 982277,
"important": null,
"isRescheduled": false,
"isReturned": false,
"isSaved": false,
"operatorRefuseReasonId": null,
"paymentExpirationDate": null,
"paymentType": null,
"paymentUrl": null,
"plannedDate": "2025-02-19T09:51:18.679796+00:00",
"plannedDateDuration": 90,
"positionsToBeSent": false,
"reasonRefusal": null,
"resale": false,
"rescheduleCount": 0,
"shipmentId": null,
"shortCode": "TEST-PUSH-NOT",
"statusName": "DriverAssigned",
"statusUpdatedAt": "2025-02-19T10:01:21.744935+00:00",
"system": "amabuyer",
"telegramUserEmail": null,
"test": false,
"totalCents": 300,
"umbrellaID": null,
"updatedAt": "2025-02-19T12:55:19.765799+00:00",
"vendorDatalinkId": 5,
"warehouseID": null
},
"old": null
},
"op": "MANUAL",
"session_variables": {
"x-hasura-role": "admin"
},
"trace_context": {
"sampling_state": "1",
"span_id": "7a50df8f6ef5dde5",
"trace_id": "8a33d6b0c66033c93f642a7fbcc1d1e5"
}
},
"id": "33d0b4e1-b7a9-4611-a5cb-fe15d3663124",
"table": {
"name": "order",
"schema": "public"
},
"trigger": {
"name": "order_created"
}
},
"version": "2"
}
Валидация и преобразование данных
Основная логика
- Нахождение и назначение доступного водителя заказу: Если водитель не назначен, система подбирает водителя с наименьшей загрузкой по системе очков (где измеряется покрываемость временного окна и заказа, кол-во уже имеющихся заказов по сравнению с максимальным кол-вом).
- Push-уведомления:
- Отправка уведомления водителю о срочном заказе.
Взаимодействие с микросервисами
- Hasura:
- Получение клиента.
- Проставление статуса заказу DriverAssigned и назначение водителя.
- Postgres (напрямую):
- Получение списка водителей.
- Получение списка окон водителя (driver_window, со вложенными weekday_window, внутри которых еще 1 элемент driver_district_load).
Ответы сервера
- Ошибки обработки: Возможны различные ошибки, такие как.
- Ошибка получения клиента. Ожидаемый статус -
500 internalServerError. - Ошибка получения водителей водителей. Ожидаемый статус -
500 internalServerError. - Нет доступного водителя. Ожидаемый статус -
500 internalServerError. - Ошибка обновления статуса заказа. Ожидаемый статус -
500 internalServerError.
- Ошибка получения клиента. Ожидаемый статус -
- Успешные операции:
- Если водитель уже назначен -
200 OK. - Если водитель назначен успешно -
200 OK.
- Если водитель уже назначен -
- Inheritance
-
- Object
- Controller
- TriggerOrderCreateController
Constructors
Properties
- endpoint ↔ String
-
getter/setter pairinherited
- hashCode → int
-
The hash code for this object.
no setterinherited
- orderRepository → OrderRepository
-
final
- postgresRepository → PostgresRepository
-
final
- request ↔ Request
-
getter/setter pairinherited
- runtimeType → Type
-
A representation of the runtime type of the object.
no setterinherited
- whatsAppRepository → SendpulseWhatsAppDataRepository
-
final
Methods
-
call(
Request request) → FutureOr< Response> -
inherited
-
handler(
) → Future< Response> -
Must be implemented
override
-
noSuchMethod(
Invocation invocation) → dynamic -
Invoked when a nonexistent method or property is accessed.
inherited
-
requestAsJson(
) → Future -
Reads request value and parse as json
inherited
-
toString(
) → String -
A string representation of this object.
inherited
Operators
-
operator ==(
Object other) → bool -
The equality operator.
inherited