rappiRescueComment top-level constant
Введение
- Описание: Контроллер
TriggerStatusControllerпредоставляет конечную точку API для изменения статуса заказа. - Маршруты: Обрабатываются POST-запросы по маршрутам
/trigger/status_change.
Формат запроса
Тело нового и старого заказа содержится в словаре new, old: 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": {
"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": "Recall",
"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
}
},
"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"
}
Валидация и преобразование данных
Основная логика
Контроллер последовательно обрабатывает статусы заказа.
- Создание отгрузки для заказа со статусом
PickedAndSent:- Получение заказа из Hasure .
- Получение склада по департаменту .
- Создание новой отгрузки в Hasura .
- Обновление заказа для новой отгрузки .
- Новый статус
PickedAndSent, а старыйReturnedStock: создание документа поступления продуктов заказа для склада.- Получение заказа из Hasure .
- Получение склада по департаменту .
- Создание документа поступления .
- Новый статус
DriverAssigned, а старый пустой и неRecall: обновляет расписание CRM и отправляет уведомление водителю о заказе.- Получение клиента .
- Обновляем расписание в CRM при условии, что у клиента есть назначенный
districtIdиplannedDateне превышает 5 дней от текущей даты .
- Отправляем уведомления водителю в приложение .
- Новый статус
DriverConfirmed, а старый не пустой иRecall: помечает флаг спасенияisSaved=true. - Новый статус
Recall: создаём Task в Umbrella.- Проверяем корректность
driverRefuseReasonId.
- Получаем комментарии заказа .
- Создаём task .
- Проверяем корректность
- Новый статус
RescheduleOnDeliveringэтот фрагмент автоматически меняет статус заказа изRescheduleOnDeliveringна:Recall, еслиplannedDate=null.
DriverConfirmed, еслиplannedDateзаполнен .
- Новый статус
ReturnOnDeliveringэтот фрагмент автоматически меняет статус заказа изReturnOnDeliveringнаRecall
Взаимодействие с микросервисами
- Hasura: Получение данных по заказу, пользователю и т.д.
- Umbrella Partner: Запрос для проверки есть ли расписание у района.
- FCM: Отправка уведомлений водителю.
Ответы сервера
- Ошибки обработки: Возможны различные ошибки, такие как.
- Некорректный статус отмены. Ожидаемый статус -
400 badRequest. - Неудачное создание shipment . Ожидаемый статус -
500 internalServerError. - Неудачное создание incoming . Ожидаемый статус -
500 internalServerError. - Неудачная отправка уведомлений водителю . Ожидаемый статус -
500 internalServerError. - Неудачное создание task в umbrella. Ожидаемый статус -
500 internalServerError. - Неудачное изменение статуса в пункте 6, 7. Ожидаемый статус -
500 internalServerError. - Инные ошибки. Ожидаемый статус -
500 internalServerError.
- Некорректный статус отмены. Ожидаемый статус -
- Успешные операции:
- Удачное создание shipment -
200 OK. - Удачное создание incoming -
200 OK. - Удачная отправка уведомлений водителю -
200 OK. - Удачное создание task в umbrella -
200 OK. - Удачное изменение статуса в пункте 6, 7 -
200 OK.
- Удачное создание shipment -
Implementation
const rappiRescueComment = 'Rappi order send to recall by system';