首页功能实现

pull/1/head
mofangmin 1 year ago
parent 4403d9284c
commit fe972dd0c1
  1. 93
      call/user.go
  2. 12
      common/game.go
  3. 15
      modules/web/handler/firstpage.go
  4. 9
      modules/web/handler/game.go
  5. 25
      modules/web/handler/user.go
  6. 1
      modules/web/routers/routers_user.go
  7. 7
      modules/web/values/firstpage.go
  8. 6
      modules/web/values/protocol.go

@ -1,6 +1,7 @@
package call
import (
"context"
"encoding/json"
"errors"
"fmt"
@ -13,6 +14,7 @@ import (
"server/pb"
"server/util"
"strconv"
"strings"
"time"
"github.com/liangdas/mqant/log"
@ -662,3 +664,94 @@ func UpdateUserNeedBet(uid int, amount int64) {
}
})
}
// AddGameRecord 添加玩家游玩记录
func AddGameRecord(uid int, provider int, gameId int) error {
member := fmt.Sprintf("%v_%v", provider, gameId)
playerGamesSetKey := fmt.Sprintf("player:%v:games:set", uid)
playerGamesListKey := fmt.Sprintf("player:%v:games:list", uid)
ctx := context.Background()
client := db.Redis().GetRedis()
// 检查集合中是否已经存在该游戏记录
exists, err := client.SIsMember(ctx, playerGamesSetKey, member).Result()
if err != nil {
return err
}
if !exists {
// 将游戏ID添加到集合进行去重
client.SAdd(ctx, playerGamesSetKey, member)
// 将游戏ID添加到列表的头部
client.LPush(ctx, playerGamesListKey, member)
// 保持列表中最多50条记录
client.LTrim(ctx, playerGamesListKey, 0, 49)
}
return nil
}
// GetGameRecord 获取游玩记录
func GetGameRecord(uid int) (gameList []*common.ConfigGameList) {
client := db.Redis().GetRedis()
ctx := context.Background()
playerGamesListKey := fmt.Sprintf("player:%d:games:list", uid)
games, err := client.LRange(ctx, playerGamesListKey, 0, -1).Result()
if err != nil {
log.Error("GetGameRecord LRange uid:%v,err:%v", uid, err)
return nil
}
gameList = make([]*common.ConfigGameList, 0, len(games))
for _, game := range games {
splitArr := strings.Split(game, "_")
if len(splitArr) == 2 {
provider, _ := strconv.Atoi(splitArr[0])
gameId, _ := strconv.Atoi(splitArr[1])
gameConf := GetConfigGameListByID(provider, gameId)
if gameConf != nil {
gameList = append(gameList, gameConf)
}
}
}
return
}
func AddPlayerFavorite(uid int, provider int, gameId int) error {
info := &common.PlayerFavorite{Uid: uid, GameId: gameId, Provider: provider}
if db.Mysql().Exist(info) {
log.Error("AddPlayerFavorite uid:%v exist", uid)
return errors.New(" exist")
}
info.CreateAt = time.Now().Unix()
err := db.Mysql().Create(info)
if err != nil {
log.Error("AddPlayerFavorite Create uid:%v,err:%v", uid, err)
return err
}
return nil
}
func DelPlayerFavorite(uid int, provider int, gameId int) error {
err := db.Mysql().C().Where("uid = ? and provider = ? and game_id = ?", uid, provider, gameId).Delete(&common.PlayerFavorite{}).Error
if err != nil {
log.Error("DelPlayerFavorite Delete uid:%v,err:%v", uid, err)
return err
}
return nil
}
func GetPlayerFavoriteList(uid int) (gameList []*common.ConfigGameList) {
var ret []*common.PlayerFavorite
_, err := db.Mysql().QueryAll(fmt.Sprintf("uid = %v", uid), "create_at", &common.PlayerFavorite{}, &ret)
if err != nil {
log.Error("GetPlayerFavoriteList Delete uid:%v,err:%v", uid, err)
return
}
gameList = make([]*common.ConfigGameList, 0, len(ret))
for _, game := range ret {
gameConf := GetConfigGameListByID(game.Provider, game.GameId)
if gameConf != nil {
gameList = append(gameList, gameConf)
}
}
return
}

@ -77,3 +77,15 @@ const (
GameTypeESport
GameTypeSportBook
)
type PlayerFavorite struct {
Id int `gorm:"column:id;type:int(11) AUTO_INCREMENT;primary_key" json:"id"`
Uid int `gorm:"column:uid;type:int(11);NOT NULL" json:"uid"`
Provider int `gorm:"column:provider;type:int(11);NOT NULL" json:"provider"`
GameId int `gorm:"column:game_id;type:int(11);NOT NULL" json:"game_id"`
CreateAt int64 `gorm:"column:create_at;type:bigint(20);NOT NULL" json:"create_at"`
}
func (m *PlayerFavorite) TableName() string {
return "player_favorite"
}

@ -2,6 +2,7 @@ package handler
import (
"fmt"
"math/rand"
"server/call"
"server/common"
"server/db"
@ -51,12 +52,19 @@ func FirstPage(c *gin.Context) {
for _, v := range games {
one := values.OneFisrtPageGame{
ConfigFirstPageGames: v,
List: make([]*common.ConfigGameList, 0),
}
if v.Name == "Recent" {
one.List = append(one.List, call.GetGameRecord(a.UID)...)
} else if v.Name == "Favorite" {
one.List = append(one.List, call.GetPlayerFavoriteList(a.UID)...)
} else {
if v.JumpType == 1 {
one.List = call.GetConfigGameList(req.GameNum, v.JumpID)
} else {
one.List = call.GetConfigGameList(req.GameNum, 0, v.JumpID)
}
}
resp.Games = append(resp.Games, one)
}
for i := common.CurrencyTypeZero + 1; i < common.CurrencyAll; i++ {
@ -73,4 +81,11 @@ func FirstPage(c *gin.Context) {
if len(task) > 0 {
resp.DownloadAppReward = task[0].Reward
}
resp.ShowData = values.ShowInfo{
Reward: rand.Int63n(1000000),
AverWithdraw: rand.Int63n(1000000),
MaxBet: rand.Int63n(1000000),
WithdrawCount: rand.Int63n(1000000),
}
}

@ -121,7 +121,16 @@ func EnterGame(c *gin.Context) {
if resp.URL == "" {
a.Code = values.CodeParam
a.Msg = "Under Maintenance,please try later."
return
}
util.Go(func() {
// 记录玩家的记录
err := call.AddGameRecord(uid, req.Provider, req.GameID)
if err != nil {
log.Error("AddGameRecord uid:%v, err:%v", uid, err)
return
}
})
}
func GameHistory(c *gin.Context) {

@ -218,3 +218,28 @@ func Feedback(c *gin.Context) {
}
}
}
func FavoriteGame(c *gin.Context) {
a := app.NewApp(c)
defer func() {
a.Response()
}()
req := new(values.FavoriteGameReq)
if !a.S(req) {
return
}
if req.Cancel {
err := call.DelPlayerFavorite(a.UID, req.GameProvider, req.GameId)
if err != nil {
a.Code = values.CodeRetry
a.Msg = err.Error()
return
}
} else {
err := call.AddPlayerFavorite(a.UID, req.GameProvider, req.GameId)
if err != nil {
a.Code = values.CodeRetry
a.Msg = err.Error()
}
}
}

@ -10,4 +10,5 @@ func user(e *gin.RouterGroup) {
e.POST("/user/info/get", handler.GetUserInfo)
e.POST("/user/info/edit", handler.EditUserInfo)
e.POST("/user/feedback", handler.Feedback)
e.POST("/favorite/game", handler.FavoriteGame)
}

@ -16,8 +16,15 @@ type FirstPageResp struct {
Games []OneFisrtPageGame
Esport *common.ConfigGameList
DownloadAppReward int64
ShowData ShowInfo // 首页头部展示
}
type ShowInfo struct {
Reward int64 // 奖金
AverWithdraw int64 // 平均提现市场
MaxBet int64 // 今日最大下注
WithdrawCount int64 // 今日提现总额
}
type OneCurrency struct {
ID common.CurrencyType
Name string

@ -152,3 +152,9 @@ type OneFeedback struct {
Choose []int
Context string
}
type FavoriteGameReq struct {
GameProvider int // 游戏供应商
GameId int // 游戏ID
Cancel bool // 是否取消
}

Loading…
Cancel
Save