Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Yandex Market Products Laravel Package

baks-dev/yandex-market-products

Модуль интеграции продукции с Yandex Market для проектов BaksDev: установка через Composer, установка ассетов и конфигурации, миграции Doctrine, запуск тестов PHPUnit (group yandex-market-products). Требует PHP 8.4+.

View on GitHub
Deep Wiki
Context7

Getting Started

Minimal Steps

  1. Installation

    composer require baks-dev/yandex-market baks-dev/yandex-market-products
    php bin/console baks:assets:install
    php bin/console doctrine:migrations:diff
    php bin/console doctrine:migrations:migrate
    
  2. Publish Config Publish the default config to customize API keys, endpoints, or behavior:

    php bin/console config:dump-reference | grep yandex_market
    

    Or manually publish:

    php artisan vendor:publish --provider="BaksDev\YandexMarketProducts\YandexMarketProductsServiceProvider" --tag="config"
    
  3. First Use Case Fetch a product by ID:

    use BaksDev\YandexMarketProducts\Client\YandexMarketClient;
    use BaksDev\YandexMarketProducts\Services\ProductService;
    
    $client = app(YandexMarketClient::class);
    $productService = app(ProductService::class);
    
    $product = $productService->getProductById(12345); // Replace with a real Yandex Market product ID
    

Implementation Patterns

Core Workflows

  1. Product Management

    • Fetching Products
      // Get a single product
      $product = $productService->getProductById($id);
      
      // Search products (with optional filters)
      $products = $productService->searchProducts(['query' => 'laptop', 'limit' => 10]);
      
    • Bulk Operations Use ProductBulkService for batch operations (e.g., updating prices or inventory):
      $bulkService = app(ProductBulkService::class);
      $results = $bulkService->updatePrices([123, 456, 789], 19.99);
      
  2. Integration with Laravel Ecosystem

    • Queue Jobs for Async Processing Dispatch long-running tasks (e.g., syncing products) to queues:
      SyncProductsJob::dispatch()->onQueue('yandex_market');
      
    • Event Listeners Listen to product updates or sync events:
      public function handle(ProductSynced $event) {
          // Log or process synced product
      }
      
  3. Caching Strategies

    • Leverage Laravel’s cache to reduce API calls:
      $product = Cache::remember("yandex_product_{$id}", now()->addHours(1), function() use ($id) {
          return $productService->getProductById($id);
      });
      
  4. API Rate Limiting

    • Configure retry logic for rate-limited requests:
      $client->setRetryOptions(['max_retries' => 3, 'delay' => 1000]);
      

Gotchas and Tips

Pitfalls

  1. API Key Management

    • Ensure YANDEX_MARKET_API_KEY is set in .env or config. Hardcoding keys in code violates security best practices.
    • Use Laravel’s env() helper or config() to access keys:
      $apiKey = config('services.yandex_market.api_key');
      
  2. Rate Limits and Throttling

    • Yandex Market may throttle requests. Monitor HTTP status codes (e.g., 429 Too Many Requests) and implement exponential backoff.
    • Log failed requests for debugging:
      $client->setLogger(app(\Monolog\Logger::class)->withName('yandex_market'));
      
  3. Data Mismatches

    • Yandex Market’s API may return unexpected fields or deprecated ones. Validate responses:
      if (!isset($response['data']['id'])) {
          throw new \RuntimeException('Invalid product data format');
      }
      
  4. Time Zone Handling

    • Yandex Market timestamps may be in UTC. Convert to user’s timezone:
      $createdAt = Carbon::parse($product['created_at'])->timezone('Europe/Moscow');
      

Debugging Tips

  1. Enable Debug Mode Set YANDEX_MARKET_DEBUG=true in .env to log raw API responses:

    $client->setDebug(true);
    
  2. Test Locally with Mocks Use Laravel’s HTTP client mocking to test without hitting the real API:

    $mock = Mockery::mock(\Illuminate\Http\Client\PendingRequest::class);
    $mock->shouldReceive('get')->andReturn(response()->json(['data' => []]));
    
    $this->app->instance(\Illuminate\Http\Client\PendingRequest::class, $mock);
    
  3. Database Schema Conflicts

    • If migrations fail, check for reserved keywords (e.g., order) in Yandex Market’s response fields. Rename columns in your schema:
      Schema::table('yandex_products', function (Blueprint $table) {
          $table->renameColumn('order', 'sort_order');
      });
      

Extension Points

  1. Custom Response Transformers Extend BaksDev\YandexMarketProducts\Transformers\ProductTransformer to map API fields to your domain model:

    class CustomProductTransformer extends ProductTransformer {
        public function transform($data) {
            $data['custom_field'] = $this->mapCustomField($data);
            return parent::transform($data);
        }
    }
    
  2. Webhook Handling Implement a webhook listener for real-time updates (if Yandex Market supports it):

    Route::post('/yandex-market/webhook', [YandexMarketWebhookController::class, 'handle']);
    
  3. Custom Sync Logic Override the default sync behavior in YandexMarketProductsServiceProvider:

    $this->app->bind(ProductService::class, function ($app) {
        return new CustomProductService($app->make(YandexMarketClient::class));
    });
    
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
codeflextech/permission-manager
karnoweb/livewire-datepicker
sayedenam/sayed-dashboard
milito/query-filter
apiboxsym/user-bundle
apiboxsym/health-check-bundle
jayeshmepani/jpl-moshier-ephemeris-php
elnasnato/laraliveui
labrodev/rest-sdk
sampaui/sampaui
babelqueue/php-sdk
facebook/capi-param-builder-php
babelqueue/symfony
hamzi/corewatch
minionfactory/raw-hydrator
hexters/coinpayment
rjcodes/rjcms
act-training/laravel-permissions-manager
alimarchal/laravel-chart-of-accounts
babenkoivan/elastic-scout-driver