take reference to module for future process calls

This commit is contained in:
Joel Wetzell
2026-05-14 22:35:31 -05:00
parent d16e247a3a
commit ac2930b91b
3 changed files with 58 additions and 50 deletions
+20 -17
View File
@@ -17,28 +17,31 @@ type DbQuery struct {
ModuleId string ModuleId string
Query *template.Template Query *template.Template
logger *slog.Logger logger *slog.Logger
module common.DatabaseModule
} }
func (dq *DbQuery) Process(ctx context.Context, wrappedPayload common.WrappedPayload) (common.WrappedPayload, error) { func (dq *DbQuery) Process(ctx context.Context, wrappedPayload common.WrappedPayload) (common.WrappedPayload, error) {
if wrappedPayload.Modules == nil { if dq.module == nil {
wrappedPayload.End = true if wrappedPayload.Modules == nil {
return wrappedPayload, errors.New("db.query wrapped payload has no modules") 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] db := dq.module.Database()
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()
if db == nil { if db == nil {
wrappedPayload.End = true wrappedPayload.End = true
return wrappedPayload, fmt.Errorf("db.query module with id %s returned nil database", dq.ModuleId) return wrappedPayload, fmt.Errorf("db.query module with id %s returned nil database", dq.ModuleId)
+20 -17
View File
@@ -16,28 +16,31 @@ type KVGet struct {
ModuleId string ModuleId string
Key string Key string
logger *slog.Logger logger *slog.Logger
module common.KeyValueModule
} }
func (kvg *KVGet) Process(ctx context.Context, wrappedPayload common.WrappedPayload) (common.WrappedPayload, error) { func (kvg *KVGet) Process(ctx context.Context, wrappedPayload common.WrappedPayload) (common.WrappedPayload, error) {
if wrappedPayload.Modules == nil { if kvg.module == nil {
wrappedPayload.End = true if wrappedPayload.Modules == nil {
return wrappedPayload, errors.New("kv.get wrapped payload has no modules") 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] value, err := kvg.module.Get(kvg.Key)
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)
if err != nil { if err != nil {
wrappedPayload.End = true wrappedPayload.End = true
return wrappedPayload, fmt.Errorf("kv.get error getting key: %w", err) return wrappedPayload, fmt.Errorf("kv.get error getting key: %w", err)
+18 -16
View File
@@ -19,28 +19,30 @@ type KVSet struct {
Key string Key string
Value *template.Template Value *template.Template
logger *slog.Logger logger *slog.Logger
module common.KeyValueModule
} }
func (kvs *KVSet) Process(ctx context.Context, wrappedPayload common.WrappedPayload) (common.WrappedPayload, error) { 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 { module, ok := wrappedPayload.Modules[kvs.ModuleId]
wrappedPayload.End = true if !ok {
return wrappedPayload, errors.New("kv.set wrapped payload has no modules") wrappedPayload.End = true
} return wrappedPayload, fmt.Errorf("kv.set unable to find module with id: %s", kvs.ModuleId)
}
module, ok := wrappedPayload.Modules[kvs.ModuleId] kvModule, ok := module.(common.KeyValueModule)
if !ok { if !ok {
wrappedPayload.End = true wrappedPayload.End = true
return wrappedPayload, fmt.Errorf("kv.set unable to find module with id: %s", kvs.ModuleId) 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 var valueBuffer bytes.Buffer
err := kvs.Value.Execute(&valueBuffer, wrappedPayload) err := kvs.Value.Execute(&valueBuffer, wrappedPayload)
@@ -49,7 +51,7 @@ func (kvs *KVSet) Process(ctx context.Context, wrappedPayload common.WrappedPayl
return wrappedPayload, err return wrappedPayload, err
} }
err = kvModule.Set(kvs.Key, valueBuffer.String()) err = kvs.module.Set(kvs.Key, valueBuffer.String())
if err != nil { if err != nil {
wrappedPayload.End = true wrappedPayload.End = true
return wrappedPayload, fmt.Errorf("kv.set error setting key: %w", err) return wrappedPayload, fmt.Errorf("kv.set error setting key: %w", err)