@startuml order-orchestrator-states-high-level skinparam monochrome true title Order Orchestrator States (High level) [*] --> INCOMING_ORDER INCOMING_ORDER: New order INCOMING_ORDER --> WAITING_FOR_RESTAURANT WAITING_FOR_RESTAURANT --> RESTAURANT_ACCEPTED WAITING_FOR_RESTAURANT --> RESTAURANT_REJECTED RESTAURANT_REJECTED --> ORDER_REJECTED ORDER_REJECTED: Cannot fulfill order ORDER_REJECTED -LEFT-> [*] RESTAURANT_ACCEPTED --> PICK_PROVIDER PICK_PROVIDER --> REQUEST_PROVIDER REQUEST_PROVIDER --> PROVIDER_REJECTED REQUEST_PROVIDER --> PROVIDER_TIMEOUT REQUEST_PROVIDER --> PROVIDER_ACCEPTED PROVIDER_TIMEOUT --> PICK_PROVIDER PROVIDER_REJECTED --> PICK_PROVIDER PICK_PROVIDER --> ALL_PROVIDERS_UNAVAILABLE ALL_PROVIDERS_UNAVAILABLE --> ORDER_REJECTED PROVIDER_ACCEPTED --> ORDER_FULFILLING ORDER_FULFILLING --> ORDER_DELIVERED ORDER_DELIVERED --> [*] state PICK_PROVIDER { PICK_PROVIDER: Loop through priritized list } state ALL_PROVIDERS_UNAVAILABLE { ALL_PROVIDERS_UNAVAILABLE: None of the providers have drivers } @enduml