add WebSocket support for real-time delivery updates with JWT authentication and automatic reconnection
Some checks failed
Build and Push Docker Images / build-backend (push) Has been cancelled
Build and Push Docker Images / build-frontend (push) Has been cancelled

This commit is contained in:
Egor Pozharov
2026-05-21 15:52:05 +06:00
parent c87aea47ce
commit d1efebbb34
16 changed files with 408 additions and 73 deletions

View File

@@ -0,0 +1,40 @@
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
}