From ac2930b91b61b69cef58c0f5fce1a9cab43f5e1c Mon Sep 17 00:00:00 2001 From: Joel Wetzell Date: Thu, 14 May 2026 22:35:31 -0500 Subject: [PATCH] take reference to module for future process calls --- internal/processor/db-query.go | 37 ++++++++++++++++++---------------- internal/processor/kv-get.go | 37 ++++++++++++++++++---------------- internal/processor/kv-set.go | 34 ++++++++++++++++--------------- 3 files changed, 58 insertions(+), 50 deletions(-) diff --git a/internal/processor/db-query.go b/internal/processor/db-query.go index f62342d..b166014 100644 --- a/internal/processor/db-query.go +++ b/internal/processor/db-query.go @@ -17,28 +17,31 @@ type DbQuery struct { ModuleId string Query *template.Template logger *slog.Logger + module common.DatabaseModule } func (dq *DbQuery) Process(ctx context.Context, wrappedPayload common.WrappedPayload) (common.WrappedPayload, error) { - if wrappedPayload.Modules == nil { - wrappedPayload.End = true - return wrappedPayload, errors.New("db.query wrapped payload has no modules") + if dq.module == nil { + if wrappedPayload.Modules == nil { + wrappedPayload.End = true + return wrappedPayload, errors.New("db.query wrapped payload has no modules") + } + + module, ok := wrappedPayload.Modules[dq.ModuleId] + if !ok { + wrappedPayload.End = true + return wrappedPayload, fmt.Errorf("db.query unable to find module with id: %s", dq.ModuleId) + } + + dbModule, ok := module.(common.DatabaseModule) + if !ok { + wrappedPayload.End = true + return wrappedPayload, fmt.Errorf("db.query module with id %s is not a DatabaseModule", dq.ModuleId) + } + dq.module = dbModule } - module, ok := wrappedPayload.Modules[dq.ModuleId] - if !ok { - wrappedPayload.End = true - return wrappedPayload, fmt.Errorf("db.query unable to find module with id: %s", dq.ModuleId) - } - - dbModule, ok := module.(common.DatabaseModule) - if !ok { - wrappedPayload.End = true - return wrappedPayload, fmt.Errorf("db.query module with id %s is not a DatabaseModule", dq.ModuleId) - } - // TODO(jwetzell): cache the module reference after the first run - - db := dbModule.Database() + db := dq.module.Database() if db == nil { wrappedPayload.End = true return wrappedPayload, fmt.Errorf("db.query module with id %s returned nil database", dq.ModuleId) diff --git a/internal/processor/kv-get.go b/internal/processor/kv-get.go index 681b6b6..0d6790b 100644 --- a/internal/processor/kv-get.go +++ b/internal/processor/kv-get.go @@ -16,28 +16,31 @@ type KVGet struct { ModuleId string Key string logger *slog.Logger + module common.KeyValueModule } func (kvg *KVGet) Process(ctx context.Context, wrappedPayload common.WrappedPayload) (common.WrappedPayload, error) { - if wrappedPayload.Modules == nil { - wrappedPayload.End = true - return wrappedPayload, errors.New("kv.get wrapped payload has no modules") + if kvg.module == nil { + if wrappedPayload.Modules == nil { + wrappedPayload.End = true + return wrappedPayload, errors.New("kv.get wrapped payload has no modules") + } + + module, ok := wrappedPayload.Modules[kvg.ModuleId] + if !ok { + wrappedPayload.End = true + return wrappedPayload, fmt.Errorf("kv.get unable to find module with id: %s", kvg.ModuleId) + } + + kvModule, ok := module.(common.KeyValueModule) + if !ok { + wrappedPayload.End = true + return wrappedPayload, fmt.Errorf("kv.get module with id %s is not a KeyValueModule", kvg.ModuleId) + } + kvg.module = kvModule } - module, ok := wrappedPayload.Modules[kvg.ModuleId] - if !ok { - wrappedPayload.End = true - return wrappedPayload, fmt.Errorf("kv.get unable to find module with id: %s", kvg.ModuleId) - } - - kvModule, ok := module.(common.KeyValueModule) - if !ok { - wrappedPayload.End = true - return wrappedPayload, fmt.Errorf("kv.get module with id %s is not a KeyValueModule", kvg.ModuleId) - } - // TODO(jwetzell): cache the module reference after the first run - - value, err := kvModule.Get(kvg.Key) + value, err := kvg.module.Get(kvg.Key) if err != nil { wrappedPayload.End = true return wrappedPayload, fmt.Errorf("kv.get error getting key: %w", err) diff --git a/internal/processor/kv-set.go b/internal/processor/kv-set.go index eedfced..6d99277 100644 --- a/internal/processor/kv-set.go +++ b/internal/processor/kv-set.go @@ -19,28 +19,30 @@ type KVSet struct { Key string Value *template.Template logger *slog.Logger + module common.KeyValueModule } func (kvs *KVSet) Process(ctx context.Context, wrappedPayload common.WrappedPayload) (common.WrappedPayload, error) { + if kvs.module == nil { + if wrappedPayload.Modules == nil { + wrappedPayload.End = true + return wrappedPayload, errors.New("kv.set wrapped payload has no modules") + } - if wrappedPayload.Modules == nil { - wrappedPayload.End = true - return wrappedPayload, errors.New("kv.set wrapped payload has no modules") - } + module, ok := wrappedPayload.Modules[kvs.ModuleId] + if !ok { + wrappedPayload.End = true + return wrappedPayload, fmt.Errorf("kv.set unable to find module with id: %s", kvs.ModuleId) + } - module, ok := wrappedPayload.Modules[kvs.ModuleId] - if !ok { - wrappedPayload.End = true - return wrappedPayload, fmt.Errorf("kv.set unable to find module with id: %s", kvs.ModuleId) + kvModule, ok := module.(common.KeyValueModule) + if !ok { + wrappedPayload.End = true + return wrappedPayload, fmt.Errorf("kv.set module with id %s is not a KeyValueModule", kvs.ModuleId) + } + kvs.module = kvModule } - kvModule, ok := module.(common.KeyValueModule) - if !ok { - wrappedPayload.End = true - return wrappedPayload, fmt.Errorf("kv.set module with id %s is not a KeyValueModule", kvs.ModuleId) - } - // TODO(jwetzell): cache the module reference after the first run - var valueBuffer bytes.Buffer err := kvs.Value.Execute(&valueBuffer, wrappedPayload) @@ -49,7 +51,7 @@ func (kvs *KVSet) Process(ctx context.Context, wrappedPayload common.WrappedPayl return wrappedPayload, err } - err = kvModule.Set(kvs.Key, valueBuffer.String()) + err = kvs.module.Set(kvs.Key, valueBuffer.String()) if err != nil { wrappedPayload.End = true return wrappedPayload, fmt.Errorf("kv.set error setting key: %w", err)