forked from grassrootseconomics/visedriver
		
	Merge pull request 'postgres-switch' (#113) from postgres-switch into master
Reviewed-on: urdt/ussd#113
This commit is contained in:
		
						commit
						59d0446020
					
				
							
								
								
									
										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,10 +1,16 @@ | ||||
| package config | ||||
| 
 | ||||
| import "git.grassecon.net/urdt/ussd/initializers" | ||||
| 
 | ||||
| 
 | ||||
| const ( | ||||
|     CreateAccountURL = "https://custodial.sarafu.africa/api/account/create" | ||||
|     TrackStatusURL   = "https://custodial.sarafu.africa/api/track/" | ||||
|     BalanceURL       = "https://custodial.sarafu.africa/api/account/status/" | ||||
| 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
									
									
									
									
									
								
							| @ -3,12 +3,14 @@ module git.grassecon.net/urdt/ussd | ||||
| go 1.22.6 | ||||
| 
 | ||||
| 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/alecthomas/participle/v2 v2.0.0 // indirect | ||||
| 	github.com/alecthomas/repr v0.2.0 // indirect | ||||
|  | ||||
							
								
								
									
										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= | ||||
| @ -18,6 +22,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,14 +8,16 @@ 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 ( | ||||
| 	logg = logging.NewVanilla().WithDomain("storage") | ||||
| )	 | ||||
| ) | ||||
| 
 | ||||
| type StorageService interface { | ||||
| 	GetPersister(ctx context.Context) (*persist.Persister, error) | ||||
| @ -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