package main import ( "log" "net/http" "os" "path/filepath" "teraclone/internal/routes" "teraclone/internal/service" ) func main() { runServer() } func runServer() { port := os.Getenv("PORT") if port == "" { port = "8083" } apiUpstream := os.Getenv("TERACLONE_API_UPSTREAM") if apiUpstream == "" { apiUpstream = "http://127.0.0.1:8082" } sessionUpstream := os.Getenv("TERACLONE_SESSION_UPSTREAM") if sessionUpstream == "" { sessionUpstream = "http://127.0.0.1:8081" } dbPath := os.Getenv("TERACLONE_DB_PATH") if dbPath == "" { dbPath = filepath.Join("data", "teraclone.db") } appService, err := service.NewAppService(dbPath) if err != nil { log.Fatal(err) } defer func() { if closeErr := appService.Close(); closeErr != nil { log.Printf("sqlite close error: %v", closeErr) } }() mux := http.NewServeMux() if err := routes.RegisterWithSessionUpstream(mux, appService, apiUpstream, sessionUpstream); err != nil { log.Fatal(err) } addr := ":" + port log.Printf("server listening on http://localhost%s", addr) if err := http.ListenAndServe(addr, mux); err != nil { log.Fatal(err) } }