// kek-api ist der Aufrufpunkt fuer API-12: startet den bereits fertigen // API-10-Handler (internal/kek) als eigenstaendigen HTTP-Dienst. // REINES WIRING — keine Aenderung an internal/kek/, internal/moduleregistry/ // oder internal/tenant/. package main import ( "context" "log" "net/http" "os" "time" "github.com/jackc/pgx/v5/pgxpool" "gitea.perlbach24.de/scripte/nexarch/internal/flag" "gitea.perlbach24.de/scripte/nexarch/internal/kek" "gitea.perlbach24.de/scripte/nexarch/internal/moduleregistry" "gitea.perlbach24.de/scripte/nexarch/internal/tenant" ) // tenantResolverAdapter erfüllt kek.TenantResolver über den bestehenden // tenant.Registry.GetBySlug-Zugriff — kein neuer Tenant-Code, nur // Signatur-Anpassung. type tenantResolverAdapter struct{ registry *tenant.Registry } func (a tenantResolverAdapter) ResolveTenantID(ctx context.Context, tenantSlug string) (string, error) { t, err := a.registry.GetBySlug(ctx, tenantSlug) if err != nil { return "", err } return t.ID, nil } func requireEnv(name string) string { v := os.Getenv(name) if v == "" { log.Fatalf("%s muss gesetzt sein", name) } return v } func main() { registryDSN := requireEnv("NEXARCH_KEK_REGISTRY_DSN") masterKeyEnvVar := os.Getenv("NEXARCH_KEK_MASTER_KEY_ENV") if masterKeyEnvVar == "" { masterKeyEnvVar = "NEXARCH_KEK_MASTER_KEY" } addr := os.Getenv("NEXARCH_KEK_API_LISTEN_ADDR") if addr == "" { addr = "127.0.0.1:8102" } masterKey, err := kek.LoadMasterKeyFromEnv(masterKeyEnvVar) if err != nil { log.Fatalf("master-key laden: %v", err) } ctx := context.Background() pool, err := pgxpool.New(ctx, registryDSN) if err != nil { log.Fatalf("datenbankverbindung: %v", err) } defer pool.Close() flagStore := flag.NewStore(pool) flagService := flag.NewService(flagStore, 30*time.Second) registry := moduleregistry.NewRegistry(pool, flagService) tenantRegistry := tenant.NewRegistry(pool) store := kek.NewStore(pool) handler := kek.NewHandler(store, masterKey, registry, registry, tenantResolverAdapter{registry: tenantRegistry}) mux := http.NewServeMux() mux.HandleFunc("/healthz", func(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusOK) }) mux.HandleFunc("/internal/kek/tenant", handler.TenantKEKHandler) log.Printf("kek-api: listening on %s", addr) if err := http.ListenAndServe(addr, mux); err != nil { log.Fatalf("http server: %v", err) } }