openapi: 3.1.0
info:
  title: Food Express API
  description: >
    API for managing the FoodExpress restaurants, orders, and customers.
  version: 1.0.0

servers:
  - url: http://localhost:4004/api/v1
    description: Local development servers
  - url: https://{stage}.foodexpress.com/api/v1
    description: Stage server
    variables:
      stage:
        description: Stage
        enum:
          - dev
          - test
        default: dev
  - url: https://foodexpress.com/api/v1
    description: Production server

paths:
  /restaurants:
    get:
      summary: List restaurants
      description: Retrieve a list of restaurants.
      responses:
        "200":
          description: A list of restaurants
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                  properties:
                    id:
                      type: string
                      examples: ["465db18f-6fc0-48e1-804a-156d0df29392"]
                    name:
                      type: string
                      examples: ["Thai Food"]
                    address:
                      type: string
                      examples: ["Hauptstraße 9, 68259 Mannheim"]

  /restaurants/{id}/menu:
    get:
      summary: Get restaurant menu
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
            example: "09ede9cb-0031-4469-9144-dec6b564f1c0"
      responses:
        "200":
          description: Menu for the restaurant
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                  properties:
                    id:
                      type: string
                      examples: ["9f062baf-236b-44fe-8d30-88cecb02c26b"]
                    name:
                      type: string
                      examples: ["Cheeseburger"]
                    price:
                      type: number
                      examples: [3.99]
        "404":
          description: Restaurant not found

  /restaurants/{id}/orders:
    get:
      summary: List orders for a restaurant
      description: Retrieve a list of orders for a specific restaurant.
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
            example: "09ede9cb-0031-4469-9144-dec6b564f1c0"
      responses:
        "200":
          description: A list of orders
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                  properties:
                    id:
                      type: string
                      examples: ["28c0bc0d-9d17-4b74-9885-84a4cd7c761e"]
                    restaurantId:
                      type: string
                      examples: ["73591883-8aa4-4a2d-a411-abf42220a824"]
                    customerId:
                      type: string
                      examples: ["706f645d-a420-4984-a913-c9a6e0c677f2"]
                    status:
                      type: string
                      enum:
                        - CREATED
                        - CONFIRMED
                        - PREPARING
                        - READY
                        - DELIVERED
                        - CANCELLED
                      examples: ["CREATED"]
                    items:
                      type: array
                      items:
                        type: object
                        properties:
                          id:
                            type: string
                            examples: ["9f062baf-236b-44fe-8d30-88cecb02c26b"]
                          name:
                            type: string
                            examples: ["Cheeseburger"]
                          price:
                            type: number
                            examples: [3.99]
                    totalAmount:
                      type: number
                      examples: [29.95]

  /orders/{orderId}:
    get:
      summary: Get order by ID
      parameters:
        - name: orderId
          in: path
          required: true
          schema:
            type: string
            example: "e17aca0c-c956-4a0d-afec-b117a9926e2c"
      responses:
        "200":
          description: Order details
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: string
                    examples: ["28c0bc0d-9d17-4b74-9885-84a4cd7c761e"]
                  restaurantId:
                    type: string
                    examples: ["73591883-8aa4-4a2d-a411-abf42220a824"]
                  customerId:
                    type: string
                    examples: ["706f645d-a420-4984-a913-c9a6e0c677f2"]
                  status:
                    type: string
                    enum:
                      - CREATED
                      - CONFIRMED
                      - PREPARING
                      - READY
                      - DELIVERED
                      - CANCELLED
                    examples: ["CREATED"]
                  items:
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          type: string
                          examples: ["9f062baf-236b-44fe-8d30-88cecb02c26b"]
                        name:
                          type: string
                          examples: ["Cheeseburger"]
                        price:
                          type: number
                          examples: [3.99]
                  totalAmount:
                    type: number
                    examples: [29.95]
        "404":
          description: Order not found

  /customers/{id}:
    get:
      summary: Get customer by ID
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
            example: "18e1d8a2-e7ca-458f-a997-2cc80754105f"
      responses:
        "200":
          description: Customer details
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: string
                    examples: ["1a7830a6-8e0f-43b2-a0e0-4479cb0acf7d"]
                  name:
                    type: string
                    examples: ["Max Mustermann"]
                  email:
                    type: string
                    examples: ["max.mustermann@gmail.com"]
                  "404":
                    description: Customer not found
