package sub import ( "context" "encoding/json" "github.com/grassrootseconomics/cic-custodial/internal/pub" "github.com/grassrootseconomics/cic-custodial/internal/store" "github.com/nats-io/nats.go" ) func (s *Sub) handler(ctx context.Context, msg *nats.Msg) error { var ( chainEvent store.MinimalTxInfo ) if err := json.Unmarshal(msg.Data, &chainEvent); err != nil { return err } if err := s.cu.PgStore.UpdateOtxStatusFromChainEvent(ctx, chainEvent); err != nil { return err } switch msg.Subject { case "CHAIN.register": if chainEvent.Success { if err := s.cu.PgStore.ActivateAccount(ctx, chainEvent.To); err != nil { return err } eventPayload := &pub.EventPayload{ TxHash: chainEvent.TxHash, } if err := s.cu.Pub.Publish( pub.AccountActivated, chainEvent.TxHash, eventPayload, ); err != nil { return err } } case "CHAIN.gas": if chainEvent.Success { if err := s.cu.PgStore.ResetGasQuota(ctx, chainEvent.To); err != nil { return err } eventPayload := &pub.EventPayload{ TxHash: chainEvent.TxHash, } if err := s.cu.Pub.Publish( pub.GasRefilled, chainEvent.TxHash, eventPayload, ); err != nil { return err } } } return nil }