HEX
Server: nginx
System: Linux pool195-106-36.bur.atomicsites.net 6.12.57+deb12-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.12.57-1~bpo12+1 (2025-11-17) x86_64
User: (0)
PHP: 8.3.32
Disabled: pcntl_fork
Upload Files
File: /wordpress/plugins/wp-cloud-client/1.1.0/src/Api/Controller/WooCommerceController.php
<?php

declare(strict_types=1);

namespace VPlugins\WPCloudClient\Api\Controller;

use VPlugins\WPCloudClient\Api\ApiResponse;
use VPlugins\WPCloudClient\Handler\WooCommerceDataHandler;
use VPlugins\WPCloudClient\Support\Logger;
use WP_REST_Request;
use WP_REST_Response;

final readonly class WooCommerceController {

	/**
	 * Construct the WooCommerce controller.
	 *
	 * @param WooCommerceDataHandler $handler WooCommerce data handler.
	 * @param Logger                 $logger  Logger instance.
	 */
	public function __construct(
		private WooCommerceDataHandler $handler,
		private Logger $logger,
	) {}

	/**
	 * Fetch WooCommerce entity data via REST.
	 *
	 * Reads `entity`, `offset` (default 0), and `limit` (default 10, max 100) from query params.
	 *
	 * @param WP_REST_Request $request The incoming REST request.
	 * @return WP_REST_Response The REST response.
	 */
	public function fetch( WP_REST_Request $request ): WP_REST_Response {
		$params = array_filter(
			[
				'entity' => $request->get_param( 'entity' ),
				'offset' => $request->get_param( 'offset' ),
				'limit'  => $request->get_param( 'limit' ),
			],
			fn( $v ) => null !== $v
		);

			try {
				$result = $this->handler->execute( $params );
				return ApiResponse::success( $result )->toWpResponse();
			} catch ( \DomainException $e ) {
				$this->logger->error( 'WooCommerce server config error', $e );
				return ApiResponse::error( 'validation_error', $e->getMessage(), 400 )->toWpResponse();
			} catch ( \InvalidArgumentException $e ) {
				$this->logger->warning(
					sprintf(
						'WooCommerce fetch validation failed (entity=%s, offset=%s, limit=%s)',
						$params['entity'] ?? '',
						$params['offset'] ?? '0',
						$params['limit'] ?? '10'
					),
					$e
				);
				return ApiResponse::error( 'validation_error', $e->getMessage(), 400 )->toWpResponse();
			} catch ( \Throwable $e ) {
				$this->logger->error( 'WooCommerce fetch failed', $e );
				return ApiResponse::error( 'fetch_failed', 'An internal error occurred while fetching WooCommerce data.', 500 )->toWpResponse();
			}
	}
}