104 lines
2.2 KiB
Go
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
|
|
}
|