service backend
This commit is contained in:
101
api/pkg/messaging/internal/envelope/envelope.go
Normal file
101
api/pkg/messaging/internal/envelope/envelope.go
Normal file
@@ -0,0 +1,101 @@
|
||||
package messagingimp
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/google/uuid"
|
||||
"github.com/tech/sendico/pkg/merrors"
|
||||
gmessaging "github.com/tech/sendico/pkg/messaging/internal/generated"
|
||||
"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,
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user