add filter order by outlet id
This commit is contained in:
@@ -13,19 +13,20 @@ import (
|
||||
|
||||
type OrderRepository interface {
|
||||
Create(ctx context.Context, order *entities.Order) error
|
||||
GetByID(ctx context.Context, id uuid.UUID) (*entities.Order, error)
|
||||
GetWithRelations(ctx context.Context, id uuid.UUID) (*entities.Order, error)
|
||||
GetByID(ctx context.Context, id uuid.UUID, outletID uuid.UUID) (*entities.Order, error)
|
||||
GetWithRelations(ctx context.Context, id uuid.UUID, outletID uuid.UUID) (*entities.Order, error)
|
||||
Update(ctx context.Context, order *entities.Order) error
|
||||
Delete(ctx context.Context, id uuid.UUID) error
|
||||
List(ctx context.Context, filters map[string]interface{}, limit, offset int) ([]*entities.Order, int64, error)
|
||||
ListBySessionID(ctx context.Context, sessionID string) ([]*entities.Order, error)
|
||||
GetByOrderNumber(ctx context.Context, orderNumber string) (*entities.Order, error)
|
||||
ExistsByOrderNumber(ctx context.Context, orderNumber string) (bool, error)
|
||||
VoidOrder(ctx context.Context, id uuid.UUID, reason string, voidedBy uuid.UUID) error
|
||||
VoidOrderWithStatus(ctx context.Context, id uuid.UUID, status entities.OrderStatus, reason string, voidedBy uuid.UUID) error
|
||||
RefundOrder(ctx context.Context, id uuid.UUID, reason string, refundedBy uuid.UUID) error
|
||||
UpdatePaymentStatus(ctx context.Context, id uuid.UUID, status entities.PaymentStatus) error
|
||||
UpdateStatus(ctx context.Context, id uuid.UUID, status entities.OrderStatus) error
|
||||
VoidOrder(ctx context.Context, id uuid.UUID, reason string, voidedBy uuid.UUID, outletID uuid.UUID) error
|
||||
VoidOrderWithStatus(ctx context.Context, id uuid.UUID, status entities.OrderStatus, reason string, voidedBy uuid.UUID, outletID uuid.UUID) error
|
||||
RefundOrder(ctx context.Context, id uuid.UUID, reason string, refundedBy uuid.UUID, outletID uuid.UUID) error
|
||||
UpdatePaymentStatus(ctx context.Context, id uuid.UUID, status entities.PaymentStatus, outletID uuid.UUID) error
|
||||
UpdateStatus(ctx context.Context, id uuid.UUID, status entities.OrderStatus, outletID uuid.UUID) error
|
||||
UpdateStatusSuccess(ctx context.Context, id uuid.UUID, orderStatus entities.OrderStatus, paymentStatus entities.PaymentStatus, outletID uuid.UUID) error
|
||||
GetNextOrderNumber(ctx context.Context, organizationID, outletID uuid.UUID) (string, error)
|
||||
}
|
||||
|
||||
@@ -43,18 +44,27 @@ func (r *OrderRepositoryImpl) Create(ctx context.Context, order *entities.Order)
|
||||
return r.db.WithContext(ctx).Create(order).Error
|
||||
}
|
||||
|
||||
func (r *OrderRepositoryImpl) GetByID(ctx context.Context, id uuid.UUID) (*entities.Order, error) {
|
||||
func applyOutletFilter(query *gorm.DB, outletID uuid.UUID) *gorm.DB {
|
||||
if outletID != uuid.Nil {
|
||||
return query.Where("outlet_id = ?", outletID)
|
||||
}
|
||||
return query
|
||||
}
|
||||
|
||||
func (r *OrderRepositoryImpl) GetByID(ctx context.Context, id uuid.UUID, outletID uuid.UUID) (*entities.Order, error) {
|
||||
var order entities.Order
|
||||
err := r.db.WithContext(ctx).First(&order, "id = ?", id).Error
|
||||
query := r.db.WithContext(ctx)
|
||||
query = applyOutletFilter(query, outletID)
|
||||
err := query.First(&order, "id = ?", id).Error
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &order, nil
|
||||
}
|
||||
|
||||
func (r *OrderRepositoryImpl) GetWithRelations(ctx context.Context, id uuid.UUID) (*entities.Order, error) {
|
||||
func (r *OrderRepositoryImpl) GetWithRelations(ctx context.Context, id uuid.UUID, outletID uuid.UUID) (*entities.Order, error) {
|
||||
var order entities.Order
|
||||
err := r.db.WithContext(ctx).
|
||||
query := r.db.WithContext(ctx).
|
||||
Preload("Organization").
|
||||
Preload("Outlet").
|
||||
Preload("User").
|
||||
@@ -63,8 +73,9 @@ func (r *OrderRepositoryImpl) GetWithRelations(ctx context.Context, id uuid.UUID
|
||||
Preload("OrderItems.ProductVariant").
|
||||
Preload("Payments").
|
||||
Preload("Payments.PaymentMethod").
|
||||
Preload("Payments.PaymentOrderItems").
|
||||
First(&order, "id = ?", id).Error
|
||||
Preload("Payments.PaymentOrderItems")
|
||||
query = applyOutletFilter(query, outletID)
|
||||
err := query.First(&order, "id = ?", id).Error
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -80,10 +91,12 @@ func (r *OrderRepositoryImpl) UpdateStatusSuccess(
|
||||
id uuid.UUID,
|
||||
orderStatus entities.OrderStatus,
|
||||
paymentStatus entities.PaymentStatus,
|
||||
outletID uuid.UUID,
|
||||
) error {
|
||||
return r.db.WithContext(ctx).
|
||||
Model(&entities.Order{}).
|
||||
Where("id = ?", id.String()).
|
||||
query := r.db.WithContext(ctx).
|
||||
Model(&entities.Order{})
|
||||
query = applyOutletFilter(query, outletID)
|
||||
return query.Where("id = ?", id.String()).
|
||||
Updates(map[string]interface{}{
|
||||
"status": orderStatus,
|
||||
"payment_status": paymentStatus,
|
||||
@@ -164,10 +177,11 @@ func (r *OrderRepositoryImpl) ExistsByOrderNumber(ctx context.Context, orderNumb
|
||||
return count > 0, err
|
||||
}
|
||||
|
||||
func (r *OrderRepositoryImpl) VoidOrder(ctx context.Context, id uuid.UUID, reason string, voidedBy uuid.UUID) error {
|
||||
func (r *OrderRepositoryImpl) VoidOrder(ctx context.Context, id uuid.UUID, reason string, voidedBy uuid.UUID, outletID uuid.UUID) error {
|
||||
now := time.Now()
|
||||
return r.db.WithContext(ctx).Model(&entities.Order{}).
|
||||
Where("id = ?", id).
|
||||
query := r.db.WithContext(ctx).Model(&entities.Order{})
|
||||
query = applyOutletFilter(query, outletID)
|
||||
return query.Where("id = ?", id).
|
||||
Updates(map[string]interface{}{
|
||||
"is_void": true,
|
||||
"void_reason": reason,
|
||||
@@ -176,10 +190,11 @@ func (r *OrderRepositoryImpl) VoidOrder(ctx context.Context, id uuid.UUID, reaso
|
||||
}).Error
|
||||
}
|
||||
|
||||
func (r *OrderRepositoryImpl) VoidOrderWithStatus(ctx context.Context, id uuid.UUID, status entities.OrderStatus, reason string, voidedBy uuid.UUID) error {
|
||||
func (r *OrderRepositoryImpl) VoidOrderWithStatus(ctx context.Context, id uuid.UUID, status entities.OrderStatus, reason string, voidedBy uuid.UUID, outletID uuid.UUID) error {
|
||||
now := time.Now()
|
||||
return r.db.WithContext(ctx).Model(&entities.Order{}).
|
||||
Where("id = ?", id).
|
||||
query := r.db.WithContext(ctx).Model(&entities.Order{})
|
||||
query = applyOutletFilter(query, outletID)
|
||||
return query.Where("id = ?", id).
|
||||
Updates(map[string]interface{}{
|
||||
"status": status,
|
||||
"is_void": true,
|
||||
@@ -189,10 +204,11 @@ func (r *OrderRepositoryImpl) VoidOrderWithStatus(ctx context.Context, id uuid.U
|
||||
}).Error
|
||||
}
|
||||
|
||||
func (r *OrderRepositoryImpl) RefundOrder(ctx context.Context, id uuid.UUID, reason string, refundedBy uuid.UUID) error {
|
||||
func (r *OrderRepositoryImpl) RefundOrder(ctx context.Context, id uuid.UUID, reason string, refundedBy uuid.UUID, outletID uuid.UUID) error {
|
||||
now := time.Now()
|
||||
return r.db.WithContext(ctx).Model(&entities.Order{}).
|
||||
Where("id = ?", id).
|
||||
query := r.db.WithContext(ctx).Model(&entities.Order{})
|
||||
query = applyOutletFilter(query, outletID)
|
||||
return query.Where("id = ?", id).
|
||||
Updates(map[string]interface{}{
|
||||
"is_refund": true,
|
||||
"refund_reason": reason,
|
||||
@@ -201,15 +217,17 @@ func (r *OrderRepositoryImpl) RefundOrder(ctx context.Context, id uuid.UUID, rea
|
||||
}).Error
|
||||
}
|
||||
|
||||
func (r *OrderRepositoryImpl) UpdatePaymentStatus(ctx context.Context, id uuid.UUID, status entities.PaymentStatus) error {
|
||||
return r.db.WithContext(ctx).Model(&entities.Order{}).
|
||||
Where("id = ?", id).
|
||||
func (r *OrderRepositoryImpl) UpdatePaymentStatus(ctx context.Context, id uuid.UUID, status entities.PaymentStatus, outletID uuid.UUID) error {
|
||||
query := r.db.WithContext(ctx).Model(&entities.Order{})
|
||||
query = applyOutletFilter(query, outletID)
|
||||
return query.Where("id = ?", id).
|
||||
Update("payment_status", status).Error
|
||||
}
|
||||
|
||||
func (r *OrderRepositoryImpl) UpdateStatus(ctx context.Context, id uuid.UUID, status entities.OrderStatus) error {
|
||||
return r.db.WithContext(ctx).Model(&entities.Order{}).
|
||||
Where("id = ?", id).
|
||||
func (r *OrderRepositoryImpl) UpdateStatus(ctx context.Context, id uuid.UUID, status entities.OrderStatus, outletID uuid.UUID) error {
|
||||
query := r.db.WithContext(ctx).Model(&entities.Order{})
|
||||
query = applyOutletFilter(query, outletID)
|
||||
return query.Where("id = ?", id).
|
||||
Update("status", status).Error
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user