add notes description
This commit is contained in:
@@ -82,6 +82,7 @@ func (s *inProgressOrderSvc) Save(ctx mycontext.Context, req *entity.OrderReques
|
||||
Price: product.Price,
|
||||
ItemType: product.Type,
|
||||
Description: product.Description,
|
||||
Notes: item.Notes,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -132,29 +133,43 @@ func (s *inProgressOrderSvc) AddItems(ctx mycontext.Context, orderID int64, newI
|
||||
return nil, errors.Wrapf(err, "failed to fetch order %d", orderID)
|
||||
}
|
||||
|
||||
itemMap := make(map[int64]entity.OrderItemRequest, len(existingOrder.OrderItems)+len(newItems))
|
||||
type itemKey struct {
|
||||
ProductID int64
|
||||
Notes string
|
||||
}
|
||||
|
||||
itemMap := make(map[itemKey]entity.OrderItemRequest)
|
||||
existingKeys := make(map[itemKey]struct{})
|
||||
|
||||
// Collect existing items
|
||||
for _, oi := range existingOrder.OrderItems {
|
||||
itemMap[oi.ItemID] = entity.OrderItemRequest{
|
||||
key := itemKey{ProductID: oi.ItemID, Notes: oi.Notes}
|
||||
existingKeys[key] = struct{}{}
|
||||
itemMap[key] = entity.OrderItemRequest{
|
||||
ProductID: oi.ItemID,
|
||||
Quantity: oi.Quantity,
|
||||
Notes: oi.Notes,
|
||||
}
|
||||
}
|
||||
|
||||
// Merge new items into map
|
||||
for _, ni := range newItems {
|
||||
if existing, found := itemMap[ni.ProductID]; found {
|
||||
key := itemKey{ProductID: ni.ProductID, Notes: ni.Notes}
|
||||
if existing, found := itemMap[key]; found {
|
||||
existing.Quantity += ni.Quantity
|
||||
itemMap[ni.ProductID] = existing
|
||||
itemMap[key] = existing
|
||||
} else {
|
||||
itemMap[ni.ProductID] = ni
|
||||
itemMap[key] = ni
|
||||
}
|
||||
}
|
||||
|
||||
// Prepare merged items
|
||||
mergedItems := make([]entity.OrderItemRequest, 0, len(itemMap))
|
||||
for _, item := range itemMap {
|
||||
mergedItems = append(mergedItems, item)
|
||||
}
|
||||
|
||||
// Save updated order
|
||||
req := &entity.OrderRequest{
|
||||
ID: existingOrder.ID,
|
||||
PartnerID: existingOrder.PartnerID,
|
||||
@@ -167,7 +182,22 @@ func (s *inProgressOrderSvc) AddItems(ctx mycontext.Context, orderID int64, newI
|
||||
OrderItems: mergedItems,
|
||||
}
|
||||
|
||||
return s.Save(ctx, req)
|
||||
savedOrder, err := s.Save(ctx, req)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
newlyAdded := make([]entity.OrderItem, 0)
|
||||
for _, item := range savedOrder.OrderItems {
|
||||
key := itemKey{ProductID: item.ItemID, Notes: item.Notes}
|
||||
if _, exists := existingKeys[key]; !exists {
|
||||
newlyAdded = append(newlyAdded, item)
|
||||
}
|
||||
}
|
||||
|
||||
savedOrder.OrderItems = newlyAdded
|
||||
|
||||
return savedOrder, nil
|
||||
}
|
||||
|
||||
func (s *inProgressOrderSvc) GetOrderByOrderAndPartnerID(ctx mycontext.Context, partnerID int64, orderID int64) (*entity.Order, error) {
|
||||
|
||||
Reference in New Issue
Block a user