TriggerOrderCreateController class

Введение

  1. Описание: Контроллер TriggerOrderCreateController предоставляет конечную точку API для привязки заказа и отправке уведомлений водителю.
  2. Маршруты: Обрабатываются 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"
}

Валидация и преобразование данных

Основная логика

  1. Нахождение и назначение доступного водителя заказу: Если водитель не назначен, система подбирает водителя с наименьшей загрузкой по системе очков (где измеряется покрываемость временного окна и заказа, кол-во уже имеющихся заказов по сравнению с максимальным кол-вом).
  2. Push-уведомления:
    1. Отправка уведомления водителю о срочном заказе.

Взаимодействие с микросервисами

  1. Hasura:
    1. Получение клиента.
    2. Проставление статуса заказу DriverAssigned и назначение водителя.
  2. Postgres (напрямую):
    1. Получение списка водителей.
    2. Получение списка окон водителя (driver_window, со вложенными weekday_window, внутри которых еще 1 элемент driver_district_load).

Ответы сервера

  1. Ошибки обработки: Возможны различные ошибки, такие как.
    1. Ошибка получения клиента. Ожидаемый статус - 500 internalServerError.
    2. Ошибка получения водителей водителей. Ожидаемый статус - 500 internalServerError.
    3. Нет доступного водителя. Ожидаемый статус - 500 internalServerError.
    4. Ошибка обновления статуса заказа. Ожидаемый статус - 500 internalServerError.
  2. Успешные операции:
    1. Если водитель уже назначен - 200 OK.
    2. Если водитель назначен успешно - 200 OK.
Inheritance

Constructors

TriggerOrderCreateController()

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