GoRacerr/api.go

79 lines
1.8 KiB
Go
Raw Normal View History

2024-08-30 12:36:47 +07:00
package main
import (
"encoding/json"
"log"
"net/http"
"github.com/gorilla/mux"
)
type APIServer struct {
Host string
Port string
2024-08-30 18:02:07 +07:00
Db SQLiteDatabase
2024-08-30 12:36:47 +07:00
}
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)
}
2024-08-30 18:02:07 +07:00
func NewAPIServer(cfg Config, database SQLiteDatabase) *APIServer {
2024-08-30 12:36:47 +07:00
return &APIServer{
Host: cfg.Host,
2024-08-30 18:02:07 +07:00
Db: database,
2024-08-30 12:36:47 +07:00
}
}
func (s *APIServer) Start() {
router := mux.NewRouter()
router.HandleFunc("/prerace", s.handleCreatePreRace).Methods("POST")
router.HandleFunc("/preraces", s.handleGetPreRaces).Methods("GET")
2024-08-30 18:02:07 +07:00
router.HandleFunc("/prerace/{id}", s.handleDeletePreRace).Methods("DELETE")
router.HandleFunc("/prerace/{id}", s.handleUpdatePreRace).Methods("PUT")
router.HandleFunc("/prerace/{id}", s.handleGetPreRaceByID).Methods("GET")
2024-08-30 12:36:47 +07:00
log.Println("Listening for new Preraces / Races")
http.ListenAndServe(s.Host, router)
}
func (s *APIServer) handleGetPreRaceByID(w http.ResponseWriter, r *http.Request) {
2024-08-30 18:02:07 +07:00
WriteJSON(w, http.StatusOK, mux.Vars(r))
2024-08-30 12:36:47 +07:00
}
func (s *APIServer) handleGetPreRaces(w http.ResponseWriter, r *http.Request) {
}
func (s *APIServer) handleCreatePreRace(w http.ResponseWriter, r *http.Request) {
2024-08-30 18:02:07 +07:00
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}")
2024-08-30 12:36:47 +07:00
}
func (s *APIServer) handleDeletePreRace(w http.ResponseWriter, r *http.Request) {
}
func (s *APIServer) handleUpdatePreRace(w http.ResponseWriter, r *http.Request) {
}