57 lines
1.6 KiB
Go
57 lines
1.6 KiB
Go
package product
|
|
|
|
import (
|
|
"enaklo-pos-be/internal/common/logger"
|
|
"enaklo-pos-be/internal/common/mycontext"
|
|
"enaklo-pos-be/internal/entity"
|
|
"github.com/pkg/errors"
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
func (s *productSvc) GetProductDetails(ctx mycontext.Context, productIDs []int64, partnerID int64) (*entity.ProductDetails, error) {
|
|
if len(productIDs) == 0 {
|
|
return &entity.ProductDetails{
|
|
Products: make(map[int64]*entity.Product),
|
|
}, nil
|
|
}
|
|
|
|
productDetails, err := s.repo.GetProductDetails(ctx, productIDs, partnerID)
|
|
if err != nil {
|
|
logger.ContextLogger(ctx).Error("failed to get product details",
|
|
zap.Int64s("productIDs", productIDs),
|
|
zap.Int64("partnerID", partnerID),
|
|
zap.Error(err))
|
|
return nil, errors.Wrap(err, "failed to get product details")
|
|
}
|
|
|
|
if len(productDetails.Products) != len(productIDs) {
|
|
missingIDs := findMissingProductIDs(productIDs, productDetails.Products)
|
|
logger.ContextLogger(ctx).Warn("some products not found",
|
|
zap.Int("requestedCount", len(productIDs)),
|
|
zap.Int("foundCount", len(productDetails.Products)),
|
|
zap.Int64s("missingIDs", missingIDs))
|
|
|
|
if len(productDetails.Products) == 0 {
|
|
return nil, errors.New("no products found")
|
|
}
|
|
}
|
|
|
|
return productDetails, nil
|
|
}
|
|
|
|
func findMissingProductIDs(requestedIDs []int64, foundProducts map[int64]*entity.Product) []int64 {
|
|
var missingIDs []int64
|
|
|
|
for _, id := range requestedIDs {
|
|
if _, exists := foundProducts[id]; !exists {
|
|
missingIDs = append(missingIDs, id)
|
|
}
|
|
}
|
|
|
|
return missingIDs
|
|
}
|
|
|
|
func (s *productSvc) IsProductAvailable(product *entity.Product) bool {
|
|
return product.Status == "ACTIVE"
|
|
}
|