package mineser import ( "91porn-server/app/appg" "91porn-server/app/middleware/authuser" "91porn-server/common" "91porn-server/common/log" "91porn-server/common/stderr" "91porn-server/models/v/followmod" "91porn-server/models/v/usermod" "91porn-server/models/v/walletmod" "errors" "fmt" "strconv" "time" ) // Follow 关注或者取消关注 func Follow(uid uint64, followUID uint64, isFollow bool, isShort bool) (code stderr.Code, data interface{}) { if isFollow { //判断被关注用户是否存在或者被封 user, err := usermod.FindUserByUID(followUID) if err != nil { return stderr.ErrDbQueryError, nil } if user == nil || user.HasLocked { return stderr.UserIsNotExists, "" } //关注人数限制 if user.Follows >= followmod.MaxFollowUsers { return stderr.Success, nil } //判断关注用户是否存在或者被封 followUser, err := usermod.FindUserByUID(uid) if err != nil { return stderr.ErrDbQueryError, nil } if followUser == nil || followUser.HasLocked { return stderr.UserIsNotExists, "" } if _, err := followmod.AddFollow(uid, followUID, isShort); err != nil { return stderr.ErrDbInsertError, "" } else { //关注成功 common.Go(func() { //校验该用户一天关注上限,超过50人则封禁 key := "user-follow-" + strconv.FormatUint(uid, 10) ret, _ := appg.Redis.Get(key) //当前用户24小时内关注次数 i := 0 if ret != nil { i, _ = strconv.Atoi(*ret) //24小时内关注超过上限,封禁 if i > followmod.ToDayFollowLimit { log.Warn("user follow upper limit", log.Any("uid", uid), log.Any("followUID", followUID), log.Any("followCount", i)) //如果用户不存在, 则证明是脚本在刷私信, 封禁该用户 hasLocked := true lockReason := "脚本刷关注用户" summary := "未知" portrait := "bf211222/image/121/si/1d8/2nw/d9af01c3203a5d0615319a7c7d8faf72.jpeg" name := "游客" + strconv.FormatUint(uid, 10) doc := usermod.UserSelector{ HasLocked: &hasLocked, LockReason: &lockReason, Summary: &summary, Portrait: &portrait, Name: &name, } usermod.Update(uid, doc) //删除token authuser.RevokeTokenCache(uid) //删除redis appg.Redis.Del(key) } } if i <= followmod.ToDayFollowLimit { i += 1 appg.Redis.Set(key, strconv.Itoa(i), time.Hour*24) } }) common.Go(func() { // 排行榜 //fans.Incr(followUID) _ = usermod.IncFans(followUID) _ = usermod.IncFollow(uid) //r := int64(1) //_ = leaderboardmod.Insert(nil, followUID, leaderboardmod.Inc{FollowCountWeek: &r}) }) ////存动态 //common.Go(func() { // _ = messageser.PublicAddMsg(messagemod.PublicAddMsg{ // SendUid: uid, // TakeUid: followUID, // MsgType: messagemod.FollowMsg, // }) //}) } return stderr.Success, nil } if count, err := followmod.CloseFollow(uid, followUID); err != nil { return stderr.ErrDbDeleteError, "" } else if count > 0 { common.Go(func() { // // 排行榜 // fans.Decr(followUID) _ = usermod.DecFans(followUID) _ = usermod.DecFollow(uid) // r := int64(-1) // _ = leaderboardmod.Insert(nil, followUID, leaderboardmod.Inc{FollowCountWeek: &r}) }) } return stderr.Success, nil } func UseDownloadCount(uid uint64) (code stderr.Code, err error) { user, err := usermod.FindUserByUID(uid) if err != nil { return stderr.ErrDbQueryError, nil } if user == nil || user.HasLocked { return stderr.UserIsNotExists, nil } wallet, err := walletmod.GetWallet(uid) if err != nil { return stderr.ErrDbQueryError, nil } if wallet == nil || wallet.ID.IsZero() { return stderr.CodeEmptyData, nil } if wallet.DownloadCount <= 0 { return stderr.DownloadCountIsNotEnough, errors.New("DownloadCount is not enough") } err = walletmod.CreditDownloadCount(nil, 1, uid) if err != nil { log.Error(fmt.Sprintf("UseDownloadCount walletmod.CreditDownloadCount err %s", err.Error())) return stderr.ErrDbUpdateError, nil } return stderr.Success, nil }