36 lines
1.1 KiB
Go
36 lines
1.1 KiB
Go
package events
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"time"
|
|
|
|
"go.mongodb.org/mongo-driver/v2/bson"
|
|
)
|
|
|
|
// Envelope is the canonical incoming event envelope.
|
|
type Envelope struct {
|
|
EventID string `json:"event_id"`
|
|
Type string `json:"type"`
|
|
OrganizationRef bson.ObjectID `json:"organization_ref"`
|
|
OccurredAt time.Time `json:"occurred_at"`
|
|
PublishedAt time.Time `json:"published_at,omitempty"`
|
|
Data json.RawMessage `json:"data"`
|
|
}
|
|
|
|
// Service parses incoming messages and builds outbound payload bytes.
|
|
type Service interface {
|
|
Parse(data []byte) (*Envelope, error)
|
|
BuildPayload(ctx context.Context, envelope *Envelope) ([]byte, error)
|
|
}
|
|
|
|
// Payload is the stable outbound JSON body.
|
|
type Payload struct {
|
|
EventID string `json:"event_id"`
|
|
Type string `json:"type"`
|
|
OrganizationRef bson.ObjectID `json:"organization_ref"`
|
|
OccurredAt string `json:"occurred_at"`
|
|
PublishedAt string `json:"published_at,omitempty"`
|
|
Data json.RawMessage `json:"data"`
|
|
}
|