providerIdRappi top-level constant
Введение
- Описание: Контроллер
OrderCreateControllerпредоставляет конечные точки API для добавления одного или нескольких новых заказов в базу данных. - Маршруты: Обрабатываются 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
}
]
Валидация и преобразование данных
- Валидация ввода: Производится валидация полей. Например: deliveryPrice, totalPrice, qty.
- Обработка адреса: В случае, если не был указан
addressId, контроллер обратится к гео-сервису для получения id района по координатам. Если заданные координаты находятся вне зоны покрытия, то добавление заказа будет прервано и контроллер вернёт соответствующую ошибку.
Основная логика
- Добавление заказов: Заказы проверяются и добавляются в базу данных.
Если район доставки еще не внесен в базу в таблицу
district, он будет добавлен. - Расчет времени: Функция
getPlannedDateAndDurationиспользуется для расчета запланированной даты и промежутка, когда будет доставлен заказ .
Взаимодействие с микросервисами
- Hasura:
- Получение для каждого района всех департаметов.
- Создание заказа или заказов.
- Гео-сервис: ищет район по точке
GET polygons/для пары координат (широта, долгота). Если район не найден - возвращает ошибку.
Ответы сервера
- Ошибки обработки: Возможны различные ошибки, такие как.
- Ошибки валидации. Ожидаемый статус -
400 badRequest. - Ошибка входных данных. Ожидаемый статус -
500 internalServerError. - Ошибка входных данных. Ожидаемый статус -
400 badRequest. - Инные ошибки. Ожидаемый статус -
500 internalServerError.
- Ошибки валидации. Ожидаемый статус -
Implementation
const providerIdRappi = '6bd7f562-eb0a-4086-a6b8-289fbc64b53e';