Files
Stephan D 751045fcc0
All checks were successful
ci/woodpecker/push/db Pipeline was successful
ci/woodpecker/push/fx/1 Pipeline was successful
ci/woodpecker/push/nats Pipeline was successful
ci/woodpecker/push/fx/2 Pipeline was successful
fx build fix
2025-11-09 02:57:22 +01:00

102 lines
2.2 KiB
Go

package messagingimp
import (
"time"
"github.com/google/uuid"
"github.com/tech/sendico/pkg/merrors"
gmessaging "github.com/tech/sendico/pkg/generated/gmessaging"
"github.com/tech/sendico/pkg/model"
"google.golang.org/protobuf/proto"
"google.golang.org/protobuf/types/known/timestamppb"
)
type EnvelopeImp struct {
uid uuid.UUID
dateTime time.Time
data []byte
sender string
signature model.NotificationEvent
}
func (e *EnvelopeImp) GetTimeStamp() time.Time {
return e.dateTime
}
func (e *EnvelopeImp) GetMessageId() uuid.UUID {
return e.uid
}
func (e *EnvelopeImp) GetSender() string {
return e.sender
}
func (e *EnvelopeImp) GetData() []byte {
return e.data
}
func (e *EnvelopeImp) GetSignature() model.NotificationEvent {
return e.signature
}
func (e *EnvelopeImp) Serialize() ([]byte, error) {
if e.data == nil {
return nil, merrors.Internal("Envelope data is not initialized")
}
msg := gmessaging.Envelope{
Event: &gmessaging.NotificationEvent{
Type: e.signature.StringType(),
Action: e.signature.StringAction(),
},
MessageData: e.data,
Metadata: &gmessaging.EventMetadata{
MessageId: e.uid.String(),
Sender: e.sender,
Timestamp: timestamppb.New(e.dateTime),
},
}
return proto.Marshal(&msg)
}
func (e *EnvelopeImp) Wrap(data []byte) ([]byte, error) {
e.data = data
return e.Serialize()
}
func DeserializeImp(data []byte) (*EnvelopeImp, error) {
var envelope gmessaging.Envelope
if err := proto.Unmarshal(data, &envelope); err != nil {
return nil, err
}
var e EnvelopeImp
var err error
if e.uid, err = uuid.Parse(envelope.Metadata.MessageId); err != nil {
return nil, err
}
if envelope.Metadata.Timestamp != nil {
e.dateTime = envelope.Metadata.Timestamp.AsTime()
} else {
e.dateTime = time.Now()
}
if e.signature, err = model.StringToNotificationEvent(envelope.Event.Type, envelope.Event.Action); err != nil {
return nil, err
}
e.data = envelope.MessageData
e.sender = envelope.Metadata.Sender
return &e, nil
}
func CreateEnvelopeImp(sender string, signature model.NotificationEvent) *EnvelopeImp {
return &EnvelopeImp{
dateTime: time.Now(),
sender: sender,
uid: uuid.New(),
signature: signature,
}
}