add function to add item
This commit is contained in:
@@ -14,9 +14,11 @@ type InProgressOrderService interface {
|
||||
Save(ctx mycontext.Context, order *entity.OrderRequest) (*entity.Order, error)
|
||||
GetOrdersByPartnerID(ctx mycontext.Context, partnerID int64, limit, offset int) ([]*entity.Order, error)
|
||||
GetOrderByOrderAndPartnerID(ctx mycontext.Context, partnerID int64, orderID int64) (*entity.Order, error)
|
||||
AddItems(ctx mycontext.Context, orderID int64, newItems []entity.OrderItemRequest) (*entity.Order, error)
|
||||
}
|
||||
|
||||
type OrderRepository interface {
|
||||
FindByID(ctx mycontext.Context, id int64) (*entity.Order, error)
|
||||
CreateOrUpdate(ctx mycontext.Context, order *entity.Order) (*entity.Order, error)
|
||||
GetListByPartnerID(ctx mycontext.Context, partnerID int64, limit, offset int, status string) ([]*entity.Order, error)
|
||||
FindByIDAndPartnerID(ctx mycontext.Context, id int64, partnerID int64) (*entity.Order, error)
|
||||
@@ -124,6 +126,50 @@ func (s *inProgressOrderSvc) GetOrdersByPartnerID(ctx mycontext.Context, partner
|
||||
return orders, nil
|
||||
}
|
||||
|
||||
func (s *inProgressOrderSvc) AddItems(ctx mycontext.Context, orderID int64, newItems []entity.OrderItemRequest) (*entity.Order, error) {
|
||||
existingOrder, err := s.repo.FindByID(ctx, orderID)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(err, "failed to fetch order %d", orderID)
|
||||
}
|
||||
|
||||
itemMap := make(map[int64]entity.OrderItemRequest, len(existingOrder.OrderItems)+len(newItems))
|
||||
|
||||
for _, oi := range existingOrder.OrderItems {
|
||||
itemMap[oi.ItemID] = entity.OrderItemRequest{
|
||||
ProductID: oi.ItemID,
|
||||
Quantity: oi.Quantity,
|
||||
}
|
||||
}
|
||||
|
||||
for _, ni := range newItems {
|
||||
if existing, found := itemMap[ni.ProductID]; found {
|
||||
existing.Quantity += ni.Quantity
|
||||
itemMap[ni.ProductID] = existing
|
||||
} else {
|
||||
itemMap[ni.ProductID] = ni
|
||||
}
|
||||
}
|
||||
|
||||
mergedItems := make([]entity.OrderItemRequest, 0, len(itemMap))
|
||||
for _, item := range itemMap {
|
||||
mergedItems = append(mergedItems, item)
|
||||
}
|
||||
|
||||
req := &entity.OrderRequest{
|
||||
ID: existingOrder.ID,
|
||||
PartnerID: existingOrder.PartnerID,
|
||||
CustomerID: existingOrder.CustomerID,
|
||||
CustomerName: existingOrder.CustomerName,
|
||||
CreatedBy: existingOrder.CreatedBy,
|
||||
TableNumber: existingOrder.TableNumber,
|
||||
OrderType: existingOrder.OrderType,
|
||||
Source: existingOrder.Source,
|
||||
OrderItems: mergedItems,
|
||||
}
|
||||
|
||||
return s.Save(ctx, req)
|
||||
}
|
||||
|
||||
func (s *inProgressOrderSvc) GetOrderByOrderAndPartnerID(ctx mycontext.Context, partnerID int64, orderID int64) (*entity.Order, error) {
|
||||
orders, err := s.repo.FindByIDAndPartnerID(ctx, orderID, partnerID)
|
||||
if err != nil {
|
||||
|
||||
Reference in New Issue
Block a user