package coupon import ( "cls/internal/domain/coupon" "cls/pkg/xorm_engine" "xorm.io/builder" ) // CouponRepository 优惠券仓储实现 type CouponRepositoryORM struct { engine *xorm_engine.Engine } var _ coupon.CouponRepository = (*CouponRepositoryORM)(nil) // NewCouponRepository 创建优惠券仓储 func NewCouponRepository(engine *xorm_engine.Engine) coupon.CouponRepository { return &CouponRepositoryORM{ engine: engine, } } // Create 创建优惠券 func (r *CouponRepositoryORM) Create(coupon *coupon.Coupon) error { _, err := r.engine.Insert(coupon) return err } // GetByID 根据ID获取优惠券 func (r *CouponRepositoryORM) GetByID(id uint64) (*coupon.Coupon, error) { var coupon coupon.Coupon has, err := r.engine.ID(id).Get(&coupon) if err != nil { return nil, err } if !has { return nil, nil } return &coupon, nil } // GetByCode 根据优惠券码获取优惠券 func (r *CouponRepositoryORM) GetByCode(code string) (*coupon.Coupon, error) { var coupon coupon.Coupon has, err := r.engine.Where("code = ?", code).Get(&coupon) if err != nil { return nil, err } if !has { return nil, nil } return &coupon, nil } // List 获取优惠券列表 func (r *CouponRepositoryORM) List(page, size int) ([]*coupon.Coupon, int64, error) { var coupons []*coupon.Coupon total, err := r.engine.Count(&coupon.Coupon{}) if err != nil { return nil, 0, err } err = r.engine.Limit(size, (page-1)*size).Find(&coupons) if err != nil { return nil, 0, err } return coupons, total, nil } // Update 更新优惠券 func (r *CouponRepositoryORM) Update(coupon *coupon.Coupon) error { _, err := r.engine.ID(coupon.ID).Update(coupon) return err } // Delete 删除优惠券 func (r *CouponRepositoryORM) Delete(id uint64) error { _, err := r.engine.ID(id).Delete(&coupon.Coupon{}) return err } func (r *CouponRepositoryORM) ListByUserID(userID uint64) ([]*coupon.Coupon, error) { data := make([]*coupon.Coupon, 0) return data, r.engine.Where(builder.Eq{"user_id": userID}).Find(&data) }