From 450dfa02cc016b525d743a864530581e0372acda Mon Sep 17 00:00:00 2001 From: lash Date: Sat, 4 Jan 2025 20:36:18 +0000 Subject: [PATCH] Refactor to use conndata as menustorageservice conn arg --- cmd/africastalking/main.go | 16 ++++++++-------- cmd/async/main.go | 20 ++++++++++---------- cmd/http/main.go | 24 ++++++++++-------------- cmd/main.go | 23 +++++++++-------------- common/storage.go | 12 ++++++------ config/config.go | 15 +++++++++++++-- devtools/gen/main.go | 26 +++++++++++--------------- devtools/store/main.go | 16 ++++++++-------- internal/storage/parse.go | 10 +++++----- internal/storage/parse_test.go | 25 ++++++++----------------- internal/storage/storageservice.go | 29 ++++------------------------- internal/testutil/engine.go | 7 ++++++- 12 files changed, 98 insertions(+), 125 deletions(-) diff --git a/cmd/africastalking/main.go b/cmd/africastalking/main.go index 8820215..6035fc6 100644 --- a/cmd/africastalking/main.go +++ b/cmd/africastalking/main.go @@ -8,7 +8,6 @@ import ( "os" "os/signal" "path" - "path/filepath" "strconv" "syscall" @@ -55,12 +54,13 @@ func main() { flag.UintVar(&port, "p", initializers.GetEnvUint("PORT", 7123), "http port") flag.Parse() - if connStr == ".state" { - connStr, err = filepath.Abs(connStr) - if err != nil { - fmt.Fprintf(os.Stderr, "auto connstr generate error: %v", err) - os.Exit(1) - } + if connStr != "" { + connStr = config.DbConn + } + connData, err := storage.ToConnData(config.DbConn) + if err != nil { + fmt.Fprintf(os.Stderr, "connstr err: %v", err) + os.Exit(1) } logg.Infof("start command", "build", build, "dbdir", connStr, "resourcedir", resourceDir, "outputsize", size) @@ -81,7 +81,7 @@ func main() { } menuStorageService := storage.NewMenuStorageService(resourceDir) - err = menuStorageService.SetConn(connStr) + menuStorageService = menuStorageService.WithConn(connData) if err != nil { fmt.Fprintf(os.Stderr, err.Error()) os.Exit(1) diff --git a/cmd/async/main.go b/cmd/async/main.go index 8b15031..17ea2a1 100644 --- a/cmd/async/main.go +++ b/cmd/async/main.go @@ -7,7 +7,6 @@ import ( "os" "os/signal" "path" - "path/filepath" "syscall" "git.defalsify.org/vise.git/engine" @@ -47,8 +46,8 @@ func (p *asyncRequestParser) GetInput(r any) ([]byte, error) { func main() { config.LoadConfig() - var sessionId string var connStr string + var sessionId string var resourceDir string var size uint var database string @@ -59,19 +58,20 @@ func main() { flag.StringVar(&sessionId, "session-id", "075xx2123", "session id") flag.StringVar(&resourceDir, "resourcedir", path.Join("services", "registration"), "resource dir") - flag.StringVar(&connStr, "c", ".state", "connection string") + flag.StringVar(&connStr, "c", "", "connection string") flag.BoolVar(&engineDebug, "d", false, "use engine debug output") flag.UintVar(&size, "s", 160, "max size of output") flag.StringVar(&host, "h", initializers.GetEnv("HOST", "127.0.0.1"), "http host") flag.UintVar(&port, "p", initializers.GetEnvUint("PORT", 7123), "http port") flag.Parse() - if connStr == ".state" { - connStr, err = filepath.Abs(connStr) - if err != nil { - fmt.Fprintf(os.Stderr, "auto connstr generate error: %v", err) - os.Exit(1) - } + if connStr != "" { + connStr = config.DbConn + } + connData, err := storage.ToConnData(config.DbConn) + if err != nil { + fmt.Fprintf(os.Stderr, "connstr err: %v", err) + os.Exit(1) } logg.Infof("start command", "connstr", connStr, "resourcedir", resourceDir, "outputsize", size, "sessionId", sessionId) @@ -92,7 +92,7 @@ func main() { } menuStorageService := storage.NewMenuStorageService(resourceDir) - err = menuStorageService.SetConn(connStr) + menuStorageService = menuStorageService.WithConn(connData) if err != nil { fmt.Fprintf(os.Stderr, err.Error()) os.Exit(1) diff --git a/cmd/http/main.go b/cmd/http/main.go index f42d4d9..69a9c90 100644 --- a/cmd/http/main.go +++ b/cmd/http/main.go @@ -8,7 +8,6 @@ import ( "os" "os/signal" "path" - "path/filepath" "strconv" "syscall" @@ -47,19 +46,20 @@ func main() { var err error flag.StringVar(&resourceDir, "resourcedir", path.Join("services", "registration"), "resource dir") - flag.StringVar(&connStr, "c", ".state", "connection string") + flag.StringVar(&connStr, "c", "", "connection string") flag.BoolVar(&engineDebug, "d", false, "use engine debug output") flag.UintVar(&size, "s", 160, "max size of output") flag.StringVar(&host, "h", initializers.GetEnv("HOST", "127.0.0.1"), "http host") flag.UintVar(&port, "p", initializers.GetEnvUint("PORT", 7123), "http port") flag.Parse() - if connStr == ".state" { - connStr, err = filepath.Abs(connStr) - if err != nil { - fmt.Fprintf(os.Stderr, "auto connstr generate error: %v", err) - os.Exit(1) - } + if connStr != "" { + connStr = config.DbConn + } + connData, err := storage.ToConnData(config.DbConn) + if err != nil { + fmt.Fprintf(os.Stderr, "connstr err: %v", err) + os.Exit(1) } logg.Infof("start command", "connstr", connStr, "resourcedir", resourceDir, "outputsize", size) @@ -80,12 +80,8 @@ func main() { } menuStorageService := storage.NewMenuStorageService(resourceDir) - err = menuStorageService.SetConn(connStr) - if err != nil { - fmt.Fprintf(os.Stderr, err.Error()) - os.Exit(1) - } - + menuStorageService = menuStorageService.WithConn(connData) + rs, err := menuStorageService.GetResource(ctx) if err != nil { fmt.Fprintf(os.Stderr, err.Error()) diff --git a/cmd/main.go b/cmd/main.go index 2506012..a475dbe 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -6,7 +6,6 @@ import ( "fmt" "os" "path" - "path/filepath" "git.defalsify.org/vise.git/engine" "git.defalsify.org/vise.git/logging" @@ -39,17 +38,18 @@ func main() { var err error flag.StringVar(&sessionId, "session-id", "075xx2123", "session id") - flag.StringVar(&connStr, "c", ".state", "connection string") + flag.StringVar(&connStr, "c", "", "connection string") flag.BoolVar(&engineDebug, "d", false, "use engine debug output") flag.UintVar(&size, "s", 160, "max size of output") flag.Parse() - if connStr == ".state" { - connStr, err = filepath.Abs(connStr) - if err != nil { - fmt.Fprintf(os.Stderr, "auto connstr generate error: %v", err) - os.Exit(1) - } + if connStr != "" { + connStr = config.DbConn + } + connData, err := storage.ToConnData(config.DbConn) + if err != nil { + fmt.Fprintf(os.Stderr, "connstr err: %v", err) + os.Exit(1) } logg.Infof("start command", "connstr", connStr, "outputsize", size) @@ -69,12 +69,7 @@ func main() { resourceDir := scriptDir menuStorageService := storage.NewMenuStorageService(resourceDir) - - err = menuStorageService.SetConn(connStr) - if err != nil { - fmt.Fprintf(os.Stderr, err.Error()) - os.Exit(1) - } + menuStorageService = menuStorageService.WithConn(connData) rs, err := menuStorageService.GetResource(ctx) if err != nil { diff --git a/common/storage.go b/common/storage.go index c8a4ff2..6ab5211 100644 --- a/common/storage.go +++ b/common/storage.go @@ -23,19 +23,19 @@ type StorageServices interface { GetPersister(ctx context.Context) (*persist.Persister, error) GetUserdataDb(ctx context.Context) (db.Db, error) GetResource(ctx context.Context) (resource.Resource, error) - SetConn(connStr string) error + SetConn(conn storage.ConnData) } type StorageService struct { svc *storage.MenuStorageService } -func NewStorageService(connStr string) (*StorageService, error) { +func NewStorageService(conn storage.ConnData) (*StorageService, error) { svc := &StorageService{ svc: storage.NewMenuStorageService(""), } - err := svc.SetConn(connStr) - return svc, err + svc.SetConn(conn) + return svc, nil } func(ss *StorageService) GetPersister(ctx context.Context) (*persist.Persister, error) { @@ -50,6 +50,6 @@ func(ss *StorageService) GetResource(ctx context.Context) (resource.Resource, er return nil, errors.New("not implemented") } -func(ss *StorageService) SetConn(connStr string) error { - return ss.svc.SetConn(connStr) +func(ss *StorageService) SetConn(conn storage.ConnData) { + ss.svc = ss.svc.WithConn(conn) } diff --git a/config/config.go b/config/config.go index 3a8e8ed..6f2b225 100644 --- a/config/config.go +++ b/config/config.go @@ -34,6 +34,7 @@ var ( VoucherTransfersURL string VoucherDataURL string CheckAliasURL string + DbConn string ) func setBase() error { @@ -43,14 +44,20 @@ func setBase() error { dataURLBase = initializers.GetEnv("DATA_URL_BASE", "http://localhost:5006") BearerToken = initializers.GetEnv("BEARER_TOKEN", "") - _, err = url.JoinPath(custodialURLBase, "/foo") + _, err = url.Parse(custodialURLBase) if err != nil { return err } - _, err = url.JoinPath(dataURLBase, "/bar") + _, err = url.Parse(dataURLBase) if err != nil { return err } + + return nil +} + +func setConn() error { + DbConn = initializers.GetEnv("DB_CONN", "") return nil } @@ -60,6 +67,10 @@ func LoadConfig() error { if err != nil { return err } + err = setConn() + if err != nil { + return err + } CreateAccountURL, _ = url.JoinPath(custodialURLBase, createAccountPath) TrackStatusURL, _ = url.JoinPath(custodialURLBase, trackStatusPath) BalanceURL, _ = url.JoinPath(custodialURLBase, balancePathPrefix) diff --git a/devtools/gen/main.go b/devtools/gen/main.go index 448cc16..272fd9c 100644 --- a/devtools/gen/main.go +++ b/devtools/gen/main.go @@ -7,7 +7,6 @@ import ( "fmt" "os" "path" - "path/filepath" "git.defalsify.org/vise.git/logging" "git.grassecon.net/urdt/ussd/config" @@ -36,19 +35,20 @@ func main() { var err error flag.StringVar(&sessionId, "session-id", "075xx2123", "session id") - flag.StringVar(&connStr, "c", ".", "connection string") + flag.StringVar(&connStr, "c", "", "connection string") flag.BoolVar(&engineDebug, "d", false, "use engine debug output") flag.Parse() - if connStr == "." { - connStr, err = filepath.Abs(".state/state.gdbm") - if err != nil { - fmt.Fprintf(os.Stderr, "auto connstr generate error: %v", err) - os.Exit(1) - } + if connStr != "" { + connStr = config.DbConn + } + connData, err := storage.ToConnData(config.DbConn) + if err != nil { + fmt.Fprintf(os.Stderr, "connstr err: %v", err) + os.Exit(1) } - logg.Infof("start command", "connstr", connStr) + logg.Infof("start command", "conn", connData) ctx := context.Background() ctx = context.WithValue(ctx, "SessionId", sessionId) @@ -56,12 +56,8 @@ func main() { resourceDir := scriptDir menuStorageService := storage.NewMenuStorageService(resourceDir) - err = menuStorageService.SetConn(connStr) - if err != nil { - fmt.Fprintf(os.Stderr, "connection string error: %v", err) - os.Exit(1) - } - + menuStorageService = menuStorageService.WithConn(connData) + store, err := menuStorageService.GetUserdataDb(ctx) if err != nil { fmt.Fprintf(os.Stderr, err.Error()) diff --git a/devtools/store/main.go b/devtools/store/main.go index ed54ba3..da988ad 100644 --- a/devtools/store/main.go +++ b/devtools/store/main.go @@ -6,7 +6,6 @@ import ( "fmt" "os" "path" - "path/filepath" "git.grassecon.net/urdt/ussd/config" "git.grassecon.net/urdt/ussd/initializers" @@ -40,12 +39,13 @@ func main() { flag.BoolVar(&engineDebug, "d", false, "use engine debug output") flag.Parse() - if connStr == "." { - connStr, err = filepath.Abs(".state/state.gdbm") - if err != nil { - fmt.Fprintf(os.Stderr, "auto connstr generate error: %v", err) - os.Exit(1) - } + if connStr != "" { + connStr = config.DbConn + } + connData, err := storage.ToConnData(config.DbConn) + if err != nil { + fmt.Fprintf(os.Stderr, "connstr err: %v", err) + os.Exit(1) } ctx := context.Background() @@ -54,7 +54,7 @@ func main() { resourceDir := scriptDir menuStorageService := storage.NewMenuStorageService(resourceDir) - err = menuStorageService.SetConn(connStr) + menuStorageService = menuStorageService.WithConn(connData) if err != nil { fmt.Fprintf(os.Stderr, "connection string error: %v", err) os.Exit(1) diff --git a/internal/storage/parse.go b/internal/storage/parse.go index a97b938..bb25627 100644 --- a/internal/storage/parse.go +++ b/internal/storage/parse.go @@ -12,16 +12,16 @@ const ( DBTYPE_POSTGRES ) -type connData struct { +type ConnData struct { typ int str string } -func (cd *connData) DbType() int { +func (cd *ConnData) DbType() int { return cd.typ } -func (cd *connData) String() string { +func (cd *ConnData) String() string { return cd.str } @@ -44,8 +44,8 @@ func probeGdbm(s string) (string, bool) { return s, true } -func toConnData(connStr string) (connData, error) { - var o connData +func ToConnData(connStr string) (ConnData, error) { + var o ConnData if connStr == "" { return o, nil diff --git a/internal/storage/parse_test.go b/internal/storage/parse_test.go index d4b8ecb..e18e57c 100644 --- a/internal/storage/parse_test.go +++ b/internal/storage/parse_test.go @@ -5,32 +5,23 @@ import ( ) func TestParseConnStr(t *testing.T) { - svc := NewMenuStorageService("") - err := svc.SetConn("postgres://foo:bar@localhost:5432/baz") + _, err := ToConnData("postgres://foo:bar@localhost:5432/baz") if err != nil { t.Fatal(err) } - err = svc.SetConn("/foo/bar/baz.gdbm") + _, err = ToConnData("/foo/bar") if err != nil { t.Fatal(err) } - err = svc.SetConn("foo/bar/baz.gdbm") + _, err = ToConnData("/foo/bar/") + if err != nil { + t.Fatal(err) + } + _, err = ToConnData("foo/bar") if err == nil { t.Fatalf("expected error") } - err = svc.SetConn("http://foo/bar") - if err == nil { - t.Fatalf("expected error") - } - err = svc.SetConn("foo/bar/baz.txt") - if err == nil { - t.Fatalf("expected error") - } - err = svc.SetConn("/foo/bar") - if err == nil { - t.Fatalf("expected error") - } - err = svc.SetConn("foo/bar") + _, err = ToConnData("http://foo/bar") if err == nil { t.Fatalf("expected error") } diff --git a/internal/storage/storageservice.go b/internal/storage/storageservice.go index c9c138f..e3429bc 100644 --- a/internal/storage/storageservice.go +++ b/internal/storage/storageservice.go @@ -12,7 +12,6 @@ import ( "git.defalsify.org/vise.git/logging" "git.defalsify.org/vise.git/persist" "git.defalsify.org/vise.git/resource" - "git.grassecon.net/urdt/ussd/initializers" gdbmstorage "git.grassecon.net/urdt/ussd/internal/storage/db/gdbm" ) @@ -28,42 +27,22 @@ type StorageService interface { } type MenuStorageService struct { - conn connData + conn ConnData resourceDir string resourceStore db.Db stateStore db.Db userDataStore db.Db } -func buildConnStr() string { - host := initializers.GetEnv("DB_HOST", "localhost") - user := initializers.GetEnv("DB_USER", "postgres") - password := initializers.GetEnv("DB_PASSWORD", "") - dbName := initializers.GetEnv("DB_NAME", "") - port := initializers.GetEnv("DB_PORT", "5432") - - connString := fmt.Sprintf( - "postgres://%s:%s@%s:%s/%s", - user, password, host, port, dbName, - ) - logg.Debugf("pg conn string", "conn", connString) - - return connString -} - func NewMenuStorageService(resourceDir string) *MenuStorageService { return &MenuStorageService{ resourceDir: resourceDir, } } -func (ms *MenuStorageService) SetConn(connStr string) error { - o, err := toConnData(connStr) - if err != nil { - return err - } - ms.conn = o - return nil +func (ms *MenuStorageService) WithConn(conn ConnData) *MenuStorageService { + ms.conn = conn + return ms } func (ms *MenuStorageService) getOrCreateDb(ctx context.Context, existingDb db.Db, section string) (db.Db, error) { diff --git a/internal/testutil/engine.go b/internal/testutil/engine.go index 4234773..3d804ae 100644 --- a/internal/testutil/engine.go +++ b/internal/testutil/engine.go @@ -44,10 +44,15 @@ func TestEngine(sessionId string) (engine.Engine, func(), chan bool) { fmt.Fprintf(os.Stderr, "connstr err: %v", err) os.Exit(1) } + conn, err := storage.ToConnData(connStr) + if err != nil { + fmt.Fprintf(os.Stderr, "connstr parse err: %v", err) + os.Exit(1) + } resourceDir := scriptDir menuStorageService := storage.NewMenuStorageService(resourceDir) - err = menuStorageService.SetConn(connStr) + menuStorageService.WithConn(conn) if err != nil { fmt.Fprintf(os.Stderr, "conn error: %v", err) os.Exit(1)