package graph import ( "net/http" "github.com/brasse-b/archivum/internal/config" ) // NewServer wires up the HTTP handler for the GraphQL endpoint. // cfg may be nil when the system has not been configured yet; in that case // every GraphQL request returns {"data":{"systemStatus":"REQUIRE_SETUP"}} so // the frontend can redirect to the Setup Wizard. func NewServer(cfg *config.Config) http.Handler { mux := http.NewServeMux() mux.HandleFunc("/graphql", func(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") w.Header().Set("Access-Control-Allow-Origin", "*") w.Header().Set("Access-Control-Allow-Headers", "Content-Type, Authorization") if r.Method == http.MethodOptions { w.WriteHeader(http.StatusNoContent) return } if cfg == nil { w.WriteHeader(http.StatusOK) _, _ = w.Write([]byte(`{"data":{"systemStatus":"REQUIRE_SETUP"}}`)) return } // TODO: replace with gqlgen handler once generated. w.WriteHeader(http.StatusOK) _, _ = w.Write([]byte(`{"data":{"systemStatus":"OK"}}`)) }) mux.HandleFunc("/health", func(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusOK) }) // Serve the embedded Vue SPA for every other path. mux.Handle("/", http.FileServer(http.Dir("/srv/archivum/ui"))) return mux }