feat: initial commit
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"net/http"
|
||||
|
||||
"github.com/FernandoVideira/LK_API_Temp/internal/store"
|
||||
)
|
||||
|
||||
type CreateCommentPayload struct {
|
||||
Content string `json:"content" validate:"required, max=1000"`
|
||||
}
|
||||
|
||||
// CreateComment godo
|
||||
//
|
||||
// @Summary Creates a new Comment
|
||||
// @Description Creates a new Comment
|
||||
// @Tags comments
|
||||
// @Accept json
|
||||
// @Produce json
|
||||
// @Param id path int true "Post ID"
|
||||
// @Success 200 {object} store.Comment
|
||||
// @Failure 400 {object} error
|
||||
// @Failure 404 {object} error
|
||||
// @Failure 500 {object} error
|
||||
// @Security ApiKeyAuth
|
||||
// @Router /posts/{id}/comments [post]
|
||||
func (api *api) createCommentHandler(w http.ResponseWriter, r *http.Request) {
|
||||
var payload CreateCommentPayload
|
||||
if err := readJSON(w, r, &payload); err != nil {
|
||||
api.badRequestError(w, r, err)
|
||||
return
|
||||
}
|
||||
|
||||
if err := Validate.Struct(payload); err != nil {
|
||||
api.badRequestError(w, r, err)
|
||||
return
|
||||
}
|
||||
|
||||
post := getPostFromContext(r)
|
||||
if post == nil {
|
||||
api.notFoundError(w, r, errors.New("post not found"))
|
||||
return
|
||||
}
|
||||
|
||||
user := getUserFromContext(r)
|
||||
|
||||
comment := &store.Comment{
|
||||
PostID: post.ID,
|
||||
UserID: user.ID,
|
||||
Content: payload.Content,
|
||||
}
|
||||
|
||||
if err := api.store.Comments.Create(r.Context(), comment); err != nil {
|
||||
api.internalServerError(w, r, err)
|
||||
return
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user