145 lines
4.0 KiB
Go
145 lines
4.0 KiB
Go
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
|
|
}
|