diff --git a/.gitignore b/.gitignore index 4bed46b..8e0c165 100644 --- a/.gitignore +++ b/.gitignore @@ -7,4 +7,11 @@ # web (Vite frontend) web/node_modules/ web/dist/ -internal/web/dist/ + +# internal/web/dist: real build output is generated by `make web` and +# gitignored, EXCEPT index.html — a minimal placeholder is committed so +# `go build ./...` (which //go:embed all:dist needs) works on a clean +# clone without npm/CI web-build step. `make web` overwrites the +# placeholder with the real built index.html. +internal/web/dist/* +!internal/web/dist/index.html diff --git a/cmd/server/main.go b/cmd/server/main.go index 67be8b4..308c423 100644 --- a/cmd/server/main.go +++ b/cmd/server/main.go @@ -18,6 +18,14 @@ import ( "github.com/vasyakrg/dns-autoresolver/internal/web" ) +// isAPIPath reports whether path must be routed to the API router rather +// than the SPA. "/api" (no trailing slash) counts as an API path too — +// only strings.HasPrefix(path, "/api/") would otherwise miss it and fall +// through to the SPA fallback. +func isAPIPath(path string) bool { + return path == "/api" || strings.HasPrefix(path, "/api/") +} + func main() { ctx := context.Background() cfg, err := config.Load() @@ -52,7 +60,7 @@ func main() { } mux := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - if strings.HasPrefix(r.URL.Path, "/api/") { + if isAPIPath(r.URL.Path) { apiRouter.ServeHTTP(w, r) return } diff --git a/cmd/server/main_test.go b/cmd/server/main_test.go new file mode 100644 index 0000000..e056b4e --- /dev/null +++ b/cmd/server/main_test.go @@ -0,0 +1,22 @@ +package main + +import "testing" + +func TestIsAPIPath(t *testing.T) { + cases := []struct { + path string + want bool + }{ + {"/api", true}, + {"/api/", true}, + {"/api/domains", true}, + {"/", false}, + {"/domains/xyz", false}, + {"/apix", false}, + } + for _, c := range cases { + if got := isAPIPath(c.path); got != c.want { + t.Errorf("isAPIPath(%q) = %v, want %v", c.path, got, c.want) + } + } +} diff --git a/internal/web/dist/index.html b/internal/web/dist/index.html new file mode 100644 index 0000000..564ee18 --- /dev/null +++ b/internal/web/dist/index.html @@ -0,0 +1 @@ +