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 }