@startuml
actor Host
actor Guest
participant Auth
participant BookingService
participant AsyncAPI
participant NotificationService

database Storage

        Guest -> BookingService: get available events
        return list of available events
        Guest -> BookingService: reserving button
        BookingService -> Storage: create order and reserve seat(s)

        group Unnecessary [if it needs some extra information about user]
            BookingService -> Guest: form for guest's data (first_name, last_name)
            note right: order status is PENDING right now

            alt guest provides guest's data
                BookingService -> Storage: updating order status to SUCCESSFUL
            else guest hasn't provided information for some period
                BookingService -> Storage: updating order status to FAILED and cancel reservation
            end

        end

        BookingService -> NotificationService: seat has been reserved
        NotificationService -> Host: notification with reservation data
@enduml