{
  "openapi": "3.0.0",
  "paths": {
    "/public/products": {
      "post": {
        "description": "Retrieves a paginated list of store products. Supports complex filtering and enrichment options.",
        "operationId": "ProductController_getPublicProductsPost",
        "parameters": [
          {
            "name": "store-id",
            "in": "header",
            "description": "The unique store identifier",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "00000000-0000-0000-0000-000000000000"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GetProductInputDTO"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Products retrieved successfully.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ProductWithVariantsDTO"
                  }
                }
              }
            }
          }
        },
        "summary": "List All Public Products",
        "tags": [
          "Public - Products"
        ]
      }
    },
    "/public/products/by-slug/{slug}": {
      "post": {
        "description": "Retrieves full product details using the variant slug.",
        "operationId": "ProductController_getBySlugPost",
        "parameters": [
          {
            "name": "store-id",
            "in": "header",
            "description": "The unique store identifier",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "slug",
            "required": true,
            "in": "path",
            "description": "The unique slug for the variant",
            "schema": {}
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GetProductDetailInputDTO"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Product retrieved successfully.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductWithVariantsDTO"
                }
              }
            }
          }
        },
        "summary": "Get Public Product by Slug",
        "tags": [
          "Public - Products"
        ]
      }
    },
    "/public/products/{id}": {
      "post": {
        "description": "Retrieves full product details using its unique UUID.",
        "operationId": "ProductController_getByIdPost",
        "parameters": [
          {
            "name": "store-id",
            "in": "header",
            "description": "The unique store identifier",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "required": true,
            "in": "path",
            "description": "Product UUID",
            "schema": {
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GetProductDetailInputDTO"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Product retrieved successfully.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductWithVariantsDTO"
                }
              }
            }
          }
        },
        "summary": "Get Public Product by ID",
        "tags": [
          "Public - Products"
        ]
      }
    },
    "/public/products/{id}/related": {
      "post": {
        "description": "Retrieves related products (up to 10) for the specified product ID.",
        "operationId": "ProductController_getRelatedById",
        "parameters": [
          {
            "name": "store-id",
            "in": "header",
            "description": "The unique store identifier",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "required": true,
            "in": "path",
            "description": "Reference product UUID",
            "schema": {
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GetRelatedProductInputDTO"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Related products retrieved successfully.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ProductWithVariantsDTO"
                  }
                }
              }
            }
          }
        },
        "summary": "Get Public Related Products",
        "tags": [
          "Public - Products"
        ]
      }
    },
    "/public/products/{id}/reviews": {
      "post": {
        "description": "Retrieves paginated public reviews for a product.",
        "operationId": "ProductController_getProductReviews",
        "parameters": [
          {
            "name": "store-id",
            "in": "header",
            "description": "The unique store identifier",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "required": true,
            "in": "path",
            "description": "Product UUID",
            "schema": {
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GetPublicProductReviewsInputDTO"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Reviews retrieved successfully.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PublicReviewDTO"
                  }
                }
              }
            }
          }
        },
        "summary": "Get Public Product Reviews",
        "tags": [
          "Public - Products"
        ]
      }
    },
    "/public/products/{slug}/meta": {
      "get": {
        "description": "Retrieves SEO, OG, and variant-specific metadata.",
        "operationId": "ProductController_getMeta",
        "parameters": [
          {
            "name": "store-id",
            "in": "header",
            "description": "The unique store identifier",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "slug",
            "required": true,
            "in": "path",
            "description": "Variant slug",
            "schema": {}
          },
          {
            "name": "lang",
            "required": false,
            "in": "query",
            "description": "Language code",
            "schema": {}
          }
        ],
        "responses": {
          "200": {
            "description": "Metadata retrieved successfully.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VariantMetadataDTO"
                }
              }
            }
          }
        },
        "summary": "Get Public Product Metadata",
        "tags": [
          "Public - Products"
        ]
      }
    },
    "/public/store_data": {
      "get": {
        "description": "Retrieves all public configuration for the store, including languages, currencies, filters, collections, and tag values.",
        "operationId": "StoreController_getStoreData",
        "parameters": [
          {
            "name": "store-id",
            "in": "header",
            "description": "The unique store identifier",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "langCode",
            "required": false,
            "in": "query",
            "description": "Language code",
            "schema": {
              "enum": [
                "af",
                "am",
                "sq",
                "ar",
                "hy",
                "az",
                "eu",
                "be",
                "bn",
                "bs",
                "bg",
                "ca",
                "ceb",
                "ny",
                "zh",
                "co",
                "hr",
                "cs",
                "da",
                "nl",
                "sjn",
                "en",
                "eo",
                "et",
                "tl",
                "fo",
                "fj",
                "fi",
                "fr",
                "fy",
                "gl",
                "ka",
                "de",
                "el",
                "gu",
                "haw",
                "ht",
                "ha",
                "he",
                "hi",
                "hmn",
                "hu",
                "is",
                "ig",
                "id",
                "iu",
                "iku",
                "ga",
                "it",
                "ja",
                "jw",
                "kk",
                "kn",
                "km",
                "ko",
                "kok",
                "ky",
                "ku",
                "ckb",
                "sdh",
                "lo",
                "lv",
                "lt",
                "lb",
                "mk",
                "mg",
                "ms",
                "ml",
                "mt",
                "mr",
                "mn",
                "mi",
                "my",
                "ne",
                "no",
                "pap",
                "fa",
                "pl",
                "pt",
                "pa",
                "ps",
                "otq",
                "ro",
                "ru",
                "sm",
                "gd",
                "sr",
                "sr-LA",
                "sd",
                "si",
                "sk",
                "sl",
                "sn",
                "st",
                "so",
                "es",
                "su",
                "sw",
                "sv",
                "ty",
                "ta",
                "tg",
                "te",
                "th",
                "bo",
                "to",
                "tr",
                "uk",
                "ur",
                "uz",
                "vi",
                "cy",
                "xh",
                "yi",
                "yo",
                "yua",
                "yue",
                "zu",
                "default"
              ],
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Store data retrieved successfully.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StoreDataResponseDTO"
                }
              }
            }
          }
        },
        "summary": "Get Public Store Data",
        "tags": [
          "Public - Store Data"
        ]
      }
    },
    "/public/collections/{slug}/meta": {
      "get": {
        "description": "Retrieves SEO metadata and first 12 products for a collection by slug.",
        "operationId": "CollectionController_getCollectionMeta",
        "parameters": [
          {
            "name": "store-domain",
            "in": "header",
            "description": "The store domain",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "slug",
            "required": true,
            "in": "path",
            "description": "Collection slug",
            "schema": {}
          },
          {
            "name": "lang",
            "required": false,
            "in": "query",
            "description": "Language code",
            "schema": {}
          }
        ],
        "responses": {
          "200": {
            "description": "Collection metadata retrieved successfully.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CollectionMetaResponseDTO"
                }
              }
            }
          }
        },
        "summary": "Get Public Collection Metadata",
        "tags": [
          "Public - Collections"
        ]
      }
    }
  },
  "info": {
    "title": "Webround Commerce Catalog API",
    "description": "Catalog Management System for Webround Commerce",
    "version": "1.0.0",
    "contact": {}
  },
  "tags": [
    {
      "name": "Public - Products",
      "description": ""
    }
  ],
  "servers": [
    {
      "url": "https://catalog-api.webround.com",
      "description": "Production Server"
    }
  ],
  "components": {
    "schemas": {
      "GetProductInputDTO": {
        "type": "object",
        "properties": {
          "page": {
            "type": "number",
            "example": 1,
            "default": 1,
            "description": "The page number for pagination"
          },
          "limit": {
            "type": "number",
            "example": 25,
            "default": 25,
            "description": "Number of items per page (max 100)"
          },
          "sortBy": {
            "type": "string",
            "example": "createdAt",
            "default": "createdAt",
            "enum": [
              "createdAt",
              "updatedAt",
              "alphabetical",
              "price",
              "match",
              "attribute:UUID",
              "tag:UUID"
            ],
            "description": "Field to sort by. Supports common fields, attribute:UUID, or tag:UUID"
          },
          "sortDirection": {
            "type": "string",
            "enum": [
              "asc",
              "desc"
            ],
            "example": "desc",
            "default": "desc"
          },
          "cadence": {
            "type": "string",
            "enum": [
              "once",
              "daily",
              "weekly",
              "monthly",
              "quarterly",
              "semiannual",
              "yearly"
            ],
            "example": "once",
            "default": "once"
          },
          "currencyCode": {
            "type": "string",
            "example": "EUR",
            "enum": [
              "USD",
              "CAD",
              "EUR",
              "AED",
              "AFN",
              "ALL",
              "AMD",
              "ARS",
              "AUD",
              "AZN",
              "BAM",
              "BDT",
              "BGN",
              "BHD",
              "BIF",
              "BND",
              "BOB",
              "BRL",
              "BWP",
              "BYR",
              "BZD",
              "CDF",
              "CHF",
              "CLP",
              "CNY",
              "COP",
              "CRC",
              "CVE",
              "CZK",
              "DJF",
              "DKK",
              "DOP",
              "DZD",
              "EEK",
              "EGP",
              "ERN",
              "ETB",
              "GBP",
              "GEL",
              "GHS",
              "GNF",
              "GTQ",
              "HKD",
              "HNL",
              "HRK",
              "HUF",
              "IDR",
              "ILS",
              "INR",
              "IQD",
              "IRR",
              "ISK",
              "JMD",
              "JOD",
              "JPY",
              "KES",
              "KHR",
              "KMF",
              "KRW",
              "KWD",
              "KZT",
              "LBP",
              "LKR",
              "LTL",
              "LVL",
              "LYD",
              "MAD",
              "MDL",
              "MGA",
              "MKD",
              "MMK",
              "MOP",
              "MUR",
              "MXN",
              "MYR",
              "MZN",
              "NAD",
              "NGN",
              "NIO",
              "NOK",
              "NPR",
              "NZD",
              "OMR",
              "PAB",
              "PEN",
              "PHP",
              "PKR",
              "PLN",
              "PYG",
              "QAR",
              "RON",
              "RSD",
              "RUB",
              "RWF",
              "SAR",
              "SDG",
              "SEK",
              "SGD",
              "SOS",
              "SYP",
              "THB",
              "TND",
              "TOP",
              "TRY",
              "TTD",
              "TWD",
              "TZS",
              "UAH",
              "UGX",
              "UYU",
              "UZS",
              "VEF",
              "VND",
              "XAF",
              "XOF",
              "YER",
              "ZAR",
              "ZMK"
            ]
          },
          "search": {
            "type": "string",
            "example": "shoes",
            "minLength": 1,
            "maxLength": 255
          },
          "langCode": {
            "type": "string",
            "enum": [
              "af",
              "am",
              "sq",
              "ar",
              "hy",
              "az",
              "eu",
              "be",
              "bn",
              "bs",
              "bg",
              "ca",
              "ceb",
              "ny",
              "zh",
              "co",
              "hr",
              "cs",
              "da",
              "nl",
              "sjn",
              "en",
              "eo",
              "et",
              "tl",
              "fo",
              "fj",
              "fi",
              "fr",
              "fy",
              "gl",
              "ka",
              "de",
              "el",
              "gu",
              "haw",
              "ht",
              "ha",
              "he",
              "hi",
              "hmn",
              "hu",
              "is",
              "ig",
              "id",
              "iu",
              "iku",
              "ga",
              "it",
              "ja",
              "jw",
              "kk",
              "kn",
              "km",
              "ko",
              "kok",
              "ky",
              "ku",
              "ckb",
              "sdh",
              "lo",
              "lv",
              "lt",
              "lb",
              "mk",
              "mg",
              "ms",
              "ml",
              "mt",
              "mr",
              "mn",
              "mi",
              "my",
              "ne",
              "no",
              "pap",
              "fa",
              "pl",
              "pt",
              "pa",
              "ps",
              "otq",
              "ro",
              "ru",
              "sm",
              "gd",
              "sr",
              "sr-LA",
              "sd",
              "si",
              "sk",
              "sl",
              "sn",
              "st",
              "so",
              "es",
              "su",
              "sw",
              "sv",
              "ty",
              "ta",
              "tg",
              "te",
              "th",
              "bo",
              "to",
              "tr",
              "uk",
              "ur",
              "uz",
              "vi",
              "cy",
              "xh",
              "yi",
              "yo",
              "yua",
              "yue",
              "zu",
              "default"
            ],
            "default": "default"
          },
          "filterIds": {
            "example": [],
            "description": "Array of UUIDs or UUIDs with [min;max] range",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "tagValueIds": {
            "example": [],
            "description": "Array of tag value UUIDs",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "includeAssets": {
            "type": "boolean"
          },
          "includeTagValues": {
            "type": "boolean"
          },
          "includeNestedVariants": {
            "type": "boolean"
          },
          "includeAttributes": {
            "type": "boolean"
          },
          "includeVariantAssets": {
            "type": "boolean"
          },
          "includeVariantTagValues": {
            "type": "boolean"
          },
          "includeVariantAttributes": {
            "type": "boolean"
          },
          "includeOptions": {
            "type": "boolean"
          },
          "searchIgnoresFilters": {
            "type": "boolean"
          }
        }
      },
      "TranslatedPublicTagValueDTO": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "f9b0c75e-8e35-4a2e-b9cf-d3347393121f"
          },
          "value": {
            "type": "string",
            "example": "#ffffff"
          },
          "alias": {
            "type": "string",
            "example": "White"
          },
          "tagId": {
            "type": "string",
            "example": "f9b0c75e-8e35-4a2e-b9cf-d3347393121f"
          },
          "inherited": {
            "type": "boolean",
            "example": false
          }
        },
        "required": [
          "id",
          "value",
          "alias",
          "tagId",
          "inherited"
        ]
      },
      "PublicAssetDTO": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "f9b0c75e-8e35-4a2e-b9cf-d3347393121f"
          },
          "url": {
            "type": "string",
            "description": "The URl for the asset",
            "example": "https://cdn.webround.com/path/image.jpg"
          },
          "type": {
            "type": "string",
            "enum": [
              "image",
              "video",
              "document"
            ],
            "example": "image"
          },
          "position": {
            "type": "number"
          },
          "thumbnail": {
            "type": "string",
            "description": "Video thumbnail, if specified"
          },
          "inherited": {
            "type": "boolean",
            "example": true,
            "description": "The flag is true if the variant inherits this asset from the product"
          }
        },
        "required": [
          "id",
          "url",
          "type",
          "inherited"
        ]
      },
      "TagMetaDTO": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "icon": {
            "type": "string"
          }
        },
        "required": [
          "name"
        ]
      },
      "ProductOptionValueItemDTO": {
        "type": "object",
        "properties": {
          "optionId": {
            "type": "string",
            "format": "uuid"
          },
          "tagValueId": {
            "type": "string",
            "format": "uuid"
          },
          "tagValue": {
            "type": "string"
          },
          "alias": {
            "type": "string"
          },
          "position": {
            "type": "number",
            "default": 0
          }
        },
        "required": [
          "optionId"
        ]
      },
      "OptionDTO": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "enum": [
              "tagValue"
            ]
          },
          "tag": {
            "$ref": "#/components/schemas/TagMetaDTO"
          },
          "values": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProductOptionValueItemDTO"
            }
          }
        },
        "required": [
          "id",
          "name",
          "type",
          "values"
        ]
      },
      "PublicProductAttributeValueDTO": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The ID of the attribute",
            "example": "d3b9e9f0-883f-4e77-b6e3-5cd7a6c6a7d3"
          },
          "name": {
            "type": "string",
            "description": "The name of the attribute",
            "example": "Color"
          },
          "label": {
            "type": "string",
            "description": "The label for the attribute"
          },
          "sortable": {
            "type": "boolean",
            "example": true,
            "description": "If true, the values can be sorted to order the products"
          },
          "type": {
            "type": "string",
            "enum": [
              "string",
              "number",
              "date"
            ],
            "example": "string",
            "description": "Attribute type"
          },
          "format": {
            "type": "string",
            "enum": [
              "year",
              "month-year",
              "date",
              "datetime",
              "datetime+tz"
            ],
            "example": "string",
            "description": "Type formatting, only available for dates"
          },
          "value": {
            "type": "string",
            "description": "The specific value for this attribute on the product or variant",
            "example": "Red"
          },
          "relevant": {
            "type": "boolean",
            "example": true,
            "description": "If true, the values for the attribute can be retrieved in public requests"
          },
          "icon": {
            "type": "string",
            "example": "react-icons/fa6#FaCircleInfo",
            "description": "The icon in the react-icons package. Used to show the attribute icon in Webround"
          }
        },
        "required": [
          "id",
          "name",
          "type",
          "value"
        ]
      },
      "PriceRangeDTO": {
        "type": "object",
        "properties": {
          "cadence": {
            "type": "string",
            "description": "The price cadence for this range",
            "example": [
              "once",
              "monthly"
            ]
          },
          "currencyCode": {
            "type": "string",
            "description": "The currency of the prices",
            "example": [
              "EUR",
              "USD"
            ]
          },
          "netMin": {
            "type": "number",
            "description": "The lowest net value for the price range",
            "example": 120
          },
          "netMax": {
            "type": "number",
            "description": "The highest net value for the price range",
            "example": 150
          },
          "grossMin": {
            "type": "number",
            "description": "The lowest gross value for the price range",
            "example": 120
          },
          "grossMax": {
            "type": "number",
            "description": "The highest net value for the price range",
            "example": 150
          },
          "compareNetMin": {
            "type": "number",
            "description": "The lowest net value used for comparison to show discounts for the price range",
            "example": 120
          },
          "compareNetMax": {
            "type": "number",
            "description": "The highest net value used for comparison to show discounts for the price range",
            "example": 150
          },
          "compareGrossMin": {
            "type": "number",
            "description": "The lowest gross value used for comparison to show discounts for the price range",
            "example": 120
          },
          "compareGrossMax": {
            "type": "number",
            "description": "The highest net value used for comparison to show discounts for the price range",
            "example": 150
          },
          "rate": {
            "type": "number",
            "description": "The tax rate applied to the net values to calculate the gross values",
            "example": 22
          }
        }
      },
      "PublicProductTagsDTO": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The unique ID for this product",
            "example": "f9b0c75e-8e35-4a2e-b9cf-d3347393121f"
          },
          "name": {
            "type": "string",
            "description": "Tag name",
            "example": "Brand"
          },
          "relevant": {
            "type": "boolean",
            "description": "If the flag is true, the Tag can be retrieved in catalog requests"
          },
          "sortable": {
            "type": "boolean",
            "description": "If the flag is true, the Tag Values can be sorted to order products in catalog requests"
          },
          "filterable": {
            "type": "boolean",
            "description": "If the flag is true, the Tag Value can be used to filter products that match the Tag Value in catalog requests"
          },
          "values": {
            "description": "The tag values",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TranslatedPublicTagValueDTO"
            }
          }
        },
        "required": [
          "id",
          "name",
          "relevant",
          "sortable",
          "filterable",
          "values"
        ]
      },
      "PublicProductVariantAttributeValueDTO": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The ID of the attribute",
            "example": "d3b9e9f0-883f-4e77-b6e3-5cd7a6c6a7d3"
          },
          "name": {
            "type": "string",
            "description": "The name of the attribute",
            "example": "Color"
          },
          "label": {
            "type": "string",
            "description": "The label for the attribute"
          },
          "sortable": {
            "type": "boolean",
            "example": true,
            "description": "If true, the values can be sorted to order the products"
          },
          "type": {
            "type": "string",
            "enum": [
              "string",
              "number",
              "date"
            ],
            "example": "string",
            "description": "Attribute type"
          },
          "format": {
            "type": "string",
            "enum": [
              "year",
              "month-year",
              "date",
              "datetime",
              "datetime+tz"
            ],
            "example": "string",
            "description": "Type formatting, only available for dates"
          },
          "value": {
            "type": "string",
            "description": "The specific value for this attribute on the product or variant",
            "example": "Red"
          },
          "relevant": {
            "type": "boolean",
            "example": true,
            "description": "If true, the values for the attribute can be retrieved in public requests"
          },
          "icon": {
            "type": "string",
            "example": "react-icons/fa6#FaCircleInfo",
            "description": "The icon in the react-icons package. Used to show the attribute icon in Webround"
          }
        },
        "required": [
          "id",
          "name",
          "type",
          "value"
        ]
      },
      "PublicVariantDTO": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "f9b0c75e-8e35-4a2e-b9cf-d3347393121f"
          },
          "name": {
            "type": "string",
            "description": "The name of the product variant",
            "example": "Red Variant Name"
          },
          "slug": {
            "type": "string",
            "description": "The unique friendly URL for this variant",
            "example": "red-variant"
          },
          "isFavourite": {
            "type": "string",
            "description": "The flag is true if the variant is marked as default",
            "example": "true"
          },
          "productId": {
            "type": "string",
            "example": "f9b0c75e-8e35-4a2e-b9cf-d3347393121f"
          },
          "availability": {
            "type": "string",
            "enum": [
              "not_available",
              "low_availability",
              "available"
            ],
            "example": "available"
          },
          "tags": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PublicProductTagsDTO"
            }
          },
          "assets": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PublicAssetDTO"
            }
          },
          "attributes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PublicProductVariantAttributeValueDTO"
            }
          },
          "priceRanges": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PriceRangeDTO"
            }
          },
          "inheritAttributes": {
            "type": "boolean",
            "example": "true"
          },
          "inheritAssets": {
            "type": "boolean",
            "example": "true"
          },
          "inheritTagValues": {
            "type": "boolean",
            "example": "true"
          },
          "sku": {
            "type": "string"
          },
          "ean": {
            "type": "string"
          },
          "mpn": {
            "type": "string"
          },
          "upc": {
            "type": "string"
          },
          "gtin": {
            "type": "string"
          },
          "isbn": {
            "type": "string"
          },
          "asin": {
            "type": "string"
          },
          "hsCode": {
            "type": "string"
          },
          "supplierCode": {
            "type": "string"
          },
          "allowBackorder": {
            "type": "boolean"
          },
          "quantity": {
            "type": "number"
          },
          "options": {
            "type": "object"
          },
          "metadata": {
            "type": "object"
          }
        },
        "required": [
          "id",
          "name",
          "slug",
          "productId",
          "availability",
          "tags",
          "assets",
          "attributes",
          "priceRanges"
        ]
      },
      "ProductReviewStatsDTO": {
        "type": "object",
        "properties": {
          "rating": {
            "type": "number",
            "description": "Media voto (1-5)",
            "minimum": 1,
            "maximum": 5,
            "example": 4.6
          },
          "count": {
            "type": "number",
            "description": "Numero di recensioni totali",
            "example": 32
          }
        },
        "required": [
          "rating",
          "count"
        ]
      },
      "ProductWithVariantsDTO": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "f9b0c75e-8e35-4a2e-b9cf-d3347393121f"
          },
          "name": {
            "type": "string",
            "example": "Product Name"
          },
          "description": {
            "type": "string",
            "example": "Product description (HTML)"
          },
          "metadata": {
            "type": "object",
            "example": {
              "code": "ABC123"
            }
          },
          "tags": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TranslatedPublicTagValueDTO"
            }
          },
          "assets": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PublicAssetDTO"
            }
          },
          "options": {
            "description": "Available options for the SKU configurations",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/OptionDTO"
            }
          },
          "attributes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PublicProductAttributeValueDTO"
            }
          },
          "priceRanges": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PriceRangeDTO"
            }
          },
          "variants": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PublicVariantDTO"
            }
          },
          "remainingVariantsCount": {
            "type": "number"
          },
          "reviews": {
            "$ref": "#/components/schemas/ProductReviewStatsDTO"
          }
        },
        "required": [
          "id",
          "tags",
          "assets",
          "attributes",
          "priceRanges"
        ]
      },
      "GetProductDetailInputDTO": {
        "type": "object",
        "properties": {
          "currencyCode": {
            "type": "string",
            "example": "EUR"
          },
          "langCode": {
            "type": "string",
            "enum": [
              "af",
              "am",
              "sq",
              "ar",
              "hy",
              "az",
              "eu",
              "be",
              "bn",
              "bs",
              "bg",
              "ca",
              "ceb",
              "ny",
              "zh",
              "co",
              "hr",
              "cs",
              "da",
              "nl",
              "sjn",
              "en",
              "eo",
              "et",
              "tl",
              "fo",
              "fj",
              "fi",
              "fr",
              "fy",
              "gl",
              "ka",
              "de",
              "el",
              "gu",
              "haw",
              "ht",
              "ha",
              "he",
              "hi",
              "hmn",
              "hu",
              "is",
              "ig",
              "id",
              "iu",
              "iku",
              "ga",
              "it",
              "ja",
              "jw",
              "kk",
              "kn",
              "km",
              "ko",
              "kok",
              "ky",
              "ku",
              "ckb",
              "sdh",
              "lo",
              "lv",
              "lt",
              "lb",
              "mk",
              "mg",
              "ms",
              "ml",
              "mt",
              "mr",
              "mn",
              "mi",
              "my",
              "ne",
              "no",
              "pap",
              "fa",
              "pl",
              "pt",
              "pa",
              "ps",
              "otq",
              "ro",
              "ru",
              "sm",
              "gd",
              "sr",
              "sr-LA",
              "sd",
              "si",
              "sk",
              "sl",
              "sn",
              "st",
              "so",
              "es",
              "su",
              "sw",
              "sv",
              "ty",
              "ta",
              "tg",
              "te",
              "th",
              "bo",
              "to",
              "tr",
              "uk",
              "ur",
              "uz",
              "vi",
              "cy",
              "xh",
              "yi",
              "yo",
              "yua",
              "yue",
              "zu",
              "default"
            ],
            "default": "default"
          },
          "cadence": {
            "type": "string",
            "enum": [
              "once",
              "daily",
              "weekly",
              "monthly",
              "quarterly",
              "semiannual",
              "yearly"
            ],
            "default": "once"
          },
          "includeAssets": {
            "type": "boolean"
          },
          "includeTagValues": {
            "type": "boolean"
          },
          "includeNestedVariants": {
            "type": "boolean"
          },
          "includeAttributes": {
            "type": "boolean"
          },
          "includeVariantAssets": {
            "type": "boolean"
          },
          "includeVariantTagValues": {
            "type": "boolean"
          },
          "includeVariantAttributes": {
            "type": "boolean"
          },
          "includeOptions": {
            "type": "boolean"
          }
        },
        "required": [
          "currencyCode"
        ]
      },
      "GetRelatedProductInputDTO": {
        "type": "object",
        "properties": {
          "currencyCode": {
            "type": "string",
            "example": "EUR"
          },
          "langCode": {
            "type": "string",
            "enum": [
              "af",
              "am",
              "sq",
              "ar",
              "hy",
              "az",
              "eu",
              "be",
              "bn",
              "bs",
              "bg",
              "ca",
              "ceb",
              "ny",
              "zh",
              "co",
              "hr",
              "cs",
              "da",
              "nl",
              "sjn",
              "en",
              "eo",
              "et",
              "tl",
              "fo",
              "fj",
              "fi",
              "fr",
              "fy",
              "gl",
              "ka",
              "de",
              "el",
              "gu",
              "haw",
              "ht",
              "ha",
              "he",
              "hi",
              "hmn",
              "hu",
              "is",
              "ig",
              "id",
              "iu",
              "iku",
              "ga",
              "it",
              "ja",
              "jw",
              "kk",
              "kn",
              "km",
              "ko",
              "kok",
              "ky",
              "ku",
              "ckb",
              "sdh",
              "lo",
              "lv",
              "lt",
              "lb",
              "mk",
              "mg",
              "ms",
              "ml",
              "mt",
              "mr",
              "mn",
              "mi",
              "my",
              "ne",
              "no",
              "pap",
              "fa",
              "pl",
              "pt",
              "pa",
              "ps",
              "otq",
              "ro",
              "ru",
              "sm",
              "gd",
              "sr",
              "sr-LA",
              "sd",
              "si",
              "sk",
              "sl",
              "sn",
              "st",
              "so",
              "es",
              "su",
              "sw",
              "sv",
              "ty",
              "ta",
              "tg",
              "te",
              "th",
              "bo",
              "to",
              "tr",
              "uk",
              "ur",
              "uz",
              "vi",
              "cy",
              "xh",
              "yi",
              "yo",
              "yua",
              "yue",
              "zu",
              "default"
            ],
            "default": "default"
          },
          "cadence": {
            "type": "string",
            "enum": [
              "once",
              "daily",
              "weekly",
              "monthly",
              "quarterly",
              "semiannual",
              "yearly"
            ],
            "default": "once"
          },
          "includeAssets": {
            "type": "boolean"
          },
          "includeTagValues": {
            "type": "boolean"
          },
          "includeNestedVariants": {
            "type": "boolean"
          },
          "includeAttributes": {
            "type": "boolean"
          },
          "includeVariantAssets": {
            "type": "boolean"
          },
          "includeVariantTagValues": {
            "type": "boolean"
          },
          "includeVariantAttributes": {
            "type": "boolean"
          }
        },
        "required": [
          "currencyCode"
        ]
      },
      "GetPublicProductReviewsInputDTO": {
        "type": "object",
        "properties": {
          "page": {
            "type": "number",
            "example": 1,
            "default": 1
          },
          "limit": {
            "type": "number",
            "example": 25,
            "default": 25,
            "minimum": 1,
            "maximum": 100
          },
          "sortBy": {
            "type": "string",
            "enum": [
              "createdAt",
              "rating"
            ],
            "default": "createdAt"
          },
          "sortDirection": {
            "type": "string",
            "enum": [
              "asc",
              "desc"
            ],
            "default": "desc"
          },
          "rating": {
            "type": "number",
            "minimum": 1,
            "maximum": 5
          }
        }
      },
      "PublicReviewDTO": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The review unique ID",
            "example": "f9b0c75e-8e35-4a2e-b9cf-d3347393121f"
          },
          "name": {
            "type": "string",
            "description": "The name of the customer that wrote the review",
            "example": "John Doe"
          },
          "rating": {
            "type": "number",
            "description": "A number between 1 and 5 as a grade for the review",
            "example": "5"
          },
          "title": {
            "type": "string",
            "description": "The review title",
            "example": "Great product"
          },
          "comment": {
            "type": "string",
            "description": "The review comment",
            "example": "I use the product everyday and I enjoy it everytime."
          },
          "verifiedPurchase": {
            "type": "boolean",
            "description": "The flag is true if the user has registered an order before submitting the review"
          }
        },
        "required": [
          "id",
          "name",
          "rating",
          "title",
          "comment",
          "verifiedPurchase"
        ]
      },
      "VariantMetadataDTO": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "coverUrl": {
            "type": "string"
          }
        }
      },
      "StoreBaseDTO": {
        "type": "object",
        "properties": {
          "defaultCurrencyCode": {
            "type": "string",
            "enum": [
              "USD",
              "CAD",
              "EUR",
              "AED",
              "AFN",
              "ALL",
              "AMD",
              "ARS",
              "AUD",
              "AZN",
              "BAM",
              "BDT",
              "BGN",
              "BHD",
              "BIF",
              "BND",
              "BOB",
              "BRL",
              "BWP",
              "BYR",
              "BZD",
              "CDF",
              "CHF",
              "CLP",
              "CNY",
              "COP",
              "CRC",
              "CVE",
              "CZK",
              "DJF",
              "DKK",
              "DOP",
              "DZD",
              "EEK",
              "EGP",
              "ERN",
              "ETB",
              "GBP",
              "GEL",
              "GHS",
              "GNF",
              "GTQ",
              "HKD",
              "HNL",
              "HRK",
              "HUF",
              "IDR",
              "ILS",
              "INR",
              "IQD",
              "IRR",
              "ISK",
              "JMD",
              "JOD",
              "JPY",
              "KES",
              "KHR",
              "KMF",
              "KRW",
              "KWD",
              "KZT",
              "LBP",
              "LKR",
              "LTL",
              "LVL",
              "LYD",
              "MAD",
              "MDL",
              "MGA",
              "MKD",
              "MMK",
              "MOP",
              "MUR",
              "MXN",
              "MYR",
              "MZN",
              "NAD",
              "NGN",
              "NIO",
              "NOK",
              "NPR",
              "NZD",
              "OMR",
              "PAB",
              "PEN",
              "PHP",
              "PKR",
              "PLN",
              "PYG",
              "QAR",
              "RON",
              "RSD",
              "RUB",
              "RWF",
              "SAR",
              "SDG",
              "SEK",
              "SGD",
              "SOS",
              "SYP",
              "THB",
              "TND",
              "TOP",
              "TRY",
              "TTD",
              "TWD",
              "TZS",
              "UAH",
              "UGX",
              "UYU",
              "UZS",
              "VEF",
              "VND",
              "XAF",
              "XOF",
              "YER",
              "ZAR",
              "ZMK"
            ],
            "example": "EUR"
          },
          "defaultCadence": {
            "type": "string",
            "enum": [
              "once",
              "daily",
              "weekly",
              "monthly",
              "quarterly",
              "semiannual",
              "yearly"
            ],
            "example": "once"
          },
          "defaultCountryCode": {
            "type": "string",
            "enum": [
              "AF",
              "AX",
              "AL",
              "DZ",
              "AS",
              "AD",
              "AO",
              "AI",
              "AQ",
              "AG",
              "AR",
              "AM",
              "AW",
              "AU",
              "AT",
              "AZ",
              "BS",
              "BH",
              "BD",
              "BB",
              "BY",
              "BE",
              "BZ",
              "BJ",
              "BM",
              "BT",
              "BO",
              "BQ",
              "BA",
              "BW",
              "BV",
              "BR",
              "IO",
              "BN",
              "BG",
              "BF",
              "BI",
              "CV",
              "KH",
              "CM",
              "CA",
              "KY",
              "CF",
              "TD",
              "CL",
              "CN",
              "CX",
              "CC",
              "CO",
              "KM",
              "CG",
              "CD",
              "CK",
              "CR",
              "CI",
              "HR",
              "CU",
              "CW",
              "CY",
              "CZ",
              "DK",
              "DJ",
              "DM",
              "DO",
              "EC",
              "EG",
              "SV",
              "GQ",
              "ER",
              "EE",
              "ET",
              "FK",
              "FO",
              "FJ",
              "FI",
              "FR",
              "GF",
              "PF",
              "TF",
              "GA",
              "GM",
              "GE",
              "DE",
              "GH",
              "GI",
              "GR",
              "GL",
              "GD",
              "GP",
              "GU",
              "GT",
              "GG",
              "GN",
              "GW",
              "GY",
              "HT",
              "HM",
              "VA",
              "HN",
              "HK",
              "HU",
              "IS",
              "IN",
              "ID",
              "IR",
              "IQ",
              "IE",
              "IM",
              "IL",
              "IT",
              "JM",
              "JP",
              "JE",
              "JO",
              "KZ",
              "KE",
              "KI",
              "KP",
              "KR",
              "KW",
              "KG",
              "LA",
              "LV",
              "LB",
              "LS",
              "LR",
              "LY",
              "LI",
              "LT",
              "LU",
              "MO",
              "MK",
              "MG",
              "MW",
              "MY",
              "MV",
              "ML",
              "MT",
              "MH",
              "MQ",
              "MR",
              "MU",
              "YT",
              "MX",
              "FM",
              "MD",
              "MC",
              "MN",
              "ME",
              "MS",
              "MA",
              "MZ",
              "MM",
              "NA",
              "NR",
              "NP",
              "NL",
              "NC",
              "NZ",
              "NI",
              "NE",
              "NG",
              "NU",
              "NF",
              "MP",
              "NO",
              "OM",
              "PK",
              "PW",
              "PS",
              "PA",
              "PG",
              "PY",
              "PE",
              "PH",
              "PN",
              "PL",
              "PT",
              "PR",
              "QA",
              "RE",
              "RO",
              "RU",
              "RW",
              "BL",
              "SH",
              "KN",
              "LC",
              "MF",
              "PM",
              "VC",
              "WS",
              "SM",
              "ST",
              "SA",
              "SN",
              "RS",
              "SC",
              "SL",
              "SG",
              "SX",
              "SK",
              "SI",
              "SB",
              "SO",
              "ZA",
              "GS",
              "SS",
              "ES",
              "LK",
              "SD",
              "SR",
              "SJ",
              "SZ",
              "SE",
              "CH",
              "SY",
              "TW",
              "TJ",
              "TZ",
              "TH",
              "TL",
              "TG",
              "TK",
              "TO",
              "TT",
              "TN",
              "TR",
              "TM",
              "TC",
              "TV",
              "UG",
              "UA",
              "AE",
              "GB",
              "US",
              "UM",
              "UY",
              "UZ",
              "VU",
              "VE",
              "VN",
              "VG",
              "VI",
              "WF",
              "EH",
              "YE",
              "ZM",
              "ZW"
            ],
            "example": "IT"
          },
          "defaultLangCode": {
            "type": "string",
            "enum": [
              "af",
              "am",
              "sq",
              "ar",
              "hy",
              "az",
              "eu",
              "be",
              "bn",
              "bs",
              "bg",
              "ca",
              "ceb",
              "ny",
              "zh",
              "co",
              "hr",
              "cs",
              "da",
              "nl",
              "sjn",
              "en",
              "eo",
              "et",
              "tl",
              "fo",
              "fj",
              "fi",
              "fr",
              "fy",
              "gl",
              "ka",
              "de",
              "el",
              "gu",
              "haw",
              "ht",
              "ha",
              "he",
              "hi",
              "hmn",
              "hu",
              "is",
              "ig",
              "id",
              "iu",
              "iku",
              "ga",
              "it",
              "ja",
              "jw",
              "kk",
              "kn",
              "km",
              "ko",
              "kok",
              "ky",
              "ku",
              "ckb",
              "sdh",
              "lo",
              "lv",
              "lt",
              "lb",
              "mk",
              "mg",
              "ms",
              "ml",
              "mt",
              "mr",
              "mn",
              "mi",
              "my",
              "ne",
              "no",
              "pap",
              "fa",
              "pl",
              "pt",
              "pa",
              "ps",
              "otq",
              "ro",
              "ru",
              "sm",
              "gd",
              "sr",
              "sr-LA",
              "sd",
              "si",
              "sk",
              "sl",
              "sn",
              "st",
              "so",
              "es",
              "su",
              "sw",
              "sv",
              "ty",
              "ta",
              "tg",
              "te",
              "th",
              "bo",
              "to",
              "tr",
              "uk",
              "ur",
              "uz",
              "vi",
              "cy",
              "xh",
              "yi",
              "yo",
              "yua",
              "yue",
              "zu",
              "default"
            ],
            "example": "default"
          },
          "languages": {
            "example": [
              "default",
              "it"
            ],
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "currencies": {
            "type": "array",
            "example": [
              "EUR"
            ],
            "items": {
              "type": "string",
              "enum": [
                "USD",
                "CAD",
                "EUR",
                "AED",
                "AFN",
                "ALL",
                "AMD",
                "ARS",
                "AUD",
                "AZN",
                "BAM",
                "BDT",
                "BGN",
                "BHD",
                "BIF",
                "BND",
                "BOB",
                "BRL",
                "BWP",
                "BYR",
                "BZD",
                "CDF",
                "CHF",
                "CLP",
                "CNY",
                "COP",
                "CRC",
                "CVE",
                "CZK",
                "DJF",
                "DKK",
                "DOP",
                "DZD",
                "EEK",
                "EGP",
                "ERN",
                "ETB",
                "GBP",
                "GEL",
                "GHS",
                "GNF",
                "GTQ",
                "HKD",
                "HNL",
                "HRK",
                "HUF",
                "IDR",
                "ILS",
                "INR",
                "IQD",
                "IRR",
                "ISK",
                "JMD",
                "JOD",
                "JPY",
                "KES",
                "KHR",
                "KMF",
                "KRW",
                "KWD",
                "KZT",
                "LBP",
                "LKR",
                "LTL",
                "LVL",
                "LYD",
                "MAD",
                "MDL",
                "MGA",
                "MKD",
                "MMK",
                "MOP",
                "MUR",
                "MXN",
                "MYR",
                "MZN",
                "NAD",
                "NGN",
                "NIO",
                "NOK",
                "NPR",
                "NZD",
                "OMR",
                "PAB",
                "PEN",
                "PHP",
                "PKR",
                "PLN",
                "PYG",
                "QAR",
                "RON",
                "RSD",
                "RUB",
                "RWF",
                "SAR",
                "SDG",
                "SEK",
                "SGD",
                "SOS",
                "SYP",
                "THB",
                "TND",
                "TOP",
                "TRY",
                "TTD",
                "TWD",
                "TZS",
                "UAH",
                "UGX",
                "UYU",
                "UZS",
                "VEF",
                "VND",
                "XAF",
                "XOF",
                "YER",
                "ZAR",
                "ZMK"
              ]
            }
          },
          "cadences": {
            "type": "array",
            "example": [
              "once",
              "monthly"
            ],
            "items": {
              "type": "string",
              "enum": [
                "once",
                "daily",
                "weekly",
                "monthly",
                "quarterly",
                "semiannual",
                "yearly"
              ]
            }
          },
          "stripeCustomerPortalUrl": {
            "type": "string",
            "example": "https://billing.stripe.com/..."
          }
        },
        "required": [
          "defaultCurrencyCode",
          "defaultCadence",
          "defaultCountryCode",
          "defaultLangCode",
          "languages",
          "currencies",
          "cadences"
        ]
      },
      "TagValuePublicDTO": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "value": {
            "type": "string",
            "example": "Rosso"
          },
          "alias": {
            "type": "string",
            "nullable": true
          },
          "position": {
            "type": "number",
            "example": 0
          },
          "count": {
            "type": "number",
            "example": 12
          }
        },
        "required": [
          "id",
          "value",
          "position",
          "count"
        ]
      },
      "TagPublicDTO": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string",
            "example": "Colore"
          },
          "label": {
            "type": "string",
            "nullable": true
          },
          "type": {
            "type": "string",
            "example": "string"
          },
          "format": {
            "type": "string",
            "nullable": true
          },
          "sortable": {
            "type": "boolean"
          },
          "relevant": {
            "type": "boolean"
          },
          "icon": {
            "type": "string",
            "nullable": true
          },
          "position": {
            "type": "number",
            "example": 0
          },
          "values": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TagValuePublicDTO"
            }
          }
        },
        "required": [
          "id",
          "name",
          "type",
          "sortable",
          "relevant",
          "position",
          "values"
        ]
      },
      "AttributePublicDTO": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string",
            "example": "Peso"
          },
          "label": {
            "type": "string",
            "nullable": true
          },
          "type": {
            "type": "string",
            "example": "number"
          },
          "format": {
            "type": "string",
            "nullable": true
          },
          "relevant": {
            "type": "boolean"
          },
          "sortable": {
            "type": "boolean"
          },
          "icon": {
            "type": "string",
            "nullable": true
          },
          "position": {
            "type": "number",
            "nullable": true
          }
        },
        "required": [
          "id",
          "name",
          "type",
          "relevant",
          "sortable"
        ]
      },
      "CollectionPublicDTO": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string",
            "example": "Abbigliamento"
          },
          "slug": {
            "type": "string",
            "example": "abbigliamento"
          },
          "parentId": {
            "type": "string",
            "nullable": true
          },
          "position": {
            "type": "number",
            "nullable": true
          },
          "visible": {
            "type": "boolean"
          },
          "filterIds": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "children": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CollectionPublicDTO"
            }
          }
        },
        "required": [
          "id",
          "name",
          "slug",
          "visible",
          "filterIds",
          "children"
        ]
      },
      "FilterConditionAttributeDTO": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "example": "number"
          },
          "name": {
            "type": "string",
            "example": "Peso"
          },
          "format": {
            "type": "string",
            "nullable": true
          }
        },
        "required": [
          "id",
          "type",
          "name"
        ]
      },
      "FilterConditionPublicDTO": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "operator": {
            "type": "string",
            "example": "range"
          },
          "min": {
            "type": "number",
            "nullable": true
          },
          "max": {
            "type": "number",
            "nullable": true
          },
          "type": {
            "type": "string",
            "nullable": true
          },
          "attributeId": {
            "type": "string",
            "nullable": true
          },
          "attribute": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/FilterConditionAttributeDTO"
              }
            ]
          }
        },
        "required": [
          "id",
          "operator"
        ]
      },
      "FilterPublicDTO": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string",
            "example": "Prezzo"
          },
          "operator": {
            "type": "string",
            "example": "AND"
          },
          "position": {
            "type": "number",
            "nullable": true
          },
          "visible": {
            "type": "boolean"
          },
          "conditionIds": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "type": {
            "type": "string",
            "enum": [
              "price",
              "date",
              "number"
            ],
            "example": "price"
          },
          "conditions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FilterConditionPublicDTO"
            }
          }
        },
        "required": [
          "id",
          "name",
          "operator",
          "visible",
          "conditionIds",
          "type",
          "conditions"
        ]
      },
      "StoreDataInnerDTO": {
        "type": "object",
        "properties": {
          "store": {
            "$ref": "#/components/schemas/StoreBaseDTO"
          },
          "tags": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TagPublicDTO"
            }
          },
          "attributes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AttributePublicDTO"
            }
          },
          "collections": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CollectionPublicDTO"
            }
          },
          "filters": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FilterPublicDTO"
            }
          }
        },
        "required": [
          "store",
          "tags",
          "attributes",
          "collections",
          "filters"
        ]
      },
      "StoreDataResponseDTO": {
        "type": "object",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/StoreDataInnerDTO"
          }
        },
        "required": [
          "data"
        ]
      },
      "CollectionMetaLocaleDTO": {
        "type": "object",
        "properties": {
          "lang": {
            "type": "string",
            "example": "it"
          },
          "isDefault": {
            "type": "boolean"
          }
        },
        "required": [
          "lang",
          "isDefault"
        ]
      },
      "CollectionMetaHreflangDTO": {
        "type": "object",
        "properties": {
          "lang": {
            "type": "string",
            "example": "it"
          },
          "href": {
            "type": "string",
            "example": "https://example.com/shop/cosmetici"
          }
        },
        "required": [
          "lang",
          "href"
        ]
      },
      "CollectionMetaSeoDTO": {
        "type": "object",
        "properties": {
          "jsonLd": {
            "type": "object",
            "description": "Schema.org CollectionPage JSON-LD"
          },
          "canonical": {
            "type": "string",
            "example": "https://example.com/shop/cosmetici"
          },
          "hreflangs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CollectionMetaHreflangDTO"
            }
          }
        },
        "required": [
          "jsonLd",
          "canonical",
          "hreflangs"
        ]
      },
      "CollectionMetaDTO": {
        "type": "object",
        "properties": {
          "storeName": {
            "type": "string",
            "example": "My Store"
          },
          "defaultCurrency": {
            "type": "string",
            "example": "EUR"
          },
          "locales": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CollectionMetaLocaleDTO"
            }
          },
          "defaultLang": {
            "type": "string",
            "example": "it"
          },
          "seo": {
            "$ref": "#/components/schemas/CollectionMetaSeoDTO"
          }
        },
        "required": [
          "storeName",
          "defaultCurrency",
          "locales",
          "defaultLang",
          "seo"
        ]
      },
      "CollectionMetaResponseDTO": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "ee91d632-ca63-400e-b93d-4369c080da4e"
          },
          "name": {
            "type": "string",
            "example": "Cosmetici"
          },
          "slug": {
            "type": "string",
            "example": "cosmetici"
          },
          "products": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProductWithVariantsDTO"
            }
          },
          "total": {
            "type": "number",
            "example": 42
          },
          "meta": {
            "$ref": "#/components/schemas/CollectionMetaDTO"
          }
        },
        "required": [
          "id",
          "name",
          "slug",
          "products",
          "total",
          "meta"
        ]
      }
    }
  }
}