mh_server/model/history_browsing.go
2022-04-21 17:03:33 +08:00

104 lines
2.2 KiB
Go

package model
import (
"fmt"
"github.com/codinl/go-logger"
)
//go:generate goqueryset -in history_browsing.go
// gen:qs
type HistoryBrowsing struct {
Model
Uid uint64 `json:"uid" gorm:"index"` // 用户id
GameCardId uint64 `json:"game_card_id"` // 游戏卡id
}
func (*HistoryBrowsing) TableName() string {
return "history_browsing"
}
func GetHistoryBrowsingList(uid uint32, page, pageSize int) ([]GameCard, uint32, error) {
var (
totalPage uint32
historys []HistoryBrowsing
gameCards []GameCard = make([]GameCard, 0)
)
page -= 1
if page < 0 {
page = 0
}
// 查看商品添加浏览记录
querySet := NewHistoryBrowsingQuerySet(DB).UidEq(uint64(uid))
count, err := querySet.Count()
if err != nil {
logger.Error("err:", err)
return gameCards, 0, err
}
err = querySet.OrderDescByCreatedAt().Offset(page * pageSize).Limit(pageSize).All(&historys)
if err != nil && err != RecordNotFound {
logger.Error("err:", err)
return gameCards, 0, err
}
gameIds := make([]uint32, 0, len(historys))
for i, _ := range historys {
gameIds = append(gameIds, uint32(historys[i].GameCardId))
}
if len(gameIds) > 0 {
err := NewGameCardQuerySet(DB).IDIn(gameIds...).All(&gameCards)
if err != nil {
logger.Error("err:", err)
return gameCards, 0, err
}
}
totalPage = uint32(count/pageSize + 1)
return gameCards, totalPage, nil
}
func HistoryBrowsingAdd(uid uint64, gameCardId uint64) error {
querySet := NewHistoryBrowsingQuerySet(DB).UidEq(uid)
count, err := querySet.GameCardIdEq(gameCardId).Count()
if err != nil {
logger.Error("err:", err)
return err
}
if count == 0 {
historyBrowsing := &HistoryBrowsing{
Uid: uid,
GameCardId: gameCardId,
}
err = historyBrowsing.Create(DB)
if err != nil {
logger.Error("err:", err)
return err
}
}
totalCount, err := querySet.Count()
if err != nil {
logger.Error("err:", err)
return err
}
if totalCount > 150 {
err := querySet.OrderAscByCreatedAt().Limit(50).Delete()
if err != nil {
logger.Error("err:", err)
return err
}
}
sql := fmt.Sprintf("UPDATE game_card SET view_count = view_count+1 WHERE id = %d", gameCardId)
err = DB.Exec(sql).Error
if err != nil {
logger.Error("err:", err)
return err
}
return nil
}