Automattic\WooCommerce\Internal\RestApi\Routes\V4\Refunds\Schema
RefundPreviewSchema{} │ WC 10.9.0└─ AbstractSchema
Schema for the refund preview response.
No Hooks.
Usage
$RefundPreviewSchema = new RefundPreviewSchema(); // use class methods
Methods
- public get_item_response( $item, WP_REST_Request $request, array $include_fields = array() )
- public get_item_schema_properties()
- private get_base_item_schema()
- private get_product_item_schema()
- private get_section_schema( string $section_key )
Changelog
| Since 10.9.0 | Introduced. |
RefundPreviewSchema{} RefundPreviewSchema{} code WC 11.0.0
class RefundPreviewSchema extends AbstractSchema {
/**
* The schema item identifier.
*
* @var string
*/
const IDENTIFIER = 'refund-preview';
// The next method always throws so its return type can never be reached.
// phpcs:disable Squiz.Commenting.FunctionComment.InvalidNoReturn
/**
* Not used. The refund preview controller bypasses prepare_item_for_response
* and returns the raw data array directly via rest_ensure_response, so this
* method must never be invoked. The `: array` return type is required to
* satisfy AbstractSchema::get_item_response, but the body always throws.
*
* @param mixed $item Item data.
* @param WP_REST_Request $request Request object.
* @param array $include_fields Fields to include.
*
* @phpstan-param WP_REST_Request<array<string, mixed>> $request
*
* @return array
* @throws \LogicException Always — this method should never be called for the preview route.
*
* @since 10.9.0
*/
public function get_item_response( $item, WP_REST_Request $request, array $include_fields = array() ): array {
throw new \LogicException(
'RefundPreviewSchema::get_item_response() should not be called; the preview controller bypasses prepare_item_for_response().'
);
}
// phpcs:enable Squiz.Commenting.FunctionComment.InvalidNoReturn
/**
* Return all properties for the item schema.
*
* @return array
*
* @since 10.9.0
*/
public function get_item_schema_properties(): array {
return array(
'breakdown' => array(
'description' => __( 'Refund breakdown by item type.', 'woocommerce' ),
'type' => 'object',
'context' => self::VIEW_EDIT_EMBED_CONTEXT,
'readonly' => true,
'properties' => array(
'products' => $this->get_section_schema( 'products' ),
'shipping' => $this->get_section_schema( 'shipping' ),
'fees' => $this->get_section_schema( 'fees' ),
),
),
'subtotal' => array(
'description' => __( 'Grand subtotal of the refund preview (excluding tax).', 'woocommerce' ),
'type' => 'string',
'context' => self::VIEW_EDIT_EMBED_CONTEXT,
'readonly' => true,
),
'tax' => array(
'description' => __( 'Grand tax total of the refund preview.', 'woocommerce' ),
'type' => 'string',
'context' => self::VIEW_EDIT_EMBED_CONTEXT,
'readonly' => true,
),
'total' => array(
'description' => __( 'Grand total of the refund preview (tax-inclusive).', 'woocommerce' ),
'type' => 'string',
'context' => self::VIEW_EDIT_EMBED_CONTEXT,
'readonly' => true,
),
'max_refundable' => array(
'description' => __( 'Maximum refundable amount remaining on the order.', 'woocommerce' ),
'type' => 'string',
'context' => self::VIEW_EDIT_EMBED_CONTEXT,
'readonly' => true,
),
);
}
/**
* Schema for one section of the breakdown (products, shipping, or fees).
*
* @param string $section_key One of 'products', 'shipping', 'fees'. Determines which item schema variant is used.
* @return array
*/
private function get_section_schema( string $section_key ): array {
return array(
'type' => 'object',
'properties' => array(
'items' => array(
'description' => __( 'Line items in this section.', 'woocommerce' ),
'type' => 'array',
'items' => 'products' === $section_key ? $this->get_product_item_schema() : $this->get_base_item_schema(),
'context' => self::VIEW_EDIT_EMBED_CONTEXT,
'readonly' => true,
),
'subtotal' => array(
'description' => __( 'Section subtotal (excluding tax).', 'woocommerce' ),
'type' => 'string',
'context' => self::VIEW_EDIT_EMBED_CONTEXT,
'readonly' => true,
),
'tax' => array(
'description' => __( 'Section tax total.', 'woocommerce' ),
'type' => 'string',
'context' => self::VIEW_EDIT_EMBED_CONTEXT,
'readonly' => true,
),
'total' => array(
'description' => __( 'Section total (tax-inclusive).', 'woocommerce' ),
'type' => 'string',
'context' => self::VIEW_EDIT_EMBED_CONTEXT,
'readonly' => true,
),
),
);
}
/**
* Schema for an item entry in the shipping or fees sections.
*
* @return array
*/
private function get_base_item_schema(): array {
return array(
'type' => 'object',
'properties' => array(
'id' => array(
'description' => __( 'The original order line item ID.', 'woocommerce' ),
'type' => 'integer',
'context' => self::VIEW_EDIT_EMBED_CONTEXT,
'readonly' => true,
),
'name' => array(
'description' => __( 'The line item name.', 'woocommerce' ),
'type' => 'string',
'context' => self::VIEW_EDIT_EMBED_CONTEXT,
'readonly' => true,
),
'quantity' => array(
'description' => __( 'The quantity being refunded. Null when the refund was specified by amount only.', 'woocommerce' ),
'type' => array( 'integer', 'null' ),
'context' => self::VIEW_EDIT_EMBED_CONTEXT,
'readonly' => true,
),
'subtotal' => array(
'description' => __( 'The refund subtotal for this item (excluding tax).', 'woocommerce' ),
'type' => 'string',
'context' => self::VIEW_EDIT_EMBED_CONTEXT,
'readonly' => true,
),
'tax' => array(
'description' => __( 'The tax amount for this item.', 'woocommerce' ),
'type' => 'string',
'context' => self::VIEW_EDIT_EMBED_CONTEXT,
'readonly' => true,
),
'total' => array(
'description' => __( 'The refund total for this item (tax-inclusive).', 'woocommerce' ),
'type' => 'string',
'context' => self::VIEW_EDIT_EMBED_CONTEXT,
'readonly' => true,
),
),
);
}
/**
* Schema for an item entry in the products section (extends the base with product_id).
*
* @return array
*/
private function get_product_item_schema(): array {
$schema = $this->get_base_item_schema();
$schema['properties']['product_id'] = array(
'description' => __( 'Product or variation ID.', 'woocommerce' ),
'type' => 'integer',
'context' => self::VIEW_EDIT_EMBED_CONTEXT,
'readonly' => true,
);
return $schema;
}
}