feat: add delivery partner api v1.0.0 multi-courier dispatch endpoint
This commit is contained in:
parent
53e5bd970c
commit
6febf49618
23
docs/developer-portal/06-delivery-partner-api-1-0-0-audit.md
Normal file
23
docs/developer-portal/06-delivery-partner-api-1-0-0-audit.md
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
# 06 Delivery Partner API 1.0.0 Audit
|
||||||
|
|
||||||
|
Source checked: "Delivery Partner API (1.0.0)" shared by you.
|
||||||
|
|
||||||
|
## Implemented Now
|
||||||
|
|
||||||
|
- Dispatch multiple courier endpoint:
|
||||||
|
- `POST /api/v1/uber/delivery-partner/orders/{orderId}/partner-count`
|
||||||
|
- upstream: `/v1/delivery/order/{order_id}/update-delivery-partner-count`
|
||||||
|
- Request validation:
|
||||||
|
- `delivery_partner_count` integer range `2..5`
|
||||||
|
|
||||||
|
## Webhook Compatibility
|
||||||
|
|
||||||
|
- `delivery.state_changed` already supported.
|
||||||
|
- Added webhook resource mapping support for:
|
||||||
|
- `meta.order_id`
|
||||||
|
|
||||||
|
## Pending
|
||||||
|
|
||||||
|
- Region eligibility guardrails (currently not enforced in wrapper)
|
||||||
|
- Time-window guard (up to 10 minutes after first courier starts delivery) as a preflight business rule
|
||||||
|
|
||||||
@ -39,3 +39,7 @@ Order API 1.0.0 coverage (delivery namespace):
|
|||||||
- `POST /api/v1/uber/delivery-order/orders/{orderId}/update-ready-time`
|
- `POST /api/v1/uber/delivery-order/orders/{orderId}/update-ready-time`
|
||||||
- `POST /api/v1/uber/delivery-order/orders/{orderId}/resolve-fulfillment-issues`
|
- `POST /api/v1/uber/delivery-order/orders/{orderId}/resolve-fulfillment-issues`
|
||||||
- `POST /api/v1/uber/delivery-order/replacement-recommendations`
|
- `POST /api/v1/uber/delivery-order/replacement-recommendations`
|
||||||
|
|
||||||
|
Delivery Partner API 1.0.0 coverage:
|
||||||
|
|
||||||
|
- `POST /api/v1/uber/delivery-partner/orders/{orderId}/partner-count` (Dispatch Multiple Courier)
|
||||||
|
|||||||
@ -990,6 +990,29 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"/api/v1/uber/delivery-partner/orders/{orderId}/partner-count": {
|
||||||
|
"post": {
|
||||||
|
"summary": "Delivery Partner API 1.0.0 - Dispatch multiple couriers",
|
||||||
|
"tags": [
|
||||||
|
"Uber Delivery Partner v1"
|
||||||
|
],
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"in": "path",
|
||||||
|
"name": "orderId",
|
||||||
|
"required": true,
|
||||||
|
"schema": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "Delivery partner count updated"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"/api/v1/uber/reporting/fetch": {
|
"/api/v1/uber/reporting/fetch": {
|
||||||
"post": {
|
"post": {
|
||||||
"summary": "Fetch Uber reporting CSV with retries and header-based parsing",
|
"summary": "Fetch Uber reporting CSV with retries and header-based parsing",
|
||||||
|
|||||||
@ -859,6 +859,41 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "Delivery Partner API - Update Partner Count",
|
||||||
|
"request": {
|
||||||
|
"method": "POST",
|
||||||
|
"header": [
|
||||||
|
{
|
||||||
|
"key": "x-api-key",
|
||||||
|
"value": "{{apiKey}}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "Content-Type",
|
||||||
|
"value": "application/json"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"body": {
|
||||||
|
"mode": "raw",
|
||||||
|
"raw": "{\n \"delivery_partner_count\": 2\n}"
|
||||||
|
},
|
||||||
|
"url": {
|
||||||
|
"raw": "{{baseUrl}}/api/v1/uber/delivery-partner/orders/{{orderId}}/partner-count",
|
||||||
|
"host": [
|
||||||
|
"{{baseUrl}}"
|
||||||
|
],
|
||||||
|
"path": [
|
||||||
|
"api",
|
||||||
|
"v1",
|
||||||
|
"uber",
|
||||||
|
"delivery-partner",
|
||||||
|
"orders",
|
||||||
|
"{{orderId}}",
|
||||||
|
"partner-count"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "Get Store By ID",
|
"name": "Get Store By ID",
|
||||||
"request": {
|
"request": {
|
||||||
|
|||||||
@ -43,6 +43,9 @@ module.exports = {
|
|||||||
resolveFulfillmentIssues: "/v1/delivery/order/{orderId}/resolve-fulfillment-issues",
|
resolveFulfillmentIssues: "/v1/delivery/order/{orderId}/resolve-fulfillment-issues",
|
||||||
replacementRecommendations: "/v1/delivery/get-replacement-recommendations"
|
replacementRecommendations: "/v1/delivery/get-replacement-recommendations"
|
||||||
},
|
},
|
||||||
|
deliveryPartner: {
|
||||||
|
updateDeliveryPartnerCount: "/v1/delivery/order/{orderId}/update-delivery-partner-count"
|
||||||
|
},
|
||||||
webhooks: {
|
webhooks: {
|
||||||
events: "/v1/eats/stores/{storeId}/event_feed"
|
events: "/v1/eats/stores/{storeId}/event_feed"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -597,6 +597,18 @@ async function deliveryGetReplacementRecommendations(req, res) {
|
|||||||
return res.json({ success: true, data });
|
return res.json({ success: true, data });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function deliveryUpdatePartnerCount(req, res) {
|
||||||
|
const schema = z.object({
|
||||||
|
delivery_partner_count: z.coerce.number().int().min(2).max(5)
|
||||||
|
});
|
||||||
|
const payload = schema.parse(req.body || {});
|
||||||
|
const data = await proxyService.deliveryUpdatePartnerCount({
|
||||||
|
orderId: req.params.orderId,
|
||||||
|
payload
|
||||||
|
});
|
||||||
|
return res.json({ success: true, data });
|
||||||
|
}
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
genericProxy,
|
genericProxy,
|
||||||
upsertMenu,
|
upsertMenu,
|
||||||
@ -636,5 +648,6 @@ module.exports = {
|
|||||||
deliveryAdjustOrderPrice,
|
deliveryAdjustOrderPrice,
|
||||||
deliveryUpdateReadyTime,
|
deliveryUpdateReadyTime,
|
||||||
deliveryResolveFulfillmentIssues,
|
deliveryResolveFulfillmentIssues,
|
||||||
deliveryGetReplacementRecommendations
|
deliveryGetReplacementRecommendations,
|
||||||
|
deliveryUpdatePartnerCount
|
||||||
};
|
};
|
||||||
|
|||||||
@ -589,6 +589,18 @@ async function deliveryGetReplacementRecommendations({ payload }) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function deliveryUpdatePartnerCount({ orderId, payload }) {
|
||||||
|
const uberPath = interpolatePath(uberEndpoints.deliveryPartner.updateDeliveryPartnerCount, { orderId });
|
||||||
|
return callUberApi({
|
||||||
|
method: "POST",
|
||||||
|
uberPath,
|
||||||
|
body: payload,
|
||||||
|
wrapperRoute: "/api/v1/uber/delivery-partner/orders/:orderId/partner-count",
|
||||||
|
authMode: "app",
|
||||||
|
scopes: AUTH_SCOPES.ORDER
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
genericProxy,
|
genericProxy,
|
||||||
menuUpsert,
|
menuUpsert,
|
||||||
@ -628,5 +640,6 @@ module.exports = {
|
|||||||
deliveryAdjustOrderPrice,
|
deliveryAdjustOrderPrice,
|
||||||
deliveryUpdateReadyTime,
|
deliveryUpdateReadyTime,
|
||||||
deliveryResolveFulfillmentIssues,
|
deliveryResolveFulfillmentIssues,
|
||||||
deliveryGetReplacementRecommendations
|
deliveryGetReplacementRecommendations,
|
||||||
|
deliveryUpdatePartnerCount
|
||||||
};
|
};
|
||||||
|
|||||||
@ -108,6 +108,7 @@ async function handleUberWebhook(req, res) {
|
|||||||
const resourceId =
|
const resourceId =
|
||||||
req.body?.resource_id ||
|
req.body?.resource_id ||
|
||||||
req.body?.meta?.resource_id ||
|
req.body?.meta?.resource_id ||
|
||||||
|
req.body?.meta?.order_id ||
|
||||||
req.body?.order_id ||
|
req.body?.order_id ||
|
||||||
req.body?.order?.id ||
|
req.body?.order?.id ||
|
||||||
null;
|
null;
|
||||||
|
|||||||
@ -650,4 +650,26 @@ router.post(
|
|||||||
asyncHandler(controller.deliveryGetReplacementRecommendations)
|
asyncHandler(controller.deliveryGetReplacementRecommendations)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @openapi
|
||||||
|
* /api/v1/uber/delivery-partner/orders/{orderId}/partner-count:
|
||||||
|
* post:
|
||||||
|
* summary: Delivery Partner API 1.0.0 - Dispatch multiple couriers
|
||||||
|
* tags:
|
||||||
|
* - Uber Delivery Partner v1
|
||||||
|
* parameters:
|
||||||
|
* - in: path
|
||||||
|
* name: orderId
|
||||||
|
* required: true
|
||||||
|
* schema:
|
||||||
|
* type: string
|
||||||
|
* responses:
|
||||||
|
* 200:
|
||||||
|
* description: Delivery partner count updated
|
||||||
|
*/
|
||||||
|
router.post(
|
||||||
|
"/uber/delivery-partner/orders/:orderId/partner-count",
|
||||||
|
asyncHandler(controller.deliveryUpdatePartnerCount)
|
||||||
|
);
|
||||||
|
|
||||||
module.exports = router;
|
module.exports = router;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user