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}/resolve-fulfillment-issues`
|
||||
- `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": {
|
||||
"post": {
|
||||
"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",
|
||||
"request": {
|
||||
|
||||
@ -43,6 +43,9 @@ module.exports = {
|
||||
resolveFulfillmentIssues: "/v1/delivery/order/{orderId}/resolve-fulfillment-issues",
|
||||
replacementRecommendations: "/v1/delivery/get-replacement-recommendations"
|
||||
},
|
||||
deliveryPartner: {
|
||||
updateDeliveryPartnerCount: "/v1/delivery/order/{orderId}/update-delivery-partner-count"
|
||||
},
|
||||
webhooks: {
|
||||
events: "/v1/eats/stores/{storeId}/event_feed"
|
||||
}
|
||||
|
||||
@ -597,6 +597,18 @@ async function deliveryGetReplacementRecommendations(req, res) {
|
||||
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 = {
|
||||
genericProxy,
|
||||
upsertMenu,
|
||||
@ -636,5 +648,6 @@ module.exports = {
|
||||
deliveryAdjustOrderPrice,
|
||||
deliveryUpdateReadyTime,
|
||||
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 = {
|
||||
genericProxy,
|
||||
menuUpsert,
|
||||
@ -628,5 +640,6 @@ module.exports = {
|
||||
deliveryAdjustOrderPrice,
|
||||
deliveryUpdateReadyTime,
|
||||
deliveryResolveFulfillmentIssues,
|
||||
deliveryGetReplacementRecommendations
|
||||
deliveryGetReplacementRecommendations,
|
||||
deliveryUpdatePartnerCount
|
||||
};
|
||||
|
||||
@ -108,6 +108,7 @@ async function handleUberWebhook(req, res) {
|
||||
const resourceId =
|
||||
req.body?.resource_id ||
|
||||
req.body?.meta?.resource_id ||
|
||||
req.body?.meta?.order_id ||
|
||||
req.body?.order_id ||
|
||||
req.body?.order?.id ||
|
||||
null;
|
||||
|
||||
@ -650,4 +650,26 @@ router.post(
|
||||
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;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user