277 lines
7.0 KiB
Go
277 lines
7.0 KiB
Go
package commentser
|
|
|
|
import (
|
|
"91porn-server/app/appg"
|
|
"91porn-server/app/service/vidhelpser"
|
|
"91porn-server/common/constant"
|
|
"91porn-server/common/constant/redisconst"
|
|
"91porn-server/common/log"
|
|
"91porn-server/common/stderr"
|
|
"91porn-server/models/v/aiplazamod"
|
|
"91porn-server/models/v/cmtmod"
|
|
"91porn-server/models/v/mediamod"
|
|
"91porn-server/models/v/usermod"
|
|
"91porn-server/models/v/vidmod"
|
|
"time"
|
|
"unicode"
|
|
|
|
"go.mongodb.org/mongo-driver/bson/primitive"
|
|
)
|
|
|
|
// 发布评论后获取返回结果
|
|
func getRespInfoAfterPublish(uid uint64, id ObjectID, level int) (code stderr.Code, data interface{}, err error) {
|
|
var cmt cmtmod.Comment
|
|
if cmt, err = cmtmod.CmtFindOneByID(id); err != nil {
|
|
code = stderr.CommentErrGetDataFail
|
|
return
|
|
}
|
|
if level == 1 {
|
|
var info []cmtmod.ParentRespList
|
|
if info, err = getParentCommentTackInfo(uid, []cmtmod.Comment{cmt}); err != nil {
|
|
code = stderr.CommentErrSendFail
|
|
return
|
|
}
|
|
data = info[0]
|
|
} else {
|
|
var info []cmtmod.ChildRespList
|
|
info, err = getChildCommentTackInfo(uid, []cmtmod.Comment{cmt})
|
|
if code = stderr.CommentErrSendFail; err != nil {
|
|
return
|
|
}
|
|
data = info[0]
|
|
}
|
|
code = stderr.Success
|
|
return
|
|
}
|
|
|
|
// 检查用户状态
|
|
func checkUserStatus(uid uint64) (code stderr.Code, data *usermod.User, err error) {
|
|
// 获取用户状态
|
|
data, err = usermod.FindUserByUID(uid)
|
|
if err != nil || data == nil {
|
|
code = stderr.CommentUserInfoErr
|
|
return code, data, err
|
|
}
|
|
if data.HasBanned {
|
|
code = stderr.CommentUserHasBanned
|
|
return
|
|
}
|
|
|
|
if data.BannedTime.After(time.Now()) {
|
|
code = stderr.CommentUserHasBanned
|
|
return
|
|
}
|
|
// if data.Mobile == "" {
|
|
// code = stderr.CommentUserNotBind
|
|
// return code, data, nil
|
|
// }
|
|
code = stderr.Success
|
|
return
|
|
}
|
|
|
|
// 检查视频状态
|
|
func checkVideoStatus(videoID string) (code stderr.Code, videoInfo vidmod.VideoModel, err error) {
|
|
videoInfo, err = vidmod.GetVideoInfo(videoID)
|
|
if err != nil {
|
|
code = stderr.CommentVideoInfoErr
|
|
return code, videoInfo, err
|
|
}
|
|
if videoInfo.ID.IsZero() {
|
|
code = stderr.CommentErrVideoIsInvalid
|
|
return code, videoInfo, err
|
|
}
|
|
// 视频未通过审核/未审核
|
|
if videoInfo.Status != 1 && videoInfo.Status != 3 {
|
|
code = stderr.CommentErrVideoIsInvalid
|
|
return code, videoInfo, err
|
|
}
|
|
code = stderr.Success
|
|
return code, videoInfo, err
|
|
}
|
|
|
|
// 获取相关信息
|
|
func getTrackInfo(uid uint64, publisher uint64, isAuthor bool, ip string, param cmtmod.PublishReqInfo, cmtType cmtmod.CmtType) (code stderr.Code, data cmtmod.Comment, err error) {
|
|
//var waitGroup sync.WaitGroup
|
|
var city = "-"
|
|
//var replacedContent string
|
|
var replacedContent = param.Content
|
|
var cid ObjectID
|
|
var err1 error
|
|
if param.CID != "" {
|
|
if cid, err = primitive.ObjectIDFromHex(param.CID); err != nil {
|
|
code = stderr.CommentErrSendFail
|
|
return code, data, err
|
|
}
|
|
}
|
|
//waitGroup.Add(1)
|
|
//// 过滤评论
|
|
//common.Go(func() {
|
|
// defer waitGroup.Done()
|
|
// replacedContent, err1 = filterser.TextFilter(param.Content)
|
|
//})
|
|
|
|
// 获取城市城市
|
|
// common.Go(func() {
|
|
// defer waitGroup.Done()
|
|
// city = vidhelpser.GetLocationByIP(ip)
|
|
// })
|
|
//waitGroup.Wait()
|
|
if err = err1; err1 != nil {
|
|
code = stderr.CommentErrSendFail
|
|
return
|
|
}
|
|
isRobot := false
|
|
if uid < constant.RobotUIDLimit {
|
|
isRobot = true
|
|
}
|
|
|
|
now := time.Now()
|
|
data = cmtmod.Comment{
|
|
ObjType: param.ObjType,
|
|
ObjID: param.ObjID,
|
|
CID: cid,
|
|
PublisherID: publisher,
|
|
UserID: uid,
|
|
SortCnt: 0,
|
|
ToUserID: param.ToUserID,
|
|
Content: replacedContent,
|
|
OrgContent: param.Content,
|
|
Image: param.Image,
|
|
Status: 2,
|
|
Level: param.Level,
|
|
AuthorMark: isAuthor,
|
|
IsAuthor: isAuthor,
|
|
IsDelete: false,
|
|
CommentCount: 0,
|
|
LikeCount: 0,
|
|
IPAddr: ip,
|
|
City: city,
|
|
IsRobot: isRobot,
|
|
QuoteType: param.QuoteType,
|
|
QuoteID: param.QuoteID,
|
|
QuoteImg: param.QuoteImg,
|
|
QuoteTitle: param.QuoteTitle,
|
|
CreatedAt: now,
|
|
}
|
|
if param.RID != "" {
|
|
rid, err := primitive.ObjectIDFromHex(param.RID)
|
|
if err != nil {
|
|
code = stderr.CommentErrSendFail
|
|
return code, data, err
|
|
}
|
|
rCmt, err := cmtmod.CmtFindOneByID(rid)
|
|
if err != nil {
|
|
code = stderr.CommentErrSendFail
|
|
return code, data, err
|
|
}
|
|
user, err := usermod.FindUserByUID(rCmt.UserID)
|
|
if err != nil {
|
|
code = stderr.CommentErrSendFail
|
|
return code, data, err
|
|
}
|
|
data.RID = rid
|
|
data.GID = rCmt.GID
|
|
data.AuthorMark = rCmt.AuthorMark
|
|
data.SortCnt = rCmt.SortCnt
|
|
data.Type = cmtmod.CmtTypeReply
|
|
data.PublisherID = rCmt.UserID
|
|
data.ToUserName = user.Name
|
|
data.ToUserID = rCmt.UserID
|
|
data.CID = rCmt.CID
|
|
} else if param.RID == "" && !cid.IsZero() {
|
|
data.Type = cmtmod.CmtTypeComment
|
|
cCmt, err := cmtmod.CmtFindOneByID(cid)
|
|
if err != nil {
|
|
code = stderr.CommentErrSendFail
|
|
return code, data, err
|
|
}
|
|
data.PublisherID = cCmt.UserID
|
|
} else {
|
|
data.PublisherID = publisher
|
|
data.Type = cmtType
|
|
}
|
|
code = stderr.Success
|
|
return
|
|
}
|
|
|
|
// 设置分组id
|
|
func setGid(cid string, rid string, id ObjectID) (err error) {
|
|
if cid != "" && rid == "" {
|
|
return cmtmod.SetGid(id)
|
|
}
|
|
return
|
|
}
|
|
|
|
// 增加评论数
|
|
func incCommentCount(cid string, oType cmtmod.OType, objID ObjectID) (code stderr.Code, err error) {
|
|
if cid != "" {
|
|
var objCid ObjectID
|
|
if objCid, err = primitive.ObjectIDFromHex(cid); err != nil {
|
|
code = stderr.CommentErrSendFail
|
|
return code, err
|
|
}
|
|
// 根据cid获取评论信息
|
|
if toComment, err := cmtmod.CmtFindOneByID(objCid); err != nil || (toComment.Level != 1 && toComment.Level != 2) {
|
|
code = stderr.CommentErrSendFail
|
|
log.Error("app service comment CmtFindOneByID err", log.E(err), log.Any("toComment level", toComment.Level))
|
|
return code, err
|
|
}
|
|
if err = cmtmod.CmtIncreaseCommentCountByID(objCid); err != nil {
|
|
code = stderr.CommentErrIncCountFailed
|
|
return code, err
|
|
}
|
|
}
|
|
if oType == cmtmod.OTypeCartoon || oType == cmtmod.OTypeDrama {
|
|
if err = mediamod.IncrCommentCountByID(objID, 1); err != nil {
|
|
code = stderr.CommentErrIncCountFailed
|
|
return
|
|
}
|
|
} else if oType == cmtmod.OTypeAiPlaza {
|
|
aiplazamod.IncCommentCount(objID)
|
|
} else {
|
|
// 增加视频评论数
|
|
if err = vidhelpser.IncCommentCount(objID); err != nil {
|
|
code = stderr.CommentErrIncCountFailed
|
|
return
|
|
}
|
|
}
|
|
|
|
code = stderr.Success
|
|
return
|
|
}
|
|
|
|
// 检查是否为vip,非vip用户只能发表5个字
|
|
func checkVip(vipLevel int, content string) stderr.Code {
|
|
var charCnt int
|
|
for _, v := range content {
|
|
if unicode.Is(unicode.Scripts["Han"], v) {
|
|
charCnt++
|
|
} else {
|
|
charCnt++
|
|
}
|
|
if charCnt > 5 {
|
|
break
|
|
}
|
|
}
|
|
if vipLevel == 0 && charCnt > 5 {
|
|
return stderr.CommentNotVip
|
|
}
|
|
return stderr.Success
|
|
}
|
|
|
|
func CheckCountLimit(uid uint64) stderr.Code {
|
|
var key = redisconst.AutoBlockKey(constant.BlockComment, uid)
|
|
cnt := appg.Redis.Incr(key)
|
|
if cnt == 1 {
|
|
_, _ = appg.Redis.ExpireKey(key, 12*time.Hour)
|
|
}
|
|
if cnt > appg.Conf.CmtLimit.CommentCount {
|
|
err := usermod.UpdateById(nil, uid, time.Now().Add(12*time.Hour))
|
|
if err != nil {
|
|
return stderr.ErrDbUpdateError
|
|
}
|
|
return stderr.CommentCountOverLimit
|
|
}
|
|
return stderr.Success
|
|
}
|