Skip to content

Instantly share code, notes, and snippets.

@eamonnmcevoy
Last active April 23, 2017 14:18
Show Gist options
  • Save eamonnmcevoy/d9a6529727cf14fcdd2fbf709a82fdb6 to your computer and use it in GitHub Desktop.
Save eamonnmcevoy/d9a6529727cf14fcdd2fbf709a82fdb6 to your computer and use it in GitHub Desktop.
package server
import (
"encoding/json"
"errors"
"go_web_server/pkg"
"log"
"net/http"
"github.com/gorilla/mux"
)
type userRouter struct {
userService root.UserService
}
func NewUserRouter(u root.UserService, router *mux.Router) *mux.Router {
userRouter := userRouter{u}
router.HandleFunc("/", userRouter.createUserHandler).Methods("PUT")
router.HandleFunc("/{username}", userRouter.getUserHandler).Methods("GET")
return router
}
func (ur *userRouter) createUserHandler(w http.ResponseWriter, r *http.Request) {
user, err := decodeUser(r)
if err != nil {
Error(w, http.StatusBadRequest, "Invalid request payload")
return
}
err = ur.userService.Create(&user)
if err != nil {
Error(w, http.StatusInternalServerError, err.Error())
return
}
Json(w, http.StatusOK, err)
}
func (ur *userRouter) getUserHandler(w http.ResponseWriter, r *http.Request) {
vars := mux.Vars(r)
log.Println(vars)
username := vars["username"]
user, err := ur.userService.GetByUsername(username)
if err != nil {
Error(w, http.StatusNotFound, err.Error())
return
}
Json(w, http.StatusOK, user)
}
func decodeUser(ur *http.Request) (root.User, error) {
var u root.User
if r.Body == nil {
return u, errors.New("no request body")
}
decoder := json.NewDecoder(r.Body)
err := decoder.Decode(&u)
return u, err
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment