package dao import ( "context" "time" "gitea.com/red-future/common/db/gfdb" "github.com/gogf/gf/v2/database/gdb" "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/util/gconv" marketConsts "shop-user-trade/consts/market" "shop-user-trade/consts/public" marketDto "shop-user-trade/model/dto/market" marketEntity "shop-user-trade/model/entity/market" ) var Market = new(marketDao) type marketDao struct{} // Insert 插入市场物品 func (d *marketDao) Insert(ctx context.Context, req *marketDto.CreateMarketReq) (id int64, err error) { var entity *marketEntity.Market if err = gconv.Struct(req, &entity); err != nil { return } entity.Status = marketConsts.MarketStatusActive r, err := gfdb.DB(ctx).Model(ctx, public.TableNameMarket).Data(entity).Insert() if err != nil { return } return r.LastInsertId() } // Update 更新市场物品 func (d *marketDao) Update(ctx context.Context, req *marketDto.UpdateMarketReq) (rows int64, err error) { r, err := gfdb.DB(ctx).Model(ctx, public.TableNameMarket). Data(req). Where(marketEntity.MarketCol.Id, req.Id). OmitEmpty(). Update() if err != nil { return } return r.RowsAffected() } // Delete 删除市场物品(软删除) func (d *marketDao) Delete(ctx context.Context, req *marketDto.DeleteMarketReq) (rows int64, err error) { r, err := gfdb.DB(ctx).Model(ctx, public.TableNameMarket). Where(marketEntity.MarketCol.Id, req.Id). Delete() if err != nil { return } return r.RowsAffected() } // GetOne 获取单个市场物品 func (d *marketDao) GetOne(ctx context.Context, req *marketDto.GetMarketReq) (res *marketEntity.Market, err error) { r, err := gfdb.DB(ctx).Model(ctx, public.TableNameMarket). Where(marketEntity.MarketCol.Id, req.Id). One() if err != nil { return } err = r.Struct(&res) return } // GetByID 根据ID获取市场物品 func (d *marketDao) GetByID(ctx context.Context, id int64) (res *marketEntity.Market, err error) { r, err := gfdb.DB(ctx).Model(ctx, public.TableNameMarket). Where(marketEntity.MarketCol.Id, id). One() if err != nil { return } err = r.Struct(&res) return } // GetByKnapsackID 根据背包项ID获取市场物品 func (d *marketDao) GetByKnapsackID(ctx context.Context, knapsackID int64) (res *marketEntity.Market, err error) { r, err := gfdb.DB(ctx).Model(ctx, public.TableNameMarket). Where(marketEntity.MarketCol.KnapsackID, knapsackID). WhereNotIn(marketEntity.MarketCol.Status, []marketConsts.MarketStatus{ marketConsts.MarketStatusSold, marketConsts.MarketStatusInactive, marketConsts.MarketStatusExpired, }). One() if err != nil { return } err = r.Struct(&res) return } // Count 获取市场物品数量 func (d *marketDao) Count(ctx context.Context, req *marketDto.ListMarketReq) (count int, err error) { return d.buildListFilter(ctx, req).Count() } // List 获取市场列表 func (d *marketDao) List(ctx context.Context, req *marketDto.ListMarketReq) (res []marketEntity.Market, total int, err error) { model := d.buildListFilter(ctx, req).OrderDesc(marketEntity.MarketCol.CreatedAt) if req.Page != nil { model.Page(int(req.Page.PageNum), int(req.Page.PageSize)) } r, total, err := model.AllAndCount(false) if err != nil { return } err = r.Structs(&res) return } // ListExpired 获取过期市场物品列表 func (d *marketDao) ListExpired(ctx context.Context) (res []marketEntity.Market, err error) { now := time.Now().Unix() r, err := gfdb.DB(ctx).Model(ctx, public.TableNameMarket). Where(marketEntity.MarketCol.Status, marketConsts.MarketStatusActive). WhereLT(marketEntity.MarketCol.ListExpireAt, now). WhereNotNull(marketEntity.MarketCol.ListExpireAt). All() if err != nil { return } err = r.Structs(&res) return } // buildListFilter 构建列表查询过滤条件 func (d *marketDao) buildListFilter(ctx context.Context, req *marketDto.ListMarketReq) *gdb.Model { model := gfdb.DB(ctx).Model(ctx, public.TableNameMarket).OmitEmpty() if !g.IsEmpty(req.UserID) { model = model.Where(marketEntity.MarketCol.UserID, req.UserID) } if req.Status != nil { model = model.Where(marketEntity.MarketCol.Status, *req.Status) } if !g.IsEmpty(req.Type) { model = model.Where(marketEntity.MarketCol.Type, req.Type) } if !g.IsEmpty(req.Keyword) { model = model.WhereLike(marketEntity.MarketCol.AssetName, "%"+req.Keyword+"%") } return model }