diff --git a/packages/burger-api/api.http b/packages/burger-api/api.http index aa1c72d..70318b2 100644 --- a/packages/burger-api/api.http +++ b/packages/burger-api/api.http @@ -80,6 +80,21 @@ Content-Type: application/json ] } +### Create a new order with nickname +POST {{api_host}}/api/orders +Content-Type: application/json + +{ + "userId": "user123", + "nickname": "Alice", + "items": [ + { + "burgerId": "1", + "quantity": 2 + } + ] +} + ### Delete/cancel an order DELETE {{api_host}}/api/orders/12345?userId=user123 diff --git a/packages/burger-api/openapi.yaml b/packages/burger-api/openapi.yaml index 1c359d4..651ecb6 100644 --- a/packages/burger-api/openapi.yaml +++ b/packages/burger-api/openapi.yaml @@ -486,6 +486,10 @@ components: format: date-time description: ISO date string for when the order was ready (undefined until ready) example: '2025-04-10T15:05:00Z' + nickname: + type: string + description: Optional nickname for the order + example: 'John' totalPrice: type: number format: float @@ -520,6 +524,9 @@ components: type: string format: date-time description: ISO date string for when the order was completed (undefined until completed) + nickname: + type: string + description: Optional nickname for the order totalPrice: type: number format: float @@ -538,6 +545,10 @@ components: userId: type: string example: 'user123' + nickname: + type: string + description: Optional nickname for the order (only first 10 chars displayed) + example: 'John' items: type: array description: List of burger items (maximum 50 burgers total across all items) diff --git a/packages/burger-api/src/functions/orders-post.ts b/packages/burger-api/src/functions/orders-post.ts index 41f4e0b..b96a892 100644 --- a/packages/burger-api/src/functions/orders-post.ts +++ b/packages/burger-api/src/functions/orders-post.ts @@ -10,6 +10,7 @@ interface CreateOrderRequest { quantity: number; extraToppingIds?: string[]; }>; + nickname?: string; } // Helper function for topping validation @@ -176,6 +177,7 @@ app.http('orders-post', { estimatedCompletionAt: estimatedCompletionAt.toISOString(), totalPrice, status: OrderStatus.Pending, + nickname: requestBody.nickname, completedAt: undefined, }); diff --git a/packages/burger-api/src/order.ts b/packages/burger-api/src/order.ts index 7f51d22..ac72dad 100644 --- a/packages/burger-api/src/order.ts +++ b/packages/burger-api/src/order.ts @@ -20,6 +20,7 @@ export interface Order { estimatedCompletionAt: string; // ISO date string for estimated completion time totalPrice: number; status: OrderStatus; + nickname?: string; // Optional nickname for the order readyAt?: string; // ISO date string for when the order was ready (undefined until ready) completedAt?: string; // ISO date string for when the order was completed (undefined until completed) } diff --git a/packages/burger-mcp/src/tools.ts b/packages/burger-mcp/src/tools.ts index 242886d..cc7ade4 100644 --- a/packages/burger-mcp/src/tools.ts +++ b/packages/burger-mcp/src/tools.ts @@ -79,6 +79,7 @@ export const tools = [ description: 'Place a new order with burgers (requires userId)', schema: z.object({ userId: z.string().describe('ID of the user placing the order'), + nickname: z.string().optional().describe('Optional nickname for the order (only first 10 chars displayed)'), items: z .array( z.object({ diff --git a/packages/burger-webapp/src/components/burger-dashboard.ts b/packages/burger-webapp/src/components/burger-dashboard.ts index 48fb9a5..039998a 100644 --- a/packages/burger-webapp/src/components/burger-dashboard.ts +++ b/packages/burger-webapp/src/components/burger-dashboard.ts @@ -112,6 +112,7 @@ export class BurgerDashboard extends LitElement { protected renderOrder = (order: BurgerOrder, isLeaving = false) => { const animClass = isLeaving ? 'fade-out' : ''; + const displayId = order.nickname ? order.nickname.slice(0, 10) : `#${order.id.slice(-6)}`; return html`