diff --git a/internal/storage/storage.go b/internal/storage/storage.go index f5f0226..e91b399 100644 --- a/internal/storage/storage.go +++ b/internal/storage/storage.go @@ -11,6 +11,7 @@ import ( type Storager interface { StoreBarcode(ctx context.Context, in *types.Barcode) error + StoreProductionOrder(ctx context.Context, in *types.ProductionOrder) error ConfirmBundle(ctx context.Context, barcode string) error } @@ -26,6 +27,11 @@ type DBConfig struct { Name string } +// StoreProductionOrder implements Storager. +func (s *storage) StoreProductionOrder(ctx context.Context, in *types.ProductionOrder) error { + return s.db.Save(in).Error +} + // ConfirmBundle implements Storager. func (s *storage) ConfirmBundle(ctx context.Context, barcode string) error { return s.db.Model(&types.BundleData{}).Where("nromatricula = ?", barcode).Update("confirmed", true).Error diff --git a/sap/app/app.go b/sap/app/app.go index 5a82c01..14bd6c9 100644 --- a/sap/app/app.go +++ b/sap/app/app.go @@ -1,7 +1,9 @@ package app import ( + "bytes" "context" + "encoding/json" "fmt" "os" "os/signal" @@ -9,6 +11,7 @@ import ( cml04eventer "git.espin.casa/albert/cml04-eventer" "git.espin.casa/albert/cml04-falcon-system/internal/storage" + "git.espin.casa/albert/cml04-falcon-system/internal/types" "git.espin.casa/albert/logger" "github.com/nats-io/nats.go" "github.com/spf13/cobra" @@ -82,7 +85,30 @@ func Run(cmd *cobra.Command, args []string) { } go func() { for event := range eventChan { + // log info banner + log.Info("received new SAP event", logFields.Add(logger.LogFields{"event_id": event.EventID})) + // create buffer + buffer := bytes.NewBuffer(event.EventData) + // get event message subject + subject, err := event.EventMeta.Get("subject") + if err != nil { + log.Error("get event metada data failed", err, logFields) + } + switch subject { + case "sap.in.telegramas.z_sms_10001": + po := &types.ProductionOrder{} + if err := json.Unmarshal(buffer.Bytes(), po); err != nil { + log.Error("decode event message data failed", err, logFields) + continue + } + if err := storage.StoreProductionOrder(ctx, po); err != nil { + log.Error("store production order data failed", err, logFields) + continue + } + default: + continue + } } }() // info banner