package main import ( "encoding/json" "log" "net/http" "github.com/gorilla/mux" ) type APIServer struct { Host string Port string Db SQLiteDatabase } type APIError struct { Error string } func WriteJSON(w http.ResponseWriter, status int, v any) error { w.Header().Set("Content-Type", "application/json") w.WriteHeader(status) return json.NewEncoder(w).Encode(v) } func NewAPIServer(cfg Config, database SQLiteDatabase) *APIServer { return &APIServer{ Host: cfg.Host, Db: database, } } func (s *APIServer) Start() { router := mux.NewRouter() router.HandleFunc("/prerace", s.handleCreatePreRace).Methods("POST") router.HandleFunc("/preraces", s.handleGetPreRaces).Methods("GET") router.HandleFunc("/prerace/{id}", s.handleDeletePreRace).Methods("DELETE") router.HandleFunc("/prerace/{id}", s.handleUpdatePreRace).Methods("PUT") router.HandleFunc("/prerace/{id}", s.handleGetPreRaceByID).Methods("GET") log.Println("Listening for new Preraces / Races") http.ListenAndServe(s.Host, router) } func (s *APIServer) handleGetPreRaceByID(w http.ResponseWriter, r *http.Request) { WriteJSON(w, http.StatusOK, mux.Vars(r)) } func (s *APIServer) handleGetPreRaces(w http.ResponseWriter, r *http.Request) { } func (s *APIServer) handleCreatePreRace(w http.ResponseWriter, r *http.Request) { race := NewRace() _ = json.NewDecoder(r.Body).Decode(&race) defer r.Body.Close() race.PreRace = true err := s.Db.CreatePreRace(race) if err != nil { log.Println("Could not create new race in db", err) WriteJSON(w, http.StatusOK, race) } WriteJSON(w, http.StatusOK, "{Error: Error}") } func (s *APIServer) handleDeletePreRace(w http.ResponseWriter, r *http.Request) { } func (s *APIServer) handleUpdatePreRace(w http.ResponseWriter, r *http.Request) { }