package main import ( "database/sql" "encoding/json" "net/http" "strconv" "github.com/gorilla/mux" ) func (a *App) getDevice(w http.ResponseWriter, r *http.Request) { vars := mux.Vars(r) id, err := strconv.Atoi(vars["id"]) if err != nil { respondWithError(w, http.StatusBadRequest, "Invalid config ID") return } c := Device{ID: id} if err := c.getDevice(a.DB); err != nil { switch err { case sql.ErrNoRows: respondWithError(w, http.StatusNotFound, "Device not found") default: respondWithError(w, http.StatusInternalServerError, err.Error()) } return } respondWithJSON(w, http.StatusOK, c) } func (a *App) getDevices(w http.ResponseWriter, r *http.Request) { count, _ := strconv.Atoi(r.FormValue("count")) start, _ := strconv.Atoi(r.FormValue("start")) if count > 10 || count < 1 { count = 10 } if start < 0 { start = 0 } configs, err := getDevices(a.DB, start, count) if err != nil { respondWithError(w, http.StatusInternalServerError, err.Error()) return } respondWithJSON(w, http.StatusOK, configs) } func (a *App) createDevice(w http.ResponseWriter, r *http.Request) { var c Device decoder := json.NewDecoder(r.Body) if err := decoder.Decode(&c); err != nil { respondWithError(w, http.StatusBadRequest, "Invalid request payload") return } defer r.Body.Close() if err := c.createDevice(a.DB); err != nil { respondWithError(w, http.StatusInternalServerError, err.Error()) return } respondWithJSON(w, http.StatusCreated, c) } func (a *App) updateDevice(w http.ResponseWriter, r *http.Request) { vars := mux.Vars(r) id, err := strconv.Atoi(vars["id"]) if err != nil { respondWithError(w, http.StatusBadRequest, "Invalid config ID") return } var c Device decoder := json.NewDecoder(r.Body) if err := decoder.Decode(&c); err != nil { respondWithError(w, http.StatusBadRequest, "Invalid request payload") return } defer r.Body.Close() c.ID = id if err := c.updateDevice(a.DB); err != nil { respondWithError(w, http.StatusInternalServerError, err.Error()) return } respondWithJSON(w, http.StatusOK, c) } func (a *App) deleteDevice(w http.ResponseWriter, r *http.Request) { vars := mux.Vars(r) id, err := strconv.Atoi(vars["id"]) if err != nil { respondWithError(w, http.StatusBadRequest, "Invalid Device ID") return } c := Device{ID: id} if err := c.deleteDevice(a.DB); err != nil { respondWithError(w, http.StatusInternalServerError, err.Error()) return } respondWithJSON(w, http.StatusOK, map[string]string{"result": "success"}) }