mirror of https://github.com/go-sonic/sonic.git
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
179 lines
5.7 KiB
Go
179 lines
5.7 KiB
Go
package api
|
|
|
|
import (
|
|
"html/template"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
|
|
"github.com/go-sonic/sonic/consts"
|
|
"github.com/go-sonic/sonic/handler/binding"
|
|
"github.com/go-sonic/sonic/model/dto"
|
|
"github.com/go-sonic/sonic/model/param"
|
|
"github.com/go-sonic/sonic/model/property"
|
|
"github.com/go-sonic/sonic/service"
|
|
"github.com/go-sonic/sonic/service/assembler"
|
|
"github.com/go-sonic/sonic/util"
|
|
"github.com/go-sonic/sonic/util/xerr"
|
|
)
|
|
|
|
type SheetHandler struct {
|
|
OptionService service.OptionService
|
|
SheetService service.SheetService
|
|
SheetCommentService service.SheetCommentService
|
|
SheetCommentAssembler assembler.SheetCommentAssembler
|
|
}
|
|
|
|
func NewSheetHandler(
|
|
optionService service.OptionService,
|
|
sheetService service.SheetService,
|
|
sheetCommentService service.SheetCommentService,
|
|
sheetCommentAssembler assembler.SheetCommentAssembler,
|
|
) *SheetHandler {
|
|
return &SheetHandler{
|
|
OptionService: optionService,
|
|
SheetService: sheetService,
|
|
SheetCommentService: sheetCommentService,
|
|
SheetCommentAssembler: sheetCommentAssembler,
|
|
}
|
|
}
|
|
|
|
func (j *SheetHandler) ListTopComment(ctx *gin.Context) (interface{}, error) {
|
|
sheetID, err := util.ParamInt32(ctx, "sheetID")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
pageSize := j.OptionService.GetOrByDefault(ctx, property.CommentPageSize).(int)
|
|
|
|
commentQuery := param.CommentQuery{}
|
|
err = ctx.ShouldBindWith(&commentQuery, binding.CustomFormBinding)
|
|
if err != nil {
|
|
return nil, xerr.WithStatus(err, xerr.StatusBadRequest).WithMsg("Parameter error")
|
|
}
|
|
if commentQuery.Sort != nil && len(commentQuery.Fields) > 0 {
|
|
commentQuery.Sort = ¶m.Sort{
|
|
Fields: []string{"createTime,desc"},
|
|
}
|
|
}
|
|
commentQuery.ContentID = &sheetID
|
|
commentQuery.Keyword = nil
|
|
commentQuery.CommentStatus = consts.CommentStatusPublished.Ptr()
|
|
commentQuery.PageSize = pageSize
|
|
commentQuery.ParentID = util.Int32Ptr(0)
|
|
|
|
comments, totalCount, err := j.SheetCommentService.Page(ctx, commentQuery, consts.CommentTypeSheet)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
_ = j.SheetCommentAssembler.ClearSensitiveField(ctx, comments)
|
|
commenVOs, err := j.SheetCommentAssembler.ConvertToWithHasChildren(ctx, comments)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return dto.NewPage(commenVOs, totalCount, commentQuery.Page), nil
|
|
}
|
|
|
|
func (j *SheetHandler) ListChildren(ctx *gin.Context) (interface{}, error) {
|
|
sheetID, err := util.ParamInt32(ctx, "sheetID")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
parentID, err := util.ParamInt32(ctx, "parentID")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
children, err := j.SheetCommentService.GetChildren(ctx, parentID, sheetID, consts.CommentTypeSheet)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
_ = j.SheetCommentAssembler.ClearSensitiveField(ctx, children)
|
|
return j.SheetCommentAssembler.ConvertToDTOList(ctx, children)
|
|
}
|
|
|
|
func (p *SheetHandler) ListCommentTree(ctx *gin.Context) (interface{}, error) {
|
|
sheetID, err := util.ParamInt32(ctx, "sheetID")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
pageSize := p.OptionService.GetOrByDefault(ctx, property.CommentPageSize).(int)
|
|
|
|
commentQuery := param.CommentQuery{}
|
|
err = ctx.ShouldBindWith(&commentQuery, binding.CustomFormBinding)
|
|
if err != nil {
|
|
return nil, xerr.WithStatus(err, xerr.StatusBadRequest).WithMsg("Parameter error")
|
|
}
|
|
if commentQuery.Sort != nil && len(commentQuery.Fields) > 0 {
|
|
commentQuery.Sort = ¶m.Sort{
|
|
Fields: []string{"createTime,desc"},
|
|
}
|
|
}
|
|
commentQuery.ContentID = &sheetID
|
|
commentQuery.Keyword = nil
|
|
commentQuery.CommentStatus = consts.CommentStatusPublished.Ptr()
|
|
commentQuery.PageSize = pageSize
|
|
commentQuery.ParentID = util.Int32Ptr(0)
|
|
|
|
allComments, err := p.SheetCommentService.GetByContentID(ctx, sheetID, consts.CommentTypeSheet, commentQuery.Sort)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
_ = p.SheetCommentAssembler.ClearSensitiveField(ctx, allComments)
|
|
commentVOs, total, err := p.SheetCommentAssembler.PageConvertToVOs(ctx, allComments, commentQuery.Page)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return dto.NewPage(commentVOs, total, commentQuery.Page), nil
|
|
}
|
|
|
|
func (p *SheetHandler) ListComment(ctx *gin.Context) (interface{}, error) {
|
|
sheetID, err := util.ParamInt32(ctx, "sheetID")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
pageSize := p.OptionService.GetOrByDefault(ctx, property.CommentPageSize).(int)
|
|
|
|
commentQuery := param.CommentQuery{}
|
|
err = ctx.ShouldBindWith(&commentQuery, binding.CustomFormBinding)
|
|
if err != nil {
|
|
return nil, xerr.WithStatus(err, xerr.StatusBadRequest).WithMsg("Parameter error")
|
|
}
|
|
if commentQuery.Sort != nil && len(commentQuery.Fields) > 0 {
|
|
commentQuery.Sort = ¶m.Sort{
|
|
Fields: []string{"createTime,desc"},
|
|
}
|
|
}
|
|
commentQuery.ContentID = &sheetID
|
|
commentQuery.Keyword = nil
|
|
commentQuery.CommentStatus = consts.CommentStatusPublished.Ptr()
|
|
commentQuery.PageSize = pageSize
|
|
commentQuery.ParentID = util.Int32Ptr(0)
|
|
|
|
comments, total, err := p.SheetCommentService.Page(ctx, commentQuery, consts.CommentTypeSheet)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
_ = p.SheetCommentAssembler.ClearSensitiveField(ctx, comments)
|
|
result, err := p.SheetCommentAssembler.ConvertToWithParentVO(ctx, comments)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return dto.NewPage(result, total, commentQuery.Page), nil
|
|
}
|
|
|
|
func (p *SheetHandler) CreateComment(ctx *gin.Context) (interface{}, error) {
|
|
comment := param.Comment{}
|
|
err := ctx.ShouldBindJSON(&p)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
comment.Author = template.HTMLEscapeString(comment.Author)
|
|
comment.AuthorURL = template.HTMLEscapeString(comment.AuthorURL)
|
|
comment.Content = template.HTMLEscapeString(comment.Content)
|
|
comment.Email = template.HTMLEscapeString(comment.Email)
|
|
comment.CommentType = consts.CommentTypeSheet
|
|
result, err := p.SheetCommentService.CreateBy(ctx, &comment)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return p.SheetCommentAssembler.ConvertToDTO(ctx, result)
|
|
}
|