providerIdRappi top-level constant

String const providerIdRappi

Введение

  1. Описание: Контроллер OrderCreateController предоставляет конечные точки API для добавления одного или нескольких новых заказов в базу данных.
  2. Маршруты: Обрабатываются POST-запросы по маршрутам /order/add и /order/addList.

Формат запроса

Тело запроса: JSON-объект, содержащий данные заказа, описан в классе OrderCreateDto. Тело запроса: JSON-объект, содержащий данные заказа, описан в классе OrderCreateDto.

[
  {
    "orderId": "TESTa-845a-4afb-ae2c-0cc01991024d",
    "shortCode": "TEST-434-469",
    "preferredDate": "2021-08-18",
    "preferredDeliveryTime": "09:00-18:00",
    "toPayInCents": 258,
    "agent": "jhonathanmitma@umbrella-trade.com",
    "system": "umbrella",
    "orderItems": [
      {
        "productId": "11f4dc71-2e54-411c-be05-9da55e7f77dd",
        "qty": 3,
        "totalPrice": 60
      }
    ],
    "client": {
      "phone": "+00000000000",
      "fullName": "Test client",
      "addressId": "uniqHash",
      "address2": "free form of address",
      "address": {
        "country": "Peru",
        "state": "state",
        "city": "Lima",
        "district": "district",
        "addressLine": "Address"
        "comments": "comment",
        "latitude": 0.0,
        "longitude": 0.0,
      }
    },
    "deliveryProviderId": "6bd7f562-eb0a-4086-a6b8-289fbc64b53e",
    "deliveryPrice": 125,
    "pickupPoint": 2169
  }
]

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

  1. Валидация ввода: Производится валидация полей. Например: deliveryPrice, totalPrice, qty.
  2. Обработка адреса: В случае, если не был указан addressId, контроллер обратится к гео-сервису для получения id района по координатам. Если заданные координаты находятся вне зоны покрытия, то добавление заказа будет прервано и контроллер вернёт соответствующую ошибку.

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

  1. Добавление заказов: Заказы проверяются и добавляются в базу данных. Если район доставки еще не внесен в базу в таблицу district, он будет добавлен.
  2. Расчет времени: Функция getPlannedDateAndDuration используется для расчета запланированной даты и промежутка, когда будет доставлен заказ .

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

  1. Hasura:
    1. Получение для каждого района всех департаметов.
    2. Создание заказа или заказов.
  2. Гео-сервис: ищет район по точке GET polygons/ для пары координат (широта, долгота). Если район не найден - возвращает ошибку.

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

  1. Ошибки обработки: Возможны различные ошибки, такие как.
    1. Ошибки валидации. Ожидаемый статус - 400 badRequest.
    2. Ошибка входных данных. Ожидаемый статус - 500 internalServerError.
    3. Ошибка входных данных. Ожидаемый статус - 400 badRequest.
    4. Инные ошибки. Ожидаемый статус - 500 internalServerError.

Implementation

const providerIdRappi = '6bd7f562-eb0a-4086-a6b8-289fbc64b53e';