package main import ( "encoding/json" "log" "net/http" ) func main() { mux := http.NewServeMux() setupRoutes(mux) server := http.Server{ Addr: ":4000", Handler: mux, } log.Printf("Starting server on port 4000...") log.Fatal(server.ListenAndServe()) } func setupRoutes(mux *http.ServeMux) { counter := 0 // API Routes mux.HandleFunc("/api/status", func(w http.ResponseWriter, r *http.Request) { if r.Method != http.MethodGet { http.Error(w, "Method not allowed", http.StatusMethodNotAllowed) return } w.Header().Set("Content-Type", "application/json") err := json.NewEncoder(w).Encode("ok") if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } }) mux.HandleFunc("/api/value", func(w http.ResponseWriter, r *http.Request) { if r.Method != http.MethodGet { http.Error(w, "Method not allowed", http.StatusMethodNotAllowed) return } w.Header().Set("Content-Type", "application/json") err := json.NewEncoder(w).Encode(counter) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } }) mux.HandleFunc("/api/increment", func(w http.ResponseWriter, r *http.Request) { if r.Method != http.MethodPost { http.Error(w, "Method not allowed", http.StatusMethodNotAllowed) return } counter++ w.Header().Set("Content-Type", "application/json") err := json.NewEncoder(w).Encode(counter) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } }) mux.HandleFunc("/api/decrement", func(w http.ResponseWriter, r *http.Request) { if r.Method != http.MethodPost { http.Error(w, "Method not allowed", http.StatusMethodNotAllowed) return } counter++ w.Header().Set("Content-Type", "application/json") err := json.NewEncoder(w).Encode(counter) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } }) // Static Files mux.Handle("/", http.FileServer((http.Dir("./dist/")))) }