// VoteComment lets a user upvote a comment func VoteComment(ds *datastore.Datastore) httprouter.Handle { return func(w http.ResponseWriter, r *http.Request, ps httprouter.Params) { user, err := util.Authenticate(r, ds) if err != nil { util.JSONError(w, err, http.StatusUnauthorized) return } postID, err := strconv.Atoi(ps.ByName("post_id")) if err != nil { util.JSONError(w, err, http.StatusBadRequest) return } commentID, err := strconv.Atoi(ps.ByName("comment_id")) if err != nil { util.JSONError(w, err, http.StatusBadRequest) return } voteStatus, err := strconv.ParseBool(ps.ByName("vote")) if err != nil { util.JSONError(w, err, http.StatusBadRequest) return } comment, err := ds.GetComment(commentID) if err != nil { util.JSONError(w, err, http.StatusInternalServerError) return } if postID != comment.PostID { util.JSONError(w, err, http.StatusBadRequest) return } v, err := ds.CheckUserCommentVote(user.ID, commentID) if v == nil { err = ds.SaveVote(model.NewVote("comment", commentID, user.ID, voteStatus)) if err != nil { util.JSONError(w, err, http.StatusInternalServerError) return } return } v.Up = voteStatus err = ds.UpdateVote(v) if err != nil { util.JSONError(w, err, http.StatusInternalServerError) return } w.Header().Set("Content-Type", "application/json") json.NewEncoder(w).Encode(map[string]string{"success": "upvoted comment"}) } }
// CreateComment creates a new post func CreateComment(ds *datastore.Datastore) httprouter.Handle { return func(w http.ResponseWriter, r *http.Request, ps httprouter.Params) { user, err := util.Authenticate(r, ds) if err != nil { util.JSONError(w, err, http.StatusUnauthorized) return } body, err := ioutil.ReadAll(r.Body) if err != nil { util.JSONError(w, err, http.StatusBadRequest) return } var nbd newCommentData err = json.Unmarshal(body, &nbd) if err != nil { util.JSONError(w, err, http.StatusBadRequest) return } num, err := strconv.Atoi(ps.ByName("post_id")) if err != nil { util.JSONError(w, err, http.StatusBadRequest) return } p := &model.Comment{ UserID: user.ID, PostID: num, CommentID: nbd.ParentID, Body: nbd.Body, } err = ds.CreateComment(p) if err != nil { util.JSONError(w, err, http.StatusInternalServerError) return } w.Header().Set("Content-Type", "application/json") json.NewEncoder(w).Encode(map[string]string{"success": "comment submitted"}) } }
// CreateBoard creates a new board func CreateBoard(ds *datastore.Datastore) httprouter.Handle { return func(w http.ResponseWriter, r *http.Request, ps httprouter.Params) { user, err := util.Authenticate(r, ds) if err != nil { util.JSONError(w, err, http.StatusUnauthorized) return } body, err := ioutil.ReadAll(r.Body) if err != nil { util.JSONError(w, err, http.StatusBadRequest) return } var nbd newBoardData err = json.Unmarshal(body, &nbd) if err != nil { util.JSONError(w, err, http.StatusBadRequest) return } b := &model.Board{ Name: nbd.Name, Summary: nbd.Summary, Creator: user.Username, } err = ds.CreateBoard(b) if err != nil { util.JSONError(w, err, http.StatusBadRequest) return } w.Header().Set("Content-Type", "application/json") json.NewEncoder(w).Encode(map[string]string{"success": "board submitted for approval"}) } }