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.
58 lines
1.7 KiB
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
|
|
}
|