File: /wordpress/plugins/wp-cloud-client/1.1.3/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();
}
}
}