feat: enhance context handling and add options for redis locker

This commit is contained in:
2025-09-30 00:43:37 +03:00
parent ed7e7608fe
commit 328b4cc66e
4 changed files with 35 additions and 6 deletions

View File

@@ -34,14 +34,16 @@ func fetchProductIds(ctx context.Context, client *api.Client, resultChan chan<-
defer close(resultChan)
lastId := ""
for {
if ctx.Err() != nil {
return
}
resp, err := client.Products().GetListOfProducts(ctx, &api.GetListOfProductsParams{
Filter: api.GetListOfProductsFilter{Visibility: "ALL"},
LastId: lastId,
Limit: 1000,
})
if err != nil {
// dev
//panic(err)
errChan <- fmt.Errorf("fetching product IDs: %w", err)
return
}
@@ -70,11 +72,15 @@ func fetchProducts(ctx context.Context, client *api.Client, productIdsChan <-cha
wg.Add(1)
go func() {
defer wg.Done()
if ctx.Err() != nil {
return
}
resp, err := client.Products().ListProductsByIDs(ctx, &api.ListProductsByIDsParams{
ProductId: productIds,
})
if err != nil {
// dev
//panic(err)
errChan <- fmt.Errorf("fetching products: %w", err)
return
@@ -143,7 +149,6 @@ func (a *apiRepository) StreamAllProductsCache(ctx context.Context, marketplaceI
err = redis.ReadProtoMessage(ctx, key, &cachedMessage)
if err == nil && len(cachedMessage.Products) > 0 {
resultChan <- utils.DerefSlice(cachedMessage.Products)
//_ = client.EnqueueFetchProductsTask(types.TypeOzonFetchProducts, marketplaceId)
return
}
@@ -161,6 +166,9 @@ func (a *apiRepository) StreamAllProductsCache(ctx context.Context, marketplaceI
converter := generated.ConverterImpl{}
var allProducts []PbProduct
defer func() {
if ctx.Err() != nil {
return
}
if len(allProducts) == 0 {
return
}
@@ -189,6 +197,8 @@ func (a *apiRepository) StreamAllProductsCache(ctx context.Context, marketplaceI
if !ok {
return
}
case <-ctx.Done():
return
}
}
}