const express = require("express"); const asyncHandler = require("../middleware/asyncHandler"); const controller = require("../modules/proxy/proxy.controller"); const router = express.Router(); /** * @openapi * /api/v1/uber/request: * post: * summary: Generic Uber passthrough for any Uber endpoint * tags: * - Uber Generic * responses: * 200: * description: Uber response */ router.post("/uber/request", asyncHandler(controller.genericProxy)); /** * @openapi * /api/v1/uber/menu/upsert: * post: * summary: Legacy upsert helper for store menu * tags: * - Uber Menu * responses: * 200: * description: Menu upserted */ router.post("/uber/menu/upsert", asyncHandler(controller.upsertMenu)); /** * @openapi * /api/v1/uber/menu/replace: * put: * summary: Replace store menu (full upload) * tags: * - Uber Menu * responses: * 200: * description: Menu replaced */ router.put("/uber/menu/replace", asyncHandler(controller.replaceMenu)); /** * @openapi * /api/v1/uber/menu/items: * post: * summary: Update individual menu items (stock/price updates) * tags: * - Uber Menu * responses: * 200: * description: Menu items updated */ router.post("/uber/menu/items", asyncHandler(controller.updateMenuItems)); /** * @openapi * /api/v1/uber/menu: * get: * summary: Fetch store menu * tags: * - Uber Menu * responses: * 200: * description: Menu fetched */ router.get("/uber/menu", asyncHandler(controller.getMenu)); /** * @openapi * /api/v1/uber/orders: * get: * summary: List store orders * tags: * - Uber Orders * responses: * 200: * description: Orders fetched */ router.get("/uber/orders", asyncHandler(controller.listOrders)); /** * @openapi * /api/v1/uber/orders/{orderId}: * get: * summary: Retrieve full order details by order ID * tags: * - Uber Orders * parameters: * - in: path * name: orderId * required: true * schema: * type: string * responses: * 200: * description: Order details retrieved */ router.get("/uber/orders/:orderId", asyncHandler(controller.getOrderById)); /** * @openapi * /api/v1/uber/orders/{orderId}/fulfillment-issues: * post: * summary: Resolve retail fulfillment issues (found/partial/out-of-stock substitutions) * tags: * - Uber Orders * parameters: * - in: path * name: orderId * required: true * schema: * type: string * responses: * 200: * description: Fulfillment issue update submitted */ router.post( "/uber/orders/:orderId/fulfillment-issues", asyncHandler(controller.resolveFulfillmentIssues) ); /** * @openapi * /api/v1/uber/orders/{orderId}/ready: * post: * summary: Mark order ready for handoff/pickup * tags: * - Uber Orders * parameters: * - in: path * name: orderId * required: true * schema: * type: string * responses: * 200: * description: Order marked ready */ router.post("/uber/orders/:orderId/ready", asyncHandler(controller.markOrderReady)); /** * @openapi * /api/v1/uber/stores: * get: * summary: Retrieve all stores provisioned to developer account * tags: * - Uber Stores * responses: * 200: * description: Stores retrieved */ router.get("/uber/stores", asyncHandler(controller.listStores)); /** * @openapi * /api/v1/uber/stores/provisionable: * get: * summary: Retrieve stores associated with merchant OAuth token * tags: * - Uber Provisioning * parameters: * - in: query * name: merchantId * required: true * schema: * type: string * responses: * 200: * description: Stores retrieved */ router.get("/uber/stores/provisionable", asyncHandler(controller.listProvisionableStores)); /** * @openapi * /api/v1/uber/stores/{storeId}: * get: * summary: Retrieve store details by store ID * tags: * - Uber Stores * parameters: * - in: path * name: storeId * required: true * schema: * type: string * responses: * 200: * description: Store retrieved */ router.get("/uber/stores/:storeId", asyncHandler(controller.getStoreById)); /** * @openapi * /api/v1/uber/stores/{storeId}/status: * get: * summary: Retrieve store online/offline status * tags: * - Uber Stores * parameters: * - in: path * name: storeId * required: true * schema: * type: string * responses: * 200: * description: Store status retrieved * post: * summary: Set store online/offline status * tags: * - Uber Stores * parameters: * - in: path * name: storeId * required: true * schema: * type: string * responses: * 200: * description: Store status updated */ router.get("/uber/stores/:storeId/status", asyncHandler(controller.getStoreStatus)); router.post("/uber/stores/:storeId/status", asyncHandler(controller.setStoreStatus)); /** * @openapi * /api/v1/uber/stores/{storeId}/holiday-hours: * get: * summary: Retrieve store holiday hours * tags: * - Uber Stores * parameters: * - in: path * name: storeId * required: true * schema: * type: string * responses: * 200: * description: Holiday hours retrieved * post: * summary: Set store holiday hours * tags: * - Uber Stores * parameters: * - in: path * name: storeId * required: true * schema: * type: string * responses: * 200: * description: Holiday hours updated */ router.get("/uber/stores/:storeId/holiday-hours", asyncHandler(controller.getHolidayHours)); router.post("/uber/stores/:storeId/holiday-hours", asyncHandler(controller.setHolidayHours)); /** * @openapi * /api/v1/uber/orders/{orderId}/action: * post: * summary: Trigger order action (accept, deny, ready, cancel, resolve) * tags: * - Uber Orders * parameters: * - in: path * name: orderId * required: true * schema: * type: string * responses: * 200: * description: Order action sent */ router.post("/uber/orders/:orderId/action", asyncHandler(controller.orderAction)); /** * @openapi * /api/v1/uber/stores/hours: * put: * summary: Update store hours * tags: * - Uber Stores * responses: * 200: * description: Store hours updated */ router.put("/uber/stores/hours", asyncHandler(controller.updateHours)); /** * @openapi * /api/v1/uber/stores/{storeId}/pos-data: * post: * summary: Activate integration for selected store (POST /pos_data) * tags: * - Uber Provisioning * parameters: * - in: path * name: storeId * required: true * schema: * type: string * responses: * 200: * description: Store provisioned * get: * summary: Retrieve integration configuration for selected store (GET /pos_data) * tags: * - Uber Provisioning * parameters: * - in: path * name: storeId * required: true * schema: * type: string * responses: * 200: * description: Store integration configuration retrieved * patch: * summary: Update integration settings for selected store (PATCH /pos_data) * tags: * - Uber Provisioning * parameters: * - in: path * name: storeId * required: true * schema: * type: string * responses: * 200: * description: Store integration updated * delete: * summary: De-provision integration for selected store (DELETE /pos_data) * tags: * - Uber Provisioning * parameters: * - in: path * name: storeId * required: true * schema: * type: string * responses: * 200: * description: Store integration removed */ router.post("/uber/stores/:storeId/pos-data", asyncHandler(controller.createPosData)); router.get("/uber/stores/:storeId/pos-data", asyncHandler(controller.getPosData)); router.patch("/uber/stores/:storeId/pos-data", asyncHandler(controller.patchPosData)); router.delete("/uber/stores/:storeId/pos-data", asyncHandler(controller.deletePosData)); module.exports = router;