POSTRegras de opção
Diz quais valores de opção (cor, tamanho) continuam disponíveis dada a escolha atual do comprador.
Um produto com opções (cor, tamanho, voltagem) pode ter combinações que não existem: "azul só vem em P e M". O lojista cadastra essas regras, e esta rota aplica-as à seleção atual do comprador. Chame-a a cada escolha para desabilitar na tela os valores que levariam a uma combinação indisponível.
É uma consulta (POST só para aceitar o corpo); nada é gravado.
/api/v1/storefront/products/{id}/apply-exceptionsPúblicaAplica as regras de combinação à seleção atual
Parâmetros de caminho
iduuidobrigatórioId do produto (UUID completo).
Corpo da requisição
selected_optionsobjectSeleção atual: mapa de id da opção para id do valor escolhido. Pode ser
\{\} ou omitido (nada escolhido ainda).Exemplo de requisição
bash
curl -X POST "$BASE_URL/api/v1/storefront/products/5e833a7f-1a77-402c-835a-32594350d7a7/apply-exceptions" \
-H "Content-Type: application/json" \
-d '{"selected_options": {"c1f0a6e2-0000-4000-8000-000000000001": "d2a1b7f3-0000-4000-8000-0000000000a1"}}'Resposta
200Estado das opções
json
{
"product_id": "5e833a7f-1a77-402c-835a-32594350d7a7",
"exceptions_type": "F",
"options": [
{
"id": "c1f0a6e2-0000-4000-8000-000000000001",
"product_id": "5e833a7f-1a77-402c-835a-32594350d7a7",
"name": "Cor",
"type": "select",
"required": true,
"position": 0,
"settings": {},
"values": [
{"id": "d2a1b7f3-0000-4000-8000-0000000000a1", "option_id": "c1f0a6e2-0000-4000-8000-000000000001", "value": "Azul", "price_modifier": 0, "price_modifier_type": "absolute", "weight_modifier": 0, "weight_modifier_type": "absolute", "sku_suffix": "-AZ", "position": 0}
],
"disabled": false,
"value_states": {"d2a1b7f3-0000-4000-8000-0000000000a1": true}
},
{
"id": "c1f0a6e2-0000-4000-8000-000000000002",
"product_id": "5e833a7f-1a77-402c-835a-32594350d7a7",
"name": "Tamanho",
"type": "select",
"required": true,
"position": 1,
"settings": {},
"values": [
{"id": "d2a1b7f3-0000-4000-8000-0000000000b1", "option_id": "c1f0a6e2-0000-4000-8000-000000000002", "value": "GG", "price_modifier": 500, "price_modifier_type": "absolute", "weight_modifier": 0, "weight_modifier_type": "absolute", "sku_suffix": "-GG", "position": 0}
],
"disabled": false,
"value_states": {"d2a1b7f3-0000-4000-8000-0000000000b1": false}
}
]
}Produto sem opções (resposta real da loja de teste):
200Sem opções
json
{"product_id":"5e833a7f-1a77-402c-835a-32594350d7a7","exceptions_type":"F","options":null}Campos da resposta
product_iduuidId do produto.
exceptions_typestringFAComo as regras do produto funcionam:
F (proibidas: as combinações cadastradas não podem ser compradas) ou A (permitidas: só as combinações cadastradas podem ser compradas).optionsarrayOpções do produto, ou
null quando ele não tem. Cada item traz os campos da opção (id, name, type, required, position, settings, values) mais o estado abaixo.options[].disabledbooleantrue quando a opção inteira está indisponível para a seleção atual.options[].value_statesobjectMapa de id do valor para
true (pode escolher) ou false (leva a uma combinação indisponível).options[].values[].price_modifierintegerAjuste de preço do valor: centavos quando
price_modifier_type é absolute; pontos-base quando é percentage. Vem 0 para visitante em loja que esconde preço.Erros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 400 | O corpo não é um JSON válido. | {"error":"invalid request body","detail":"invalid character 'x' looking for beginning of value"} |
| 404 | O produto não existe. | {"error":"product not found"} |