package model import "github.com/codinl/go-logger" //go:generate goqueryset -in shopping_cart.go // gen:qs type ShoppingCart struct { Model Uid uint64 `json:"uid" gorm:"index"` GameCardId uint64 `json:"game_card_id"` // 游戏卡id Count uint32 `json:"count"` // 数量 GameCard GameCard `json:"game_card" gorm:"-"` } func (*ShoppingCart) TableName() string { return "shopping_cart" } type ShoppingCartListReq struct { Uid uint32 `json:"uid"` PageNum int `json:"page_num"` PageSize int `json:"page_size"` } type ShoppingCartListResp struct { List []ShoppingCart `json:"list"` Total int `json:"total"` PageNum int `json:"page_num"` //PageSize int `json:"page_size"` } func (m *ShoppingCartListReq) List() (*ShoppingCartListResp, error) { resp := &ShoppingCartListResp{ PageNum: m.PageNum, } page := m.PageNum - 1 if page < 0 { page = 0 } if m.PageSize == 0 { m.PageSize = 10 } qs := NewShoppingCartQuerySet(DB).UidEq(uint64(m.Uid)) count, err := qs.Count() if err != nil { logger.Error("err:", err) return resp, err } resp.Total = count/m.PageSize + 1 var shoppingCart []ShoppingCart err = qs.OrderDescByID().Offset(page * m.PageSize).Limit(m.PageSize).All(&shoppingCart) if err != nil && err != RecordNotFound { logger.Error("err:", err) return resp, err } resp.List = ShoppingCartListSetGameCard(shoppingCart) return resp, nil } func ShoppingCartListSetGameCard(list []ShoppingCart) []ShoppingCart { if len(list) == 0 { return list } ids := make([]uint32, 0) for i, _ := range list { ids = append(ids, uint32(list[i].GameCardId)) } var gameCards []GameCard err := NewGameCardQuerySet(DB).IDIn(ids...).All(&gameCards) if err != nil { logger.Error("err:", err) return list } gameCardMap := make(map[uint32]GameCard, 0) for i, _ := range gameCards { gameCardMap[gameCards[i].ID] = gameCards[i] } for i, _ := range list { v, ok := gameCardMap[uint32(list[i].GameCardId)] if ok { list[i].GameCard = v } } return list }