You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

119 lines
2.8 KiB
Go

package order
import (
"cls/internal/domain/order"
"cls/pkg/logger"
"cls/pkg/xorm_engine"
"errors"
"xorm.io/builder"
)
// OrderRepositoryORM 订单仓储实现
type OrderRepositoryORM struct {
engine *xorm_engine.Engine
log logger.Logger
}
func (r *OrderRepositoryORM) Create(order *order.Order) error {
//TODO implement me
panic("implement me")
}
func (r *OrderRepositoryORM) GetByID(id uint64) (*order.Order, error) {
//TODO implement me
panic("implement me")
}
func (r *OrderRepositoryORM) GetByOrderNo(orderNo string) (*order.Order, error) {
//TODO implement me
panic("implement me")
}
func (r *OrderRepositoryORM) ListByUserID(userID uint64, page, size int) ([]*order.Order, int64, error) {
//TODO implement me
panic("implement me")
}
var _ order.OrderRepository = (*OrderRepositoryORM)(nil)
// NewOrderRepositoryORM 创建订单仓储实现
func NewOrderRepositoryORM(engine *xorm_engine.Engine, log logger.New) order.OrderRepository {
return &OrderRepositoryORM{
engine: engine,
log: log("cls:repo:order"),
}
}
// Save 保存订单
func (r *OrderRepositoryORM) Save(order *order.Order) error {
if _, err := r.engine.Insert(order); err != nil {
r.log.Error(err)
return err
}
return nil
}
// FindByID 根据ID获取订单
func (r *OrderRepositoryORM) FindByID(id uint64) (*order.Order, error) {
order := &order.Order{}
has, err := r.engine.ID(id).Get(order)
if err != nil {
r.log.Error(err)
return nil, err
}
if !has {
return nil, errors.New("订单不存在")
}
return order, nil
}
// FindByOrderNo 根据订单号获取订单
func (r *OrderRepositoryORM) FindByOrderNo(orderNo string) (*order.Order, error) {
order := &order.Order{}
has, err := r.engine.Where(builder.Eq{"order_no": orderNo}).Get(order)
if err != nil {
r.log.Error(err)
return nil, err
}
if !has {
return nil, errors.New("订单不存在")
}
return order, nil
}
// Update 更新订单
func (r *OrderRepositoryORM) Update(order *order.Order) error {
if _, err := r.engine.ID(order.ID).Update(order); err != nil {
r.log.Error(err)
return err
}
return nil
}
// UpdateStatus 更新订单状态
func (r *OrderRepositoryORM) UpdateStatus(id uint64, status order.OrderStatus) error {
if _, err := r.engine.ID(id).Update(&order.Order{Status: status}); err != nil {
r.log.Error(err)
return err
}
return nil
}
// Delete 删除订单
func (r *OrderRepositoryORM) Delete(id uint64) error {
if _, err := r.engine.ID(id).Delete(&order.Order{}); err != nil {
r.log.Error(err)
return err
}
return nil
}
func (r *OrderRepositoryORM) GetPendingOrder(targetId uint64, t order.OrderType, uid uint64) (*order.Order, error) {
o := &order.Order{}
_, err := r.engine.Where(builder.Eq{"target_id": targetId}.
And(builder.Eq{"type": t}).
And(builder.Eq{"user_id": uid}).
And(builder.Eq{"status": order.OrderStatusPending})).Get(o)
return o, err
}