api-structs #117
							
								
								
									
										17
									
								
								.env.example
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								.env.example
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,17 @@
 | 
			
		||||
#Serve Http
 | 
			
		||||
PORT=7123
 | 
			
		||||
HOST=127.0.0.1
 | 
			
		||||
 | 
			
		||||
#PostgreSQL
 | 
			
		||||
DB_HOST=localhost
 | 
			
		||||
DB_USER=postgres
 | 
			
		||||
DB_PASSWORD=strongpass
 | 
			
		||||
DB_NAME=urdt_ussd
 | 
			
		||||
DB_PORT=5432
 | 
			
		||||
DB_SSLMODE=disable
 | 
			
		||||
DB_TIMEZONE=Africa/Nairobi
 | 
			
		||||
 | 
			
		||||
#External API Calls
 | 
			
		||||
CREATE_ACCOUNT_URL=https://custodial.sarafu.africa/api/account/create
 | 
			
		||||
TRACK_STATUS_URL=https://custodial.sarafu.africa/api/track/
 | 
			
		||||
BALANCE_URL=https://custodial.sarafu.africa/api/account/status/
 | 
			
		||||
@ -16,6 +16,8 @@ import (
 | 
			
		||||
	"git.defalsify.org/vise.git/logging"
 | 
			
		||||
	"git.defalsify.org/vise.git/resource"
 | 
			
		||||
 | 
			
		||||
	"git.grassecon.net/urdt/ussd/config"
 | 
			
		||||
	"git.grassecon.net/urdt/ussd/initializers"
 | 
			
		||||
	"git.grassecon.net/urdt/ussd/internal/handlers"
 | 
			
		||||
	"git.grassecon.net/urdt/ussd/internal/handlers/server"
 | 
			
		||||
	httpserver "git.grassecon.net/urdt/ussd/internal/http"
 | 
			
		||||
@ -27,6 +29,10 @@ var (
 | 
			
		||||
	scriptDir = path.Join("services", "registration")
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func init() {
 | 
			
		||||
	initializers.LoadEnvVariables()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type atRequestParser struct{}
 | 
			
		||||
 | 
			
		||||
func (arp *atRequestParser) GetSessionId(rq any) (string, error) {
 | 
			
		||||
@ -66,23 +72,28 @@ func (arp *atRequestParser) GetInput(rq any) ([]byte, error) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func main() {
 | 
			
		||||
	config.LoadConfig()
 | 
			
		||||
 | 
			
		||||
	var dbDir string
 | 
			
		||||
	var resourceDir string
 | 
			
		||||
	var size uint
 | 
			
		||||
	var database string
 | 
			
		||||
	var engineDebug bool
 | 
			
		||||
	var host string
 | 
			
		||||
	var port uint
 | 
			
		||||
	flag.StringVar(&dbDir, "dbdir", ".state", "database dir to read from")
 | 
			
		||||
	flag.StringVar(&resourceDir, "resourcedir", path.Join("services", "registration"), "resource dir")
 | 
			
		||||
	flag.StringVar(&database, "db", "gdbm", "database to be used")
 | 
			
		||||
	flag.BoolVar(&engineDebug, "d", false, "use engine debug output")
 | 
			
		||||
	flag.UintVar(&size, "s", 160, "max size of output")
 | 
			
		||||
	flag.StringVar(&host, "h", "127.0.0.1", "http host")
 | 
			
		||||
	flag.UintVar(&port, "p", 7123, "http port")
 | 
			
		||||
	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()
 | 
			
		||||
 | 
			
		||||
	logg.Infof("start command", "dbdir", dbDir, "resourcedir", resourceDir, "outputsize", size)
 | 
			
		||||
 | 
			
		||||
	ctx := context.Background()
 | 
			
		||||
	ctx = context.WithValue(ctx, "Database", database)
 | 
			
		||||
	pfp := path.Join(scriptDir, "pp.csv")
 | 
			
		||||
 | 
			
		||||
	cfg := engine.Config{
 | 
			
		||||
 | 
			
		||||
@ -13,6 +13,8 @@ import (
 | 
			
		||||
	"git.defalsify.org/vise.git/logging"
 | 
			
		||||
	"git.defalsify.org/vise.git/resource"
 | 
			
		||||
 | 
			
		||||
	"git.grassecon.net/urdt/ussd/config"
 | 
			
		||||
	"git.grassecon.net/urdt/ussd/initializers"
 | 
			
		||||
	"git.grassecon.net/urdt/ussd/internal/handlers"
 | 
			
		||||
	"git.grassecon.net/urdt/ussd/internal/handlers/server"
 | 
			
		||||
	"git.grassecon.net/urdt/ussd/internal/storage"
 | 
			
		||||
@ -23,6 +25,10 @@ var (
 | 
			
		||||
	scriptDir = path.Join("services", "registration")
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func init() {
 | 
			
		||||
	initializers.LoadEnvVariables()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type asyncRequestParser struct {
 | 
			
		||||
	sessionId string
 | 
			
		||||
	input     []byte
 | 
			
		||||
@ -37,25 +43,30 @@ func (p *asyncRequestParser) GetInput(r any) ([]byte, error) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func main() {
 | 
			
		||||
	config.LoadConfig()
 | 
			
		||||
 | 
			
		||||
	var sessionId string
 | 
			
		||||
	var dbDir string
 | 
			
		||||
	var resourceDir string
 | 
			
		||||
	var size uint
 | 
			
		||||
	var database string
 | 
			
		||||
	var engineDebug bool
 | 
			
		||||
	var host string
 | 
			
		||||
	var port uint
 | 
			
		||||
	flag.StringVar(&sessionId, "session-id", "075xx2123", "session id")
 | 
			
		||||
	flag.StringVar(&dbDir, "dbdir", ".state", "database dir to read from")
 | 
			
		||||
	flag.StringVar(&resourceDir, "resourcedir", path.Join("services", "registration"), "resource dir")
 | 
			
		||||
	flag.StringVar(&database, "db", "gdbm", "database to be used")
 | 
			
		||||
	flag.BoolVar(&engineDebug, "d", false, "use engine debug output")
 | 
			
		||||
	flag.UintVar(&size, "s", 160, "max size of output")
 | 
			
		||||
	flag.StringVar(&host, "h", "127.0.0.1", "http host")
 | 
			
		||||
	flag.UintVar(&port, "p", 7123, "http port")
 | 
			
		||||
	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()
 | 
			
		||||
 | 
			
		||||
	logg.Infof("start command", "dbdir", dbDir, "resourcedir", resourceDir, "outputsize", size, "sessionId", sessionId)
 | 
			
		||||
 | 
			
		||||
	ctx := context.Background()
 | 
			
		||||
	ctx = context.WithValue(ctx, "Database", database)
 | 
			
		||||
	pfp := path.Join(scriptDir, "pp.csv")
 | 
			
		||||
 | 
			
		||||
	cfg := engine.Config{
 | 
			
		||||
 | 
			
		||||
@ -15,6 +15,8 @@ import (
 | 
			
		||||
	"git.defalsify.org/vise.git/logging"
 | 
			
		||||
	"git.defalsify.org/vise.git/resource"
 | 
			
		||||
 | 
			
		||||
	"git.grassecon.net/urdt/ussd/config"
 | 
			
		||||
	"git.grassecon.net/urdt/ussd/initializers"
 | 
			
		||||
	"git.grassecon.net/urdt/ussd/internal/handlers"
 | 
			
		||||
	"git.grassecon.net/urdt/ussd/internal/handlers/server"
 | 
			
		||||
	httpserver "git.grassecon.net/urdt/ussd/internal/http"
 | 
			
		||||
@ -26,24 +28,33 @@ var (
 | 
			
		||||
	scriptDir = path.Join("services", "registration")
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func init() {
 | 
			
		||||
	initializers.LoadEnvVariables()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func main() {
 | 
			
		||||
	config.LoadConfig()
 | 
			
		||||
 | 
			
		||||
	var dbDir string
 | 
			
		||||
	var resourceDir string
 | 
			
		||||
	var size uint
 | 
			
		||||
	var database string
 | 
			
		||||
	var engineDebug bool
 | 
			
		||||
	var host string
 | 
			
		||||
	var port uint
 | 
			
		||||
	flag.StringVar(&dbDir, "dbdir", ".state", "database dir to read from")
 | 
			
		||||
	flag.StringVar(&resourceDir, "resourcedir", path.Join("services", "registration"), "resource dir")
 | 
			
		||||
	flag.StringVar(&database, "db", "gdbm", "database to be used")
 | 
			
		||||
	flag.BoolVar(&engineDebug, "d", false, "use engine debug output")
 | 
			
		||||
	flag.UintVar(&size, "s", 160, "max size of output")
 | 
			
		||||
	flag.StringVar(&host, "h", "127.0.0.1", "http host")
 | 
			
		||||
	flag.UintVar(&port, "p", 7123, "http port")
 | 
			
		||||
	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()
 | 
			
		||||
 | 
			
		||||
	logg.Infof("start command", "dbdir", dbDir, "resourcedir", resourceDir, "outputsize", size)
 | 
			
		||||
 | 
			
		||||
	ctx := context.Background()
 | 
			
		||||
	ctx = context.WithValue(ctx, "Database", database)
 | 
			
		||||
	pfp := path.Join(scriptDir, "pp.csv")
 | 
			
		||||
 | 
			
		||||
	cfg := engine.Config{
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										11
									
								
								cmd/main.go
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								cmd/main.go
									
									
									
									
									
								
							@ -10,6 +10,8 @@ import (
 | 
			
		||||
	"git.defalsify.org/vise.git/engine"
 | 
			
		||||
	"git.defalsify.org/vise.git/logging"
 | 
			
		||||
	"git.defalsify.org/vise.git/resource"
 | 
			
		||||
	"git.grassecon.net/urdt/ussd/config"
 | 
			
		||||
	"git.grassecon.net/urdt/ussd/initializers"
 | 
			
		||||
	"git.grassecon.net/urdt/ussd/internal/handlers"
 | 
			
		||||
	"git.grassecon.net/urdt/ussd/internal/handlers/server"
 | 
			
		||||
	"git.grassecon.net/urdt/ussd/internal/storage"
 | 
			
		||||
@ -20,12 +22,20 @@ var (
 | 
			
		||||
	scriptDir = path.Join("services", "registration")
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func init() {
 | 
			
		||||
	initializers.LoadEnvVariables()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func main() {
 | 
			
		||||
	config.LoadConfig()
 | 
			
		||||
 | 
			
		||||
	var dbDir string
 | 
			
		||||
	var size uint
 | 
			
		||||
	var sessionId string
 | 
			
		||||
	var database string
 | 
			
		||||
	var engineDebug bool
 | 
			
		||||
	flag.StringVar(&sessionId, "session-id", "075xx2123", "session id")
 | 
			
		||||
	flag.StringVar(&database, "db", "gdbm", "database to be used")
 | 
			
		||||
	flag.StringVar(&dbDir, "dbdir", ".state", "database dir to read from")
 | 
			
		||||
	flag.BoolVar(&engineDebug, "d", false, "use engine debug output")
 | 
			
		||||
	flag.UintVar(&size, "s", 160, "max size of output")
 | 
			
		||||
@ -35,6 +45,7 @@ func main() {
 | 
			
		||||
 | 
			
		||||
	ctx := context.Background()
 | 
			
		||||
	ctx = context.WithValue(ctx, "SessionId", sessionId)
 | 
			
		||||
	ctx = context.WithValue(ctx, "Database", database)
 | 
			
		||||
	pfp := path.Join(scriptDir, "pp.csv")
 | 
			
		||||
 | 
			
		||||
	cfg := engine.Config{
 | 
			
		||||
 | 
			
		||||
@ -1,7 +1,16 @@
 | 
			
		||||
package config
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	CreateAccountURL = "http://localhost:5003/api/v2/account/create"
 | 
			
		||||
	BalanceURL       = "https://custodial.sarafu.africa/api/account/status/"
 | 
			
		||||
	TrackURL         = "http://localhost:5003/api/v2/account/status"
 | 
			
		||||
import "git.grassecon.net/urdt/ussd/initializers"
 | 
			
		||||
 | 
			
		||||
var (
 | 
			
		||||
	CreateAccountURL string
 | 
			
		||||
	TrackStatusURL   string
 | 
			
		||||
	BalanceURL       string
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// LoadConfig initializes the configuration values after environment variables are loaded.
 | 
			
		||||
func LoadConfig() {
 | 
			
		||||
	CreateAccountURL = initializers.GetEnv("CREATE_ACCOUNT_URL", "https://custodial.sarafu.africa/api/account/create")
 | 
			
		||||
	TrackStatusURL = initializers.GetEnv("TRACK_STATUS_URL", "https://custodial.sarafu.africa/api/track/")
 | 
			
		||||
	BalanceURL = initializers.GetEnv("BALANCE_URL", "https://custodial.sarafu.africa/api/account/status/")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										4
									
								
								go.mod
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								go.mod
									
									
									
									
									
								
							@ -5,13 +5,15 @@ go 1.23.0
 | 
			
		||||
toolchain go1.23.2
 | 
			
		||||
 | 
			
		||||
require (
 | 
			
		||||
	git.defalsify.org/vise.git v0.1.0-rc.3.0.20240923162317-c20d557a3dbb
 | 
			
		||||
	git.defalsify.org/vise.git v0.2.1-0.20241017112704-307fa6fcdc6b
 | 
			
		||||
	github.com/alecthomas/assert/v2 v2.2.2
 | 
			
		||||
	github.com/peteole/testdata-loader v0.3.0
 | 
			
		||||
	gopkg.in/leonelquinteros/gotext.v1 v1.3.1
 | 
			
		||||
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
require github.com/joho/godotenv v1.5.1 // indirect
 | 
			
		||||
 | 
			
		||||
require github.com/grassrootseconomics/eth-custodial v1.3.0-beta // indirect
 | 
			
		||||
 | 
			
		||||
require (
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										6
									
								
								go.sum
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								go.sum
									
									
									
									
									
								
							@ -1,5 +1,9 @@
 | 
			
		||||
git.defalsify.org/vise.git v0.1.0-rc.3.0.20240923162317-c20d557a3dbb h1:6P4kxihcwMjDKzvUFC6t2zGNb7MDW+l/ACGlSAN1N8Y=
 | 
			
		||||
git.defalsify.org/vise.git v0.1.0-rc.3.0.20240923162317-c20d557a3dbb/go.mod h1:JDguWmcoWBdsnpw7PUjVZAEpdC/ubBmjdUBy3tjP63M=
 | 
			
		||||
git.defalsify.org/vise.git v0.2.0 h1:X2ZgiGRq4C+9qOlDMP0b/oE5QHjVQNT4aEFZB88ST0Q=
 | 
			
		||||
git.defalsify.org/vise.git v0.2.0/go.mod h1:JDguWmcoWBdsnpw7PUjVZAEpdC/ubBmjdUBy3tjP63M=
 | 
			
		||||
git.defalsify.org/vise.git v0.2.1-0.20241017112704-307fa6fcdc6b h1:dxBplsIlzJHV+5EH+gzB+w08Blt7IJbb2jeRe1OEjLU=
 | 
			
		||||
git.defalsify.org/vise.git v0.2.1-0.20241017112704-307fa6fcdc6b/go.mod h1:jyBMe1qTYUz3mmuoC9JQ/TvFeW0vTanCUcPu3H8p4Ck=
 | 
			
		||||
github.com/alecthomas/assert/v2 v2.2.2 h1:Z/iVC0xZfWTaFNE6bA3z07T86hd45Xe2eLt6WVy2bbk=
 | 
			
		||||
github.com/alecthomas/assert/v2 v2.2.2/go.mod h1:pXcQ2Asjp247dahGEmsZ6ru0UVwnkhktn7S0bBDLxvQ=
 | 
			
		||||
github.com/alecthomas/participle/v2 v2.0.0 h1:Fgrq+MbuSsJwIkw3fEj9h75vDP0Er5JzepJ0/HNHv0g=
 | 
			
		||||
@ -22,6 +26,8 @@ github.com/graygnuorg/go-gdbm v0.0.0-20220711140707-71387d66dce4 h1:U4kkNYryi/qf
 | 
			
		||||
github.com/graygnuorg/go-gdbm v0.0.0-20220711140707-71387d66dce4/go.mod h1:zpZDgZFzeq9s0MIeB1P50NIEWDFFHSFBohI/NbaTD/Y=
 | 
			
		||||
github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM=
 | 
			
		||||
github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg=
 | 
			
		||||
github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0=
 | 
			
		||||
github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=
 | 
			
		||||
github.com/mattn/kinako v0.0.0-20170717041458-332c0a7e205a h1:0Q3H0YXzMHiciXtRcM+j0jiCe8WKPQHoRgQiRTnfcLY=
 | 
			
		||||
github.com/mattn/kinako v0.0.0-20170717041458-332c0a7e205a/go.mod h1:CdTTBOYzS5E4mWS1N8NWP6AHI19MP0A2B18n3hLzRMk=
 | 
			
		||||
github.com/peteole/testdata-loader v0.3.0 h1:8jckE9KcyNHgyv/VPoaljvKZE0Rqr8+dPVYH6rfNr9I=
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										34
									
								
								initializers/load.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								initializers/load.go
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,34 @@
 | 
			
		||||
package initializers
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"log"
 | 
			
		||||
	"os"
 | 
			
		||||
	"strconv"
 | 
			
		||||
 | 
			
		||||
	"github.com/joho/godotenv"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func LoadEnvVariables() {
 | 
			
		||||
	err := godotenv.Load()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		log.Fatal("Error loading .env file")
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Helper to get environment variables with a default fallback
 | 
			
		||||
func GetEnv(key, defaultVal string) string {
 | 
			
		||||
  if value, exists := os.LookupEnv(key); exists {
 | 
			
		||||
   	return value
 | 
			
		||||
	}
 | 
			
		||||
  return defaultVal
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Helper to safely convert environment variables to uint
 | 
			
		||||
func GetEnvUint(key string, defaultVal uint) uint {
 | 
			
		||||
	if value, exists := os.LookupEnv(key); exists {
 | 
			
		||||
		if parsed, err := strconv.Atoi(value); err == nil && parsed >= 0 {
 | 
			
		||||
			return uint(parsed)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return defaultVal
 | 
			
		||||
}
 | 
			
		||||
@ -8,9 +8,11 @@ import (
 | 
			
		||||
 | 
			
		||||
	"git.defalsify.org/vise.git/db"
 | 
			
		||||
	fsdb "git.defalsify.org/vise.git/db/fs"
 | 
			
		||||
	"git.defalsify.org/vise.git/db/postgres"
 | 
			
		||||
	"git.defalsify.org/vise.git/logging"
 | 
			
		||||
	"git.defalsify.org/vise.git/persist"
 | 
			
		||||
	"git.defalsify.org/vise.git/resource"
 | 
			
		||||
	"git.defalsify.org/vise.git/logging"
 | 
			
		||||
	"git.grassecon.net/urdt/ussd/initializers"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var (
 | 
			
		||||
@ -24,40 +26,86 @@ type StorageService interface {
 | 
			
		||||
	EnsureDbDir() error
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type MenuStorageService struct{
 | 
			
		||||
	dbDir string
 | 
			
		||||
	resourceDir string
 | 
			
		||||
type MenuStorageService struct {
 | 
			
		||||
	dbDir         string
 | 
			
		||||
	resourceDir   string
 | 
			
		||||
	resourceStore db.Db
 | 
			
		||||
	stateStore 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")
 | 
			
		||||
 | 
			
		||||
	return fmt.Sprintf(
 | 
			
		||||
		"postgres://%s:%s@%s:%s/%s",
 | 
			
		||||
		user, password, host, port, dbName,
 | 
			
		||||
	)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func NewMenuStorageService(dbDir string, resourceDir string) *MenuStorageService {
 | 
			
		||||
	return &MenuStorageService{
 | 
			
		||||
		dbDir: dbDir,
 | 
			
		||||
		dbDir:       dbDir,
 | 
			
		||||
		resourceDir: resourceDir,
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (ms *MenuStorageService) GetPersister(ctx context.Context) (*persist.Persister, error) {
 | 
			
		||||
	ms.stateStore = NewThreadGdbmDb()
 | 
			
		||||
	storeFile := path.Join(ms.dbDir, "state.gdbm")
 | 
			
		||||
	err := ms.stateStore.Connect(ctx, storeFile)
 | 
			
		||||
func (ms *MenuStorageService) getOrCreateDb(ctx context.Context, existingDb db.Db, fileName string) (db.Db, error) {
 | 
			
		||||
	database, ok := ctx.Value("Database").(string)
 | 
			
		||||
	if !ok {
 | 
			
		||||
		return nil, fmt.Errorf("failed to select the database")
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if existingDb != nil {
 | 
			
		||||
		return existingDb, nil
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var newDb db.Db
 | 
			
		||||
	var err error
 | 
			
		||||
 | 
			
		||||
	if database == "postgres" {
 | 
			
		||||
		newDb = postgres.NewPgDb()
 | 
			
		||||
		connStr := buildConnStr()
 | 
			
		||||
		err = newDb.Connect(ctx, connStr)
 | 
			
		||||
	} else {
 | 
			
		||||
		newDb = NewThreadGdbmDb()
 | 
			
		||||
		storeFile := path.Join(ms.dbDir, fileName)
 | 
			
		||||
		err = newDb.Connect(ctx, storeFile)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	pr := persist.NewPersister(ms.stateStore)
 | 
			
		||||
	logg.TraceCtxf(ctx, "menu storage service", "persist", pr, "store", ms.stateStore)
 | 
			
		||||
 | 
			
		||||
	return newDb, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (ms *MenuStorageService) GetPersister(ctx context.Context) (*persist.Persister, error) {
 | 
			
		||||
	stateStore, err := ms.GetStateStore(ctx)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	pr := persist.NewPersister(stateStore)
 | 
			
		||||
	logg.TraceCtxf(ctx, "menu storage service", "persist", pr, "store", stateStore)
 | 
			
		||||
	return pr, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (ms *MenuStorageService) GetUserdataDb(ctx context.Context) (db.Db, error) {
 | 
			
		||||
	ms.userDataStore = NewThreadGdbmDb()
 | 
			
		||||
	storeFile := path.Join(ms.dbDir, "userdata.gdbm")
 | 
			
		||||
	err := ms.userDataStore.Connect(ctx, storeFile)
 | 
			
		||||
	if ms.userDataStore != nil {
 | 
			
		||||
		return ms.userDataStore, nil
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	userDataStore, err := ms.getOrCreateDb(ctx, ms.userDataStore, "userdata.gdbm")
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	ms.userDataStore = userDataStore
 | 
			
		||||
	return ms.userDataStore, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -73,14 +121,15 @@ func (ms *MenuStorageService) GetResource(ctx context.Context) (resource.Resourc
 | 
			
		||||
 | 
			
		||||
func (ms *MenuStorageService) GetStateStore(ctx context.Context) (db.Db, error) {
 | 
			
		||||
	if ms.stateStore != nil {
 | 
			
		||||
		panic("set up store when already exists")
 | 
			
		||||
		return ms.stateStore, nil
 | 
			
		||||
	}
 | 
			
		||||
	ms.stateStore = NewThreadGdbmDb()
 | 
			
		||||
	storeFile := path.Join(ms.dbDir, "state.gdbm")
 | 
			
		||||
	err := ms.stateStore.Connect(ctx, storeFile)
 | 
			
		||||
 | 
			
		||||
	stateStore, err := ms.getOrCreateDb(ctx, ms.stateStore, "state.gdbm")
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	ms.stateStore = stateStore
 | 
			
		||||
	return ms.stateStore, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -25,6 +25,7 @@ var (
 | 
			
		||||
func TestEngine(sessionId string) (engine.Engine, func(), chan bool) {
 | 
			
		||||
	ctx := context.Background()
 | 
			
		||||
	ctx = context.WithValue(ctx, "SessionId", sessionId)
 | 
			
		||||
	ctx = context.WithValue(ctx, "Database", "gdbm")
 | 
			
		||||
	pfp := path.Join(scriptDir, "pp.csv")
 | 
			
		||||
 | 
			
		||||
	var eventChannel = make(chan bool)
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user