feat(catalog): adopt subject-aware availability contract

This commit is contained in:
2026-08-24 15:16:00 -03:00
parent eda8d32f4e
commit f02f4456b7
3 changed files with 11 additions and 3 deletions

View File

@@ -1,9 +1,11 @@
import { CatalogAvailability } from './catalog.interface';
export const AVAILABLE_CATALOG_AVAILABILITY: CatalogAvailability = {
subject: 'product',
maximum_quantity: null,
restrictions: [],
capabilities: {
display: true,
select_variant: true,
change_quantity: true,
add_to_cart: true,
@@ -11,21 +13,25 @@ export const AVAILABLE_CATALOG_AVAILABILITY: CatalogAvailability = {
},
};
export function createCatalogAvailability(maximumQuantity: number | null): CatalogAvailability {
export function createCatalogAvailability(
maximumQuantity: number | null,
subject: CatalogAvailability['subject'] = 'product',
): CatalogAvailability {
const unavailable = maximumQuantity === 0;
return {
subject,
maximum_quantity: maximumQuantity,
restrictions: unavailable
? [
{
code: 'out_of_stock',
message: 'Este producto no tiene stock disponible.',
scope: 'product',
},
]
: [],
capabilities: {
display: !unavailable,
select_variant: !unavailable,
change_quantity: !unavailable,
add_to_cart: !unavailable,

View File

@@ -52,10 +52,10 @@ export type InventoryPolicy = 'tracked' | 'unlimited';
export interface CatalogRestriction {
code: 'out_of_stock' | 'user_quota_reached' | string;
message: string;
scope: 'product' | 'variant' | string;
}
export interface CatalogCapabilities {
display: boolean;
select_variant: boolean;
change_quantity: boolean;
add_to_cart: boolean;
@@ -63,6 +63,7 @@ export interface CatalogCapabilities {
}
export interface CatalogAvailability {
subject: 'product' | 'variant';
maximum_quantity: number | null;
restrictions: CatalogRestriction[];
capabilities: CatalogCapabilities;

View File

@@ -24,6 +24,7 @@ export interface VariantSelectorVariant {
values: Record<string, VariantAttributeValue>;
availability?: {
capabilities: {
display: boolean;
select_variant: boolean;
};
};