<?php
/**
* Factory service for the REST response objects.
*
* @package WooCommerce\PayPalCommerce\StoreSync\Response
*/
declare (strict_types=1);
namespace WooCommerce\PayPalCommerce\StoreSync\Response;
use WC_Order;
use WooCommerce\PayPalCommerce\StoreSync\CartValidation\CouponValidator\AppliedCouponsBuilder;
use WooCommerce\PayPalCommerce\StoreSync\Helper\ShippingOptionsBuilder;
use WooCommerce\PayPalCommerce\StoreSync\StoreData\StorePayPalCart;
class ResponseFactory
{
private AppliedCouponsBuilder $applied_coupons_builder;
private ShippingOptionsBuilder $shipping_options_builder;
public function __construct(AppliedCouponsBuilder $applied_coupons_builder, ShippingOptionsBuilder $shipping_options_builder)
{
$this->applied_coupons_builder = $applied_coupons_builder;
$this->shipping_options_builder = $shipping_options_builder;
}
/**
* Create a new cart response (status: CREATED).
*
* @param StorePayPalCart $store_cart The enriched cart.
* @param string $cart_id The cart ID.
* @return CartResponse The response object.
*/
public function new_cart(StorePayPalCart $store_cart, string $cart_id): \WooCommerce\PayPalCommerce\StoreSync\Response\CartResponse
{
return \WooCommerce\PayPalCommerce\StoreSync\Response\CartResponse::create_new($store_cart, $cart_id)->applied_coupons($this->build_applied_coupons($store_cart))->shipping_options($this->shipping_options_builder->build($store_cart->wc_cart()));
}
/**
* Create a paid cart response.
*
* @param WC_Order $order The WooCommerce order.
* @param StorePayPalCart $store_cart The enriched cart.
* @param string $cart_id The cart ID.
* @return CartResponse The response object.
*/
public function from_order(WC_Order $order, StorePayPalCart $store_cart, string $cart_id): \WooCommerce\PayPalCommerce\StoreSync\Response\CartResponse
{
return \WooCommerce\PayPalCommerce\StoreSync\Response\CartResponse::create_completed($store_cart, $cart_id, $order)->applied_coupons($this->build_applied_coupons($store_cart))->shipping_options($this->shipping_options_builder->build($store_cart->wc_cart()));
}
/**
* Create a basic cart response.
*
* @param StorePayPalCart $store_cart The enriched cart.
* @param string $cart_id The cart ID.
* @return CartResponse The response object.
*/
public function from_cart(StorePayPalCart $store_cart, string $cart_id): \WooCommerce\PayPalCommerce\StoreSync\Response\CartResponse
{
return \WooCommerce\PayPalCommerce\StoreSync\Response\CartResponse::create($store_cart, $cart_id)->applied_coupons($this->build_applied_coupons($store_cart))->shipping_options($this->shipping_options_builder->build($store_cart->wc_cart()));
}
/**
* Build applied coupons data for a cart.
*
* @param StorePayPalCart $store_cart The enriched cart.
* @return array Applied coupons data.
*/
private function build_applied_coupons(StorePayPalCart $store_cart): array
{
$validation_status = $store_cart->validation()->is_empty() ? 'VALID' : 'INVALID';
return $this->applied_coupons_builder->build_applied_coupons_array($store_cart, $validation_status);
}
}