feat: scaffold go backend foundation
This commit is contained in:
37
internal/config/config.go
Normal file
37
internal/config/config.go
Normal file
@@ -0,0 +1,37 @@
|
||||
package config
|
||||
|
||||
import "os"
|
||||
|
||||
const (
|
||||
defaultHTTPAddr = ":8080"
|
||||
defaultEnvironment = "development"
|
||||
defaultModelKey = "deepseek-v4-flash"
|
||||
defaultThirdOneBin = "thirdone"
|
||||
defaultWorkflowRuntime = ""
|
||||
)
|
||||
|
||||
type Config struct {
|
||||
HTTPAddr string
|
||||
Environment string
|
||||
WorkflowRuntime string
|
||||
ModelKey string
|
||||
ThirdOneBin string
|
||||
}
|
||||
|
||||
func LoadFromEnv() Config {
|
||||
return Config{
|
||||
HTTPAddr: envOrDefault("TUTOR_HTTP_ADDR", defaultHTTPAddr),
|
||||
Environment: envOrDefault("TUTOR_ENV", defaultEnvironment),
|
||||
WorkflowRuntime: envOrDefault("TUTOR_WORKFLOW_RUNTIME", defaultWorkflowRuntime),
|
||||
ModelKey: envOrDefault("TUTOR_MODEL_KEY", defaultModelKey),
|
||||
ThirdOneBin: envOrDefault("THIRDONE_BIN", defaultThirdOneBin),
|
||||
}
|
||||
}
|
||||
|
||||
func envOrDefault(key string, fallback string) string {
|
||||
value := os.Getenv(key)
|
||||
if value == "" {
|
||||
return fallback
|
||||
}
|
||||
return value
|
||||
}
|
||||
52
internal/config/config_test.go
Normal file
52
internal/config/config_test.go
Normal file
@@ -0,0 +1,52 @@
|
||||
package config
|
||||
|
||||
import "testing"
|
||||
|
||||
func TestLoadFromEnvDefaults(t *testing.T) {
|
||||
t.Setenv("TUTOR_HTTP_ADDR", "")
|
||||
t.Setenv("TUTOR_ENV", "")
|
||||
t.Setenv("TUTOR_WORKFLOW_RUNTIME", "")
|
||||
t.Setenv("TUTOR_MODEL_KEY", "")
|
||||
t.Setenv("THIRDONE_BIN", "")
|
||||
|
||||
cfg := LoadFromEnv()
|
||||
|
||||
if cfg.HTTPAddr != defaultHTTPAddr {
|
||||
t.Fatalf("HTTPAddr = %q, want %q", cfg.HTTPAddr, defaultHTTPAddr)
|
||||
}
|
||||
if cfg.Environment != defaultEnvironment {
|
||||
t.Fatalf("Environment = %q, want %q", cfg.Environment, defaultEnvironment)
|
||||
}
|
||||
if cfg.ModelKey != defaultModelKey {
|
||||
t.Fatalf("ModelKey = %q, want %q", cfg.ModelKey, defaultModelKey)
|
||||
}
|
||||
if cfg.ThirdOneBin != defaultThirdOneBin {
|
||||
t.Fatalf("ThirdOneBin = %q, want %q", cfg.ThirdOneBin, defaultThirdOneBin)
|
||||
}
|
||||
}
|
||||
|
||||
func TestLoadFromEnvOverrides(t *testing.T) {
|
||||
t.Setenv("TUTOR_HTTP_ADDR", ":9090")
|
||||
t.Setenv("TUTOR_ENV", "test")
|
||||
t.Setenv("TUTOR_WORKFLOW_RUNTIME", "runtime.yaml")
|
||||
t.Setenv("TUTOR_MODEL_KEY", "other-model")
|
||||
t.Setenv("THIRDONE_BIN", "C:/bin/thirdone.exe")
|
||||
|
||||
cfg := LoadFromEnv()
|
||||
|
||||
if cfg.HTTPAddr != ":9090" {
|
||||
t.Fatalf("HTTPAddr = %q", cfg.HTTPAddr)
|
||||
}
|
||||
if cfg.Environment != "test" {
|
||||
t.Fatalf("Environment = %q", cfg.Environment)
|
||||
}
|
||||
if cfg.WorkflowRuntime != "runtime.yaml" {
|
||||
t.Fatalf("WorkflowRuntime = %q", cfg.WorkflowRuntime)
|
||||
}
|
||||
if cfg.ModelKey != "other-model" {
|
||||
t.Fatalf("ModelKey = %q", cfg.ModelKey)
|
||||
}
|
||||
if cfg.ThirdOneBin != "C:/bin/thirdone.exe" {
|
||||
t.Fatalf("ThirdOneBin = %q", cfg.ThirdOneBin)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user