diff --git a/bundle/app/app.go b/bundle/app/app.go index cfc943f..145d230 100644 --- a/bundle/app/app.go +++ b/bundle/app/app.go @@ -1,12 +1,16 @@ package app import ( + "bytes" "context" + "encoding/json" "fmt" "os" "os/signal" "syscall" + cml04eventer "git.espin.casa/albert/cml04-eventer" + "git.espin.casa/albert/cml04-falcon-system/internal/publisher" "git.espin.casa/albert/cml04-falcon-system/internal/storage" "git.espin.casa/albert/logger" "github.com/nats-io/nats.go" @@ -56,13 +60,15 @@ func Run(cmd *cobra.Command, args []string) { return } defer nc.Close() + // create publisher + pub := publisher.New(nc) // create context ctx, cancel := context.WithCancel(context.Background()) defer cancel() // NATS subscribe subject nc.Subscribe("barcode.new", func(msg *nats.Msg) { go func(log logger.LoggerAdapter) { - if err := ProcessBarcodeMessage(ctx, msg, storage, log); err != nil { + if err := ProcessNewBarcodeMessage(ctx, msg, storage, pub, log); err != nil { log.Error("process new barcode message failed", err, logger.LogFields{}) return } @@ -70,7 +76,7 @@ func Run(cmd *cobra.Command, args []string) { }) nc.Subscribe("bundle.new", func(msg *nats.Msg) { go func(log logger.LoggerAdapter) { - if err := ProcessBundleMessage(ctx, msg, storage, log); err != nil { + if err := ProcessNewBundleMessage(ctx, msg, storage, log); err != nil { log.Error("process new bundle message failed", err, logger.LogFields{}) return } @@ -85,11 +91,35 @@ func Run(cmd *cobra.Command, args []string) { })) } -func ProcessBarcodeMessage(ctx context.Context, msg *nats.Msg, storage storage.Storager, log logger.LoggerAdapter) error { +func ProcessNewBarcodeMessage(ctx context.Context, msg *nats.Msg, storage storage.Storager, pub publisher.Publisher, log logger.LoggerAdapter) error { + // event holder + event := &cml04eventer.Event{} + // create new buffer based on message data + buff := bytes.NewBuffer(msg.Data) + // decode message + if err := json.NewDecoder(buff).Decode(event); err != nil { + return err + } + // info banner + log.Info("received event bus message", logger.LogFields{ + "event_id": event.EventID, + "event_topic": event.EventTopic, + }) + // barcode + barcode := string(event.EventData) + // store barcode + if err := storage.ConfirmBundle(ctx, barcode); err != nil { + return err + } + // send bundle confirmation + if err := pub.ComfirmedBundle(ctx, barcode); err != nil { + return err + } return nil + } -func ProcessBundleMessage(ctx context.Context, msg *nats.Msg, storage storage.Storager, log logger.LoggerAdapter) error { +func ProcessNewBundleMessage(ctx context.Context, msg *nats.Msg, storage storage.Storager, log logger.LoggerAdapter) error { return nil } diff --git a/cmd/bundle.go b/cmd/bundle.go index 696e053..1960187 100644 --- a/cmd/bundle.go +++ b/cmd/bundle.go @@ -4,19 +4,16 @@ Copyright © 2024 NAME HERE package cmd import ( - "fmt" - + "git.espin.casa/albert/cml04-falcon-system/bundle/app" "github.com/spf13/cobra" ) // bundleCmd represents the bundle command var bundleCmd = &cobra.Command{ Use: "bundle", - Short: "bundle service manager.", - Long: "", - Run: func(cmd *cobra.Command, args []string) { - fmt.Println("bundle called") - }, + Short: "Bundle service manager.", + Long: "Bundle service manager. Register, calculate values for bundles (production).", + Run: app.Run, } func init() { diff --git a/internal/publisher/publisher.go b/internal/publisher/publisher.go index f8b556f..40185a5 100644 --- a/internal/publisher/publisher.go +++ b/internal/publisher/publisher.go @@ -11,12 +11,26 @@ import ( type Publisher interface { NewBarcode(ctx context.Context, barcode string) error + ComfirmedBundle(ctx context.Context, barcode string) error } type publisher struct { nc *nats.Conn } +func (e *publisher) ComfirmedBundle(ctx context.Context, barcode string) error { + // create event message + evt := cml04eventer.NewEvent("falcon-handset", "bundle.confirmed", nil, []byte(barcode)) + // create buffer message data + buf := bytes.Buffer{} + // encode message + if err := json.NewEncoder(&buf).Encode(evt); err != nil { + return err + } + // publish event message + return e.nc.Publish("bundle.confirmed", buf.Bytes()) +} + func (e *publisher) NewBarcode(ctx context.Context, barcode string) error { // create event message evt := cml04eventer.NewEvent("falcon-handset", "barcode.new", nil, []byte(barcode))