package ws import ( "encoding/json" "log" ) type EventType string const ( DeliveryCreated EventType = "delivery.created" DeliveryUpdated EventType = "delivery.updated" DeliveryStatusChanged EventType = "delivery.status_changed" DeliveryDeleted EventType = "delivery.deleted" ) type Event struct { Type EventType `json:"type"` Payload any `json:"payload"` } type StatusPayload struct { ID string `json:"id"` Status string `json:"status"` } type DeletePayload struct { ID string `json:"id"` } // NewEvent serializes an event to JSON. Returns nil on marshal failure; // callers should treat nil as "skip broadcast". func NewEvent(eventType EventType, payload any) []byte { data, err := json.Marshal(Event{Type: eventType, Payload: payload}) if err != nil { log.Printf("ws: failed to marshal event %s: %v", eventType, err) return nil } return data }