mirror of
https://github.com/foomo/sesamy-go.git
synced 2025-10-16 12:35:43 +00:00
feat: add message handler
This commit is contained in:
parent
8419d07ae4
commit
5cb6719df0
34
integration/watermill/gtag/messagehandler.go
Normal file
34
integration/watermill/gtag/messagehandler.go
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
package gtag
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
|
||||||
|
"github.com/ThreeDotsLabs/watermill/message"
|
||||||
|
"github.com/foomo/sesamy-go/pkg/encoding/gtag"
|
||||||
|
"github.com/pkg/errors"
|
||||||
|
)
|
||||||
|
|
||||||
|
func MessageHandler(handler func(payload *gtag.Payload, msg *message.Message) error) func(msg *message.Message) ([]*message.Message, error) {
|
||||||
|
return func(msg *message.Message) ([]*message.Message, error) {
|
||||||
|
var payload *gtag.Payload
|
||||||
|
|
||||||
|
// unmarshal payload
|
||||||
|
if err := json.Unmarshal(msg.Payload, &payload); err != nil {
|
||||||
|
return nil, errors.Wrap(err, "failed to unmarshal payload")
|
||||||
|
}
|
||||||
|
|
||||||
|
// handle payload
|
||||||
|
if err := handler(payload, msg); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// marshal payload
|
||||||
|
b, err := json.Marshal(payload)
|
||||||
|
if err != nil {
|
||||||
|
return nil, errors.Wrap(err, "failed to marshal payload")
|
||||||
|
}
|
||||||
|
msg.Payload = b
|
||||||
|
|
||||||
|
return []*message.Message{msg}, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,30 +0,0 @@
|
|||||||
package v2
|
|
||||||
|
|
||||||
import (
|
|
||||||
"encoding/json"
|
|
||||||
|
|
||||||
"github.com/ThreeDotsLabs/watermill/message"
|
|
||||||
"github.com/foomo/sesamy-go/pkg/encoding/gtag"
|
|
||||||
"github.com/pkg/errors"
|
|
||||||
)
|
|
||||||
|
|
||||||
func EventHandler(eventHandler func(event *gtag.Payload, msg *message.Message) error) func(msg *message.Message) ([]*message.Message, error) {
|
|
||||||
return func(msg *message.Message) ([]*message.Message, error) {
|
|
||||||
var event *gtag.Payload
|
|
||||||
if err := json.Unmarshal(msg.Payload, &event); err != nil {
|
|
||||||
return nil, errors.Wrap(err, "failed to unmarshal event")
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := eventHandler(event, msg); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
b, err := json.Marshal(event)
|
|
||||||
if err != nil {
|
|
||||||
return nil, errors.Wrap(err, "failed to marshal event")
|
|
||||||
}
|
|
||||||
msg.Payload = b
|
|
||||||
|
|
||||||
return []*message.Message{msg}, nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
34
integration/watermill/mpv2/messagehandler.go
Normal file
34
integration/watermill/mpv2/messagehandler.go
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
package mpv2
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
|
||||||
|
"github.com/ThreeDotsLabs/watermill/message"
|
||||||
|
"github.com/foomo/sesamy-go/pkg/encoding/mpv2"
|
||||||
|
"github.com/pkg/errors"
|
||||||
|
)
|
||||||
|
|
||||||
|
func MessageHandler(handler func(payload *mpv2.Payload[any], msg *message.Message) error) func(msg *message.Message) ([]*message.Message, error) {
|
||||||
|
return func(msg *message.Message) ([]*message.Message, error) {
|
||||||
|
var payload *mpv2.Payload[any]
|
||||||
|
|
||||||
|
// unmarshal payload
|
||||||
|
if err := json.Unmarshal(msg.Payload, &payload); err != nil {
|
||||||
|
return nil, errors.Wrap(err, "failed to unmarshal payload")
|
||||||
|
}
|
||||||
|
|
||||||
|
// handle payload
|
||||||
|
if err := handler(payload, msg); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// marshal payload
|
||||||
|
b, err := json.Marshal(payload)
|
||||||
|
if err != nil {
|
||||||
|
return nil, errors.Wrap(err, "failed to marshal payload")
|
||||||
|
}
|
||||||
|
msg.Payload = b
|
||||||
|
|
||||||
|
return []*message.Message{msg}, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,5 +0,0 @@
|
|||||||
package mpv2
|
|
||||||
|
|
||||||
const (
|
|
||||||
MetadataEventName = "X-Event-Name"
|
|
||||||
)
|
|
||||||
@ -97,27 +97,21 @@ func (s *Subscriber) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Subscriber) handle(l *zap.Logger, r *http.Request, event *mpv2.Payload[any]) error {
|
func (s *Subscriber) handle(l *zap.Logger, r *http.Request, payload *mpv2.Payload[any]) error {
|
||||||
// marshal message payload
|
// marshal message payload
|
||||||
payload, err := json.Marshal(event)
|
jsonPayload, err := json.Marshal(payload)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrap(err, "failed to marshal payload")
|
return errors.Wrap(err, "failed to marshal payload")
|
||||||
}
|
}
|
||||||
|
|
||||||
msg := message.NewMessage(s.uuidFunc(), payload)
|
msg := message.NewMessage(s.uuidFunc(), jsonPayload)
|
||||||
l = l.With(zap.String("message_id", msg.UUID))
|
l = l.With(zap.String("message_id", msg.UUID))
|
||||||
// if labeler, ok := keellog.LabelerFromRequest(r); ok {
|
|
||||||
// labeler.Add(zap.String("message_id", msg.UUID))
|
|
||||||
// }
|
|
||||||
// if event.EventName != nil {
|
|
||||||
// msg.Metadata.Set(MetadataEventName, gtag.Get(event.EventName).String())
|
|
||||||
// }
|
|
||||||
|
|
||||||
// TODO filter headers?
|
// TODO filter headers?
|
||||||
for name, headers := range r.Header {
|
for name, headers := range r.Header {
|
||||||
msg.Metadata.Set(name, strings.Join(headers, ","))
|
msg.Metadata.Set(name, strings.Join(headers, ","))
|
||||||
}
|
}
|
||||||
//
|
|
||||||
// if cookies := r.Cookies(); len(cookies) > 0 {
|
// if cookies := r.Cookies(); len(cookies) > 0 {
|
||||||
// values := make([]string, len(cookies))
|
// values := make([]string, len(cookies))
|
||||||
// for i, cookie := range r.Cookies() {
|
// for i, cookie := range r.Cookies() {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user