feat: refactor product attributes caching logic and add HashArray utility function

This commit is contained in:
2025-08-17 11:37:15 +03:00
parent 593fbc88fa
commit e35d44dacb
3 changed files with 76 additions and 24 deletions

View File

@@ -199,27 +199,7 @@ func (a *apiRepository) StreamProductAttributesCache(ctx context.Context, market
errChan <- err
return
}
identifider, err := mp.GetIdentifier()
if err != nil {
errChan <- fmt.Errorf("getting marketplace identifier: %w", err)
return
}
key := fmt.Sprintf("ozon:products:attributes:%s", identifider)
var cachedMessage pb.GetProductAttributesResponse
err = redis.ReadProtoMessage(ctx, key, &cachedMessage)
if err == nil && len(cachedMessage.Items) > 0 {
resultChan <- utils.DerefSlice(cachedMessage.Items)
return
}
converter := generated.ConverterImpl{}
var allAttributes []PbProductAttributes
defer func() {
if len(allAttributes) == 0 {
return
}
message := pb.GetProductAttributesResponse{Items: utils.ToPtrs(allAttributes)}
_ = redis.WriteProtoMessage(ctx, key, &message)
}()
for _, chunk := range lo.Chunk(productIds, 1000) {
chunkStrings := lo.Map(chunk, func(item int, index int) string {
@@ -241,10 +221,7 @@ func (a *apiRepository) StreamProductAttributesCache(ctx context.Context, market
return *converter.AttributesToProto(&item)
})
resultChan <- attrs
allAttributes = append(allAttributes, attrs...)
}
//ozonClient.Products().GetDescriptionOfProducts()
}
func (a *apiRepository) DeleteProducts(ctx context.Context, marketplaceId int, items []*PbDeleteProductRequestItem) ([]*PbDeleteProductResponseItem, error) {

View File

@@ -95,7 +95,8 @@ func fetchProducts(
}
func (a apiRepository) StreamAllProductsCache(ctx context.Context, marketplaceId int, resultChan chan<- []pb.Product, errChan chan<- error) {
// DO NOT close channels here - WithCache will handle it (caller/creator owns them)
defer close(resultChan)
defer close(errChan)
mp, err := a.marketplaceRepository.GetMarketplaceByID(ctx, marketplaceId)
if err != nil {
errChan <- fmt.Errorf("getting marketplace by ID: %w", err)