Add order items
This commit is contained in:
@@ -13,6 +13,7 @@ type PaymentOrderItemRepository interface {
|
||||
Create(ctx context.Context, paymentOrderItem *entities.PaymentOrderItem) error
|
||||
GetByID(ctx context.Context, id uuid.UUID) (*entities.PaymentOrderItem, error)
|
||||
GetByPaymentID(ctx context.Context, paymentID uuid.UUID) ([]*entities.PaymentOrderItem, error)
|
||||
GetPaidQuantitiesByOrderID(ctx context.Context, orderID uuid.UUID) (map[uuid.UUID]int, error)
|
||||
Update(ctx context.Context, paymentOrderItem *entities.PaymentOrderItem) error
|
||||
Delete(ctx context.Context, id uuid.UUID) error
|
||||
}
|
||||
@@ -60,3 +61,34 @@ func (r *PaymentOrderItemRepositoryImpl) Update(ctx context.Context, paymentOrde
|
||||
func (r *PaymentOrderItemRepositoryImpl) Delete(ctx context.Context, id uuid.UUID) error {
|
||||
return r.db.WithContext(ctx).Delete(&entities.PaymentOrderItem{}, "id = ?", id).Error
|
||||
}
|
||||
|
||||
// GetPaidQuantitiesByOrderID efficiently aggregates paid quantities for an order using SQL
|
||||
func (r *PaymentOrderItemRepositoryImpl) GetPaidQuantitiesByOrderID(ctx context.Context, orderID uuid.UUID) (map[uuid.UUID]int, error) {
|
||||
type Result struct {
|
||||
OrderItemID uuid.UUID `json:"order_item_id"`
|
||||
TotalQuantity int `json:"total_quantity"`
|
||||
}
|
||||
|
||||
var results []Result
|
||||
|
||||
// Efficient SQL query that aggregates quantities in the database
|
||||
err := r.db.WithContext(ctx).
|
||||
Table("payment_order_items poi").
|
||||
Select("poi.order_item_id, SUM(poi.quantity) as total_quantity").
|
||||
Joins("JOIN payments p ON poi.payment_id = p.id").
|
||||
Where("p.order_id = ?", orderID).
|
||||
Group("poi.order_item_id").
|
||||
Scan(&results).Error
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Convert results to map
|
||||
paidQuantities := make(map[uuid.UUID]int)
|
||||
for _, result := range results {
|
||||
paidQuantities[result.OrderItemID] = result.TotalQuantity
|
||||
}
|
||||
|
||||
return paidQuantities, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user