@@ -0,0 +1,276 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user