From 53014d90ab9498f29b66ecc6faa00d102738e87a Mon Sep 17 00:00:00 2001 From: "aditya.siregar" Date: Sat, 21 Jun 2025 17:19:40 +0700 Subject: [PATCH] add notes description --- internal/handlers/http/inprogress_order.go | 17 ++++++-- .../v2/inprogress_order/in_progress_order.go | 42 ++++++++++++++++--- 2 files changed, 49 insertions(+), 10 deletions(-) diff --git a/internal/handlers/http/inprogress_order.go b/internal/handlers/http/inprogress_order.go index bf5d67a..d4a97f8 100644 --- a/internal/handlers/http/inprogress_order.go +++ b/internal/handlers/http/inprogress_order.go @@ -48,8 +48,9 @@ type AddItemOrderRequest struct { } type InProgressOrderItemRequest struct { - ProductID int64 `json:"product_id" validate:"required"` - Quantity int `json:"quantity" validate:"required,min=1"` + ProductID int64 `json:"product_id" validate:"required"` + Quantity int `json:"quantity" validate:"required,min=1"` + Notes string `json:"notes"` } type UpdateInProgressOrderRequest struct { @@ -83,6 +84,7 @@ func (h *InProgressOrderHandler) Save(c *gin.Context) { orderItems[i] = entity.OrderItemRequest{ ProductID: item.ProductID, Quantity: item.Quantity, + Notes: item.Notes, } } @@ -98,7 +100,7 @@ func (h *InProgressOrderHandler) Save(c *gin.Context) { Source: "POS", } - _, err := h.service.Save(ctx, order) + resp, err := h.service.Save(ctx, order) if err != nil { response.ErrorWrapper(c, err) return @@ -107,6 +109,9 @@ func (h *InProgressOrderHandler) Save(c *gin.Context) { c.JSON(http.StatusCreated, response.BaseResponse{ Success: true, Status: http.StatusCreated, + Data: response.MapToOrderResponse(&entity.OrderResponse{ + Order: resp, + }), }) } @@ -130,10 +135,11 @@ func (h *InProgressOrderHandler) Add(c *gin.Context) { orderItems[i] = entity.OrderItemRequest{ ProductID: item.ProductID, Quantity: item.Quantity, + Notes: item.Notes, } } - _, err := h.service.AddItems(ctx, req.InProgressOrderID, orderItems) + order, err := h.service.AddItems(ctx, req.InProgressOrderID, orderItems) if err != nil { response.ErrorWrapper(c, err) return @@ -142,6 +148,9 @@ func (h *InProgressOrderHandler) Add(c *gin.Context) { c.JSON(http.StatusCreated, response.BaseResponse{ Success: true, Status: http.StatusCreated, + Data: response.MapToOrderResponse(&entity.OrderResponse{ + Order: order, + }), }) } diff --git a/internal/services/v2/inprogress_order/in_progress_order.go b/internal/services/v2/inprogress_order/in_progress_order.go index 2622a7a..2ab6c09 100644 --- a/internal/services/v2/inprogress_order/in_progress_order.go +++ b/internal/services/v2/inprogress_order/in_progress_order.go @@ -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) {