diff --git a/go.mod b/go.mod index b1b60dc..70802d9 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module git.grassecon.net/grassrootseconomics/visedriver go 1.23.0 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/joho/godotenv v1.5.1 ) diff --git a/go.sum b/go.sum index 7c3b3a4..09deee0 100644 --- a/go.sum +++ b/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.20250120121301-10739fb4a8c9/go.mod h1:jyBMe1qTYUz3mmuoC9JQ/TvFeW0vTanCUcPu3H8p4Ck= +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.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/go.mod h1:rGod7o6KPeJ+hyBpHfhi4v7blx9sf+QsHsA7KAsdN6U= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= diff --git a/request/base.go b/request/base.go index 65bcf58..30400c0 100644 --- a/request/base.go +++ b/request/base.go @@ -12,23 +12,32 @@ import ( "git.grassecon.net/grassrootseconomics/visedriver/storage" ) +type EngineFunc func(engine.Config, resource.Resource, *persist.Persister) engine.Engine + type BaseRequestHandler struct { cfgTemplate engine.Config rp RequestParser rs resource.Resource hn entry.EntryHandler 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 { - return &BaseRequestHandler{ + h := &BaseRequestHandler{ cfgTemplate: cfg, rs: rs, hn: hn, rp: rp, 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) { @@ -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 { + 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 = en.WithPersister(pr) + en = en.WithFirst(f.hn.Init) + if f.cfgTemplate.EngineDebug { + en = en.WithDebug(nil) + } return en } func (f *BaseRequestHandler) Process(rqs RequestSession) (RequestSession, error) { var r bool var err error - var ok bool logg.InfoCtxf(rqs.Ctx, "new request", "data", rqs) @@ -57,27 +73,12 @@ func (f *BaseRequestHandler) Process(rqs RequestSession) (RequestSession, error) return rqs, errors.ErrStorage } - //f.hn = f.hn.WithPersister(rqs.Storage.Persister) f.hn.SetPersister(rqs.Storage.Persister) defer func() { 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) if err != nil { perr := f.provider.Put(rqs.Ctx, rqs.Config.SessionId, rqs.Storage)