Enable custom engine factory
This commit is contained in:
parent
03d19283f6
commit
ef803e0ee2
2
go.mod
2
go.mod
@ -3,7 +3,7 @@ module git.grassecon.net/grassrootseconomics/visedriver
|
|||||||
go 1.23.0
|
go 1.23.0
|
||||||
|
|
||||||
require (
|
require (
|
||||||
git.defalsify.org/vise.git v0.2.3-0.20250120121301-10739fb4a8c9
|
git.defalsify.org/vise.git v0.2.3-0.20250204110623-bc0a2b3cd33c
|
||||||
github.com/jackc/pgx/v5 v5.7.1
|
github.com/jackc/pgx/v5 v5.7.1
|
||||||
github.com/joho/godotenv v1.5.1
|
github.com/joho/godotenv v1.5.1
|
||||||
)
|
)
|
||||||
|
4
go.sum
4
go.sum
@ -1,5 +1,5 @@
|
|||||||
git.defalsify.org/vise.git v0.2.3-0.20250120121301-10739fb4a8c9 h1:sPcqXQcywxA8W3W+9qQncLPmsrgqTIlec7vmD4/7vyA=
|
git.defalsify.org/vise.git v0.2.3-0.20250204110623-bc0a2b3cd33c h1:qyh/ZU1Nbk0+85NpuqAqXSoDCCcBnZlXwK1uBg1z+dI=
|
||||||
git.defalsify.org/vise.git v0.2.3-0.20250120121301-10739fb4a8c9/go.mod h1:jyBMe1qTYUz3mmuoC9JQ/TvFeW0vTanCUcPu3H8p4Ck=
|
git.defalsify.org/vise.git v0.2.3-0.20250204110623-bc0a2b3cd33c/go.mod h1:jyBMe1qTYUz3mmuoC9JQ/TvFeW0vTanCUcPu3H8p4Ck=
|
||||||
github.com/barbashov/iso639-3 v0.0.0-20211020172741-1f4ffb2d8d1c h1:H9Nm+I7Cg/YVPpEV1RzU3Wq2pjamPc/UtHDgItcb7lE=
|
github.com/barbashov/iso639-3 v0.0.0-20211020172741-1f4ffb2d8d1c h1:H9Nm+I7Cg/YVPpEV1RzU3Wq2pjamPc/UtHDgItcb7lE=
|
||||||
github.com/barbashov/iso639-3 v0.0.0-20211020172741-1f4ffb2d8d1c/go.mod h1:rGod7o6KPeJ+hyBpHfhi4v7blx9sf+QsHsA7KAsdN6U=
|
github.com/barbashov/iso639-3 v0.0.0-20211020172741-1f4ffb2d8d1c/go.mod h1:rGod7o6KPeJ+hyBpHfhi4v7blx9sf+QsHsA7KAsdN6U=
|
||||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
|
@ -12,23 +12,32 @@ import (
|
|||||||
"git.grassecon.net/grassrootseconomics/visedriver/storage"
|
"git.grassecon.net/grassrootseconomics/visedriver/storage"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type EngineFunc func(engine.Config, resource.Resource, *persist.Persister) engine.Engine
|
||||||
|
|
||||||
type BaseRequestHandler struct {
|
type BaseRequestHandler struct {
|
||||||
cfgTemplate engine.Config
|
cfgTemplate engine.Config
|
||||||
rp RequestParser
|
rp RequestParser
|
||||||
rs resource.Resource
|
rs resource.Resource
|
||||||
hn entry.EntryHandler
|
hn entry.EntryHandler
|
||||||
provider storage.StorageProvider
|
provider storage.StorageProvider
|
||||||
|
engineFunc EngineFunc
|
||||||
}
|
}
|
||||||
|
|
||||||
// func NewBaseRequestHandler(cfg engine.Config, rs resource.Resource, stateDb db.Db, userdataDb db.Db, rp request.RequestParser, hn *handlers.Handlers) *BaseRequestHandler {
|
|
||||||
func NewBaseRequestHandler(cfg engine.Config, rs resource.Resource, stateDb db.Db, userdataDb db.Db, rp RequestParser, hn entry.EntryHandler) *BaseRequestHandler {
|
func NewBaseRequestHandler(cfg engine.Config, rs resource.Resource, stateDb db.Db, userdataDb db.Db, rp RequestParser, hn entry.EntryHandler) *BaseRequestHandler {
|
||||||
return &BaseRequestHandler{
|
h := &BaseRequestHandler{
|
||||||
cfgTemplate: cfg,
|
cfgTemplate: cfg,
|
||||||
rs: rs,
|
rs: rs,
|
||||||
hn: hn,
|
hn: hn,
|
||||||
rp: rp,
|
rp: rp,
|
||||||
provider: storage.NewSimpleStorageProvider(stateDb, userdataDb),
|
provider: storage.NewSimpleStorageProvider(stateDb, userdataDb),
|
||||||
}
|
}
|
||||||
|
h.engineFunc = h.getDefaultEngine
|
||||||
|
return h
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *BaseRequestHandler) WithEngineFunc(fn EngineFunc) *BaseRequestHandler {
|
||||||
|
f.engineFunc = fn
|
||||||
|
return f
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *BaseRequestHandler) Shutdown(ctx context.Context) {
|
func (f *BaseRequestHandler) Shutdown(ctx context.Context) {
|
||||||
@ -39,15 +48,22 @@ func (f *BaseRequestHandler) Shutdown(ctx context.Context) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (f *BaseRequestHandler) GetEngine(cfg engine.Config, rs resource.Resource, pr *persist.Persister) engine.Engine {
|
func (f *BaseRequestHandler) GetEngine(cfg engine.Config, rs resource.Resource, pr *persist.Persister) engine.Engine {
|
||||||
|
return f.engineFunc(cfg, rs, pr)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *BaseRequestHandler) getDefaultEngine(cfg engine.Config, rs resource.Resource, pr *persist.Persister) engine.Engine {
|
||||||
en := engine.NewEngine(cfg, rs)
|
en := engine.NewEngine(cfg, rs)
|
||||||
en = en.WithPersister(pr)
|
en = en.WithPersister(pr)
|
||||||
|
en = en.WithFirst(f.hn.Init)
|
||||||
|
if f.cfgTemplate.EngineDebug {
|
||||||
|
en = en.WithDebug(nil)
|
||||||
|
}
|
||||||
return en
|
return en
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *BaseRequestHandler) Process(rqs RequestSession) (RequestSession, error) {
|
func (f *BaseRequestHandler) Process(rqs RequestSession) (RequestSession, error) {
|
||||||
var r bool
|
var r bool
|
||||||
var err error
|
var err error
|
||||||
var ok bool
|
|
||||||
|
|
||||||
logg.InfoCtxf(rqs.Ctx, "new request", "data", rqs)
|
logg.InfoCtxf(rqs.Ctx, "new request", "data", rqs)
|
||||||
|
|
||||||
@ -57,27 +73,12 @@ func (f *BaseRequestHandler) Process(rqs RequestSession) (RequestSession, error)
|
|||||||
return rqs, errors.ErrStorage
|
return rqs, errors.ErrStorage
|
||||||
}
|
}
|
||||||
|
|
||||||
//f.hn = f.hn.WithPersister(rqs.Storage.Persister)
|
|
||||||
f.hn.SetPersister(rqs.Storage.Persister)
|
f.hn.SetPersister(rqs.Storage.Persister)
|
||||||
defer func() {
|
defer func() {
|
||||||
f.hn.Exit()
|
f.hn.Exit()
|
||||||
}()
|
}()
|
||||||
eni := f.GetEngine(rqs.Config, f.rs, rqs.Storage.Persister)
|
|
||||||
en, ok := eni.(*engine.DefaultEngine)
|
|
||||||
if !ok {
|
|
||||||
perr := f.provider.Put(rqs.Ctx, rqs.Config.SessionId, rqs.Storage)
|
|
||||||
rqs.Storage = nil
|
|
||||||
if perr != nil {
|
|
||||||
logg.ErrorCtxf(rqs.Ctx, "", "storage put error", perr)
|
|
||||||
}
|
|
||||||
return rqs, errors.ErrEngineType
|
|
||||||
}
|
|
||||||
en = en.WithFirst(f.hn.Init)
|
|
||||||
if rqs.Config.EngineDebug {
|
|
||||||
en = en.WithDebug(nil)
|
|
||||||
}
|
|
||||||
rqs.Engine = en
|
|
||||||
|
|
||||||
|
rqs.Engine = f.GetEngine(rqs.Config, f.rs, rqs.Storage.Persister)
|
||||||
r, err = rqs.Engine.Exec(rqs.Ctx, rqs.Input)
|
r, err = rqs.Engine.Exec(rqs.Ctx, rqs.Input)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
perr := f.provider.Put(rqs.Ctx, rqs.Config.SessionId, rqs.Storage)
|
perr := f.provider.Put(rqs.Ctx, rqs.Config.SessionId, rqs.Storage)
|
||||||
|
Loading…
Reference in New Issue
Block a user