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.
sonic/service/impl/comment_post.go

58 lines
1.7 KiB
Go

package impl
import (
"context"
"gorm.io/gorm"
"github.com/go-sonic/sonic/consts"
"github.com/go-sonic/sonic/dal"
"github.com/go-sonic/sonic/model/entity"
"github.com/go-sonic/sonic/model/param"
"github.com/go-sonic/sonic/service"
"github.com/go-sonic/sonic/util/xerr"
)
type postCommentServiceImpl struct {
service.BaseCommentService
}
func NewPostCommentService(baseCommentService service.BaseCommentService) service.PostCommentService {
return &postCommentServiceImpl{
BaseCommentService: baseCommentService,
}
}
func (p postCommentServiceImpl) CreateBy(ctx context.Context, commentParam *param.Comment) (*entity.Comment, error) {
postDAL := dal.GetQueryByCtx(ctx).Post
post, err := postDAL.WithContext(ctx).Where(postDAL.ID.Eq(commentParam.PostID)).First()
if err == gorm.ErrRecordNotFound {
return nil, xerr.WithMsg(nil, "post not found").WithStatus(xerr.StatusBadRequest)
}
if err != nil {
return nil, err
}
if post.DisallowComment {
return nil, xerr.WithMsg(nil, "This post does not allow comments").WithStatus(xerr.StatusBadRequest)
}
return p.BaseCommentService.CreateBy(ctx, commentParam)
}
func (p postCommentServiceImpl) UpdateBy(ctx context.Context, commentID int32, commentParam *param.Comment) (*entity.Comment, error) {
if commentID == 0 {
return nil, nil
}
comment := p.ConvertParam(commentParam)
comment.ID = commentID
return p.Update(ctx, comment)
}
func (p postCommentServiceImpl) CountByStatus(ctx context.Context, status consts.CommentStatus) (int64, error) {
postCommentDAL := dal.GetQueryByCtx(ctx).Comment
count, err := postCommentDAL.WithContext(ctx).Where(postCommentDAL.Type.Eq(consts.CommentTypePost), postCommentDAL.Status.Eq(status)).Count()
if err != nil {
return 0, WrapDBErr(err)
}
return count, nil
}