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 }