mh_server/model/mall_cart.go

113 lines
2.3 KiB
Go
Raw Normal View History

package model
import "github.com/codinl/go-logger"
// gen:qs
//
//go:generate goqueryset -in mall_cart.go
type MallCart struct {
Model
Uid uint64 `json:"uid" gorm:"index"`
GoodsId uint32 `json:"goods_id"` // 商品id
Count uint32 `json:"count"` // 数量
GoodsInfo Goods `json:"goods_info" gorm:"-"`
}
type MallCartAddReq struct {
GoodsId uint32 `json:"goods_id"`
AddType uint32 `json:"add_type"` // 1-加 2-减
}
type MallCartListReq struct {
PageNum int `json:"page_num"`
PageSize int `json:"page_size"`
}
type MallCartListResp struct {
List []MallCart `json:"list"`
Total int `json:"total"`
PageNum int `json:"page_num"`
}
type MallCartDel struct {
MallCartIds []uint32 `json:"mall_cart_ids"`
}
// MallCartList 封装商城购物车列表查询
func MallCartList(uid uint32, pageNum, pageSize int) (*MallCartListResp, error) {
resp := &MallCartListResp{
PageNum: pageNum,
List: []MallCart{}, // 初始化为空列表,避免返回 nil
}
// 默认分页参数
page := pageNum - 1
if page < 0 {
page = 0
}
if pageSize <= 0 {
pageSize = 10
}
qs := NewMallCartQuerySet(DB).UidEq(uint64(uid))
// 获取总数
count, err := qs.Count()
if err != nil {
logger.Error("err:", err)
return resp, err
}
if count == 0 {
resp.Total = 0
return resp, nil
}
// 计算总页数
resp.Total = (count + pageSize - 1) / pageSize // 向上取整
// 分页查询
var mallCarts []MallCart
err = qs.OrderDescByID().Offset(page * pageSize).Limit(pageSize).All(&mallCarts)
if err != nil && err != RecordNotFound {
logger.Error("err:", err)
return resp, err
}
if len(mallCarts) == 0 {
return resp, nil
}
// 收集商品 ID
ids := make([]uint32, 0, len(mallCarts))
for _, v := range mallCarts {
ids = append(ids, v.GoodsId)
}
// 查询商品信息(避免 ids 为空)
if len(ids) > 0 {
var goodsList []Goods
err = NewGoodsQuerySet(DB).GoodsIdIn(ids...).All(&goodsList)
if err != nil && err != RecordNotFound {
logger.Error("err:", err)
return resp, err
}
// 建立 map
goodsMap := make(map[uint32]Goods, len(goodsList))
for _, g := range goodsList {
goodsMap[g.GoodsId] = g
}
// 绑定商品信息
for i := range mallCarts {
if g, ok := goodsMap[mallCarts[i].GoodsId]; ok {
mallCarts[i].GoodsInfo = g
}
}
}
resp.List = mallCarts
return resp, nil
}