github.com/ngocphuongnb/tetua@v0.0.7-alpha/app/web/comment/comment.go (about) 1 package webcomment 2 3 import ( 4 "fmt" 5 "net/http" 6 7 "github.com/ngocphuongnb/tetua/app/entities" 8 "github.com/ngocphuongnb/tetua/app/repositories" 9 "github.com/ngocphuongnb/tetua/app/server" 10 "github.com/ngocphuongnb/tetua/app/utils" 11 "github.com/ngocphuongnb/tetua/views" 12 ) 13 14 func List(c server.Context) error { 15 paginate, err := repositories.Comment.PaginateWithPost(c.Context(), &entities.CommentFilter{ 16 Filter: &entities.Filter{ 17 BaseUrl: utils.Url("/comments"), 18 Page: c.QueryInt("page"), 19 IgnoreUrlParams: []string{"user"}, 20 }, 21 UserIDs: []int{c.User().ID}, 22 }) 23 24 if err != nil { 25 c.WithError("Something went wrong", err) 26 } 27 28 return c.Render(views.CommentList(paginate)) 29 } 30 31 func Save(c server.Context) (err error) { 32 data := getCommentSaveData(c) 33 postID := data.PostID 34 35 if c.Messages().HasError() { 36 return c.Status(http.StatusBadRequest).Json(c.Messages()) 37 } 38 39 if data.ID == 0 { 40 data.UserID = c.User().ID 41 data, err = repositories.Comment.Create(c.Context(), data) 42 } else { 43 data, err = repositories.Comment.Update(c.Context(), data) 44 } 45 46 if err != nil { 47 c.WithError("Error saving comment", err) 48 return c.Status(http.StatusInternalServerError).SendString("Error saving comment") 49 } 50 51 return c.Redirect(fmt.Sprintf("/post-%d.html#comment-%d", postID, data.ID)) 52 } 53 54 func Delete(c server.Context) error { 55 if err := repositories.Comment.DeleteByID(c.Context(), c.ParamInt("id")); err != nil { 56 c.Logger().Error("Error deleting comment", err) 57 return c.Status(http.StatusBadRequest).Json(&entities.Message{ 58 Type: "error", 59 Message: "Error deleting comment", 60 }) 61 } 62 63 return c.Status(http.StatusOK).Json(&entities.Message{ 64 Type: "success", 65 Message: "Post deleted", 66 }) 67 } 68 69 func getCommentSaveData(c server.Context) *entities.Comment { 70 var err error 71 data := &entities.CommentMutation{} 72 if err = c.BodyParser(data); err != nil { 73 c.WithError("Error parsing body", err) 74 75 return &entities.Comment{} 76 } 77 78 post, err := repositories.Post.ByID(c.Context(), data.PostID) 79 80 if post == nil || err != nil { 81 c.WithError("Invalid post ID", err) 82 } 83 84 if data.ParentID > 0 { 85 parent, err := repositories.Comment.ByID(c.Context(), data.ParentID) 86 87 if parent == nil || err != nil { 88 c.WithError("Invalid parent ID", err) 89 } 90 } 91 92 if data.Content == "" { 93 c.Messages().AppendError("Content is required") 94 } 95 96 comment := &entities.Comment{ 97 ID: c.ParamInt("id"), 98 Content: utils.SanitizeMarkdown(data.Content), 99 PostID: data.PostID, 100 ParentID: data.ParentID, 101 } 102 103 if comment.ContentHTML, err = utils.MarkdownToHtml(data.Content); err != nil { 104 c.WithError("Error convert markdown to html", err) 105 } 106 107 return comment 108 }