package mood import ( "encoding/json" "log" "net/http" "github.com/gorilla/mux" ) type MoodRouter struct{} func NewMoodRouter() *MoodRouter { return &MoodRouter{} } func (u *MoodRouter) RegisterRoutes(r *mux.Router) { r.Path("/").Methods(http.MethodGet).HandlerFunc(u.GetAll) r.Path("/{id}").Methods(http.MethodGet).HandlerFunc(u.Get) r.PathPrefix("/").Methods(http.MethodPost).HandlerFunc(u.Post) r.PathPrefix("/{id}").Methods(http.MethodPut).HandlerFunc(u.Put) r.Path("/{id}").Methods(http.MethodDelete).HandlerFunc(u.Delete) } func (u *MoodRouter) Get(rw http.ResponseWriter, r *http.Request) { vars := mux.Vars(r) mood, err := findById(r.Context(), vars["id"]) if err != nil { log.Printf("error finding mood by id: %s", err) rw.WriteHeader(http.StatusInternalServerError) return } bytes, err := json.Marshal(mood) if err != nil { log.Printf("error marshaling mood: %s", err) rw.WriteHeader(http.StatusInternalServerError) return } rw.Header().Set("Content-Type", "application/json") rw.Write(bytes) } func (u *MoodRouter) GetAll(rw http.ResponseWriter, r *http.Request) { mood, err := findAll(r.Context()) if err != nil { log.Printf("error finding moods: %s", err) rw.WriteHeader(http.StatusInternalServerError) return } bytes, err := json.Marshal(mood) if err != nil { log.Printf("error marshaling moods: %s", err) rw.WriteHeader(http.StatusInternalServerError) return } rw.Header().Set("Content-Type", "application/json") rw.Write(bytes) } func (u *MoodRouter) Post(rw http.ResponseWriter, r *http.Request) { var mood Mood err := json.NewDecoder(r.Body).Decode(&mood) if err != nil { log.Printf("error decoding mood: %s", err) rw.WriteHeader(http.StatusInternalServerError) return } mood, err = create(r.Context(), &mood) if err != nil { log.Printf("error creating mood: %s", err) rw.WriteHeader(http.StatusInternalServerError) return } bytes, err := json.Marshal(mood) if err != nil { log.Printf("error marshaling mood: %s", err) rw.WriteHeader(http.StatusInternalServerError) return } rw.Header().Set("Content-Type", "application/json") rw.Write(bytes) } func (u *MoodRouter) Put(rw http.ResponseWriter, r *http.Request) { vars := mux.Vars(r) var mood Mood err := json.NewDecoder(r.Body).Decode(&mood) if err != nil { log.Printf("error decoding mood: %s", err) rw.WriteHeader(http.StatusInternalServerError) return } mood, err = update(r.Context(), vars["id"], &mood) if err != nil { log.Printf("error creating mood: %s", err) rw.WriteHeader(http.StatusInternalServerError) return } bytes, err := json.Marshal(mood) if err != nil { log.Printf("error marshaling mood: %s", err) rw.WriteHeader(http.StatusInternalServerError) return } rw.Header().Set("Content-Type", "application/json") rw.Write(bytes) } func (u *MoodRouter) Delete(rw http.ResponseWriter, r *http.Request) { vars := mux.Vars(r) err := delete(r.Context(), vars["id"]) if err != nil { log.Printf("error finding mood by id: %s", err) rw.WriteHeader(http.StatusInternalServerError) return } rw.Header().Set("Content-Type", "application/json") rw.WriteHeader(http.StatusOK) }