feat: scaffold go backend foundation

This commit is contained in:
user
2026-04-26 16:14:31 +09:00
parent 2744c37f58
commit 0e232ff405
15 changed files with 633 additions and 13 deletions

37
internal/config/config.go Normal file
View 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
}

View 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)
}
}