Restrições de Produtos
As restrições de produtos permitem configurar regras de acesso e venda vinculadas a uma Política Comercial específica. Elas são fundamentais para controlar quem pode visualizar ou comprar determinados itens baseando-se no contexto da loja.
Visão Geral
Diferente de configurações globais, as restrições operam no nível de política comercial. Atualmente, a principal restrição suportada é a idade mínima (requiredAge), utilizada para restringir produtos de conteúdo adulto ou controlados.
Entidades Envolvidas
- Produto (
productId): O item que receberá a regra. - Política Comercial (
tradePolicyId): A política comercial onde a regra será aplicada. - Permissão: É necessário o escopo PRODUCT_WRITE.
Chave Única de Restrição
Cada restrição é identificada de forma única pela combinação de productId e tradePolicyId. Esta chave composta garante que um produto possa ter comportamentos distintos em diferentes políticas comerciais, mas apenas uma configuração ativa por par.
Processamento em Lote
Os endpoints de restrição operam em lote (máximo de 100 itens por requisição) e seguem estas premissas:
1. Independência: Os itens são processados um a um. Se um falhar, os demais continuam sendo processados.
2. Feedback Detalhado: O campo error na resposta indica o status de cada item. Se estiver vazio (""), a operação para aquele item foi bem-sucedida.
3. Idempotência: No caso de remoção, se o par informado não existir, a API não retornará erro, pois o estado final desejado (inexistência do registro) já foi alcançado.
Notas e Considerações
Atualização de restrições de produtos
/products/restrictions
Cria ou atualiza as restrições de múltiplos produtos em lote.
Descrição
Executa o upsert das restrições. Se a combinação de productId e tradePolicyId já existir, os dados serão atualizados; caso contrário, um novo registro será criado.
Para entender as regras de processamento em lote e a chave única, consulte a Restrições de Produtos.
🔓 Permissão
Escopo: PRODUCT_WRITEHeaders Obrigatórios
| Header | Valor | Descrição |
|---|---|---|
Content-Type | application/json | Tipo de conteúdo da requisição |
Authorization | Bearer {userToken} | Token de autenticação do usuário |
Parâmetros do Corpo
| Parâmetro | Tipo | Obrigatório | Padrão | Descrição |
|---|---|---|---|---|
| products | array | ✅ | — | Lista de restrições. Máximo de 100 itens. |
| products.*.productId | integer | ✅ | — | ID do produto. |
| products.*.tradePolicyId | integer | ✅ | — | ID da política comercial vinculada. |
| products.*.requiredAge | integer | ✅ | 0 | Idade mínima exigida. Use 0 para remover a restrição etária. |
Exemplo de Requisição
1curl --request PUT \2 --url {{MAIN_URL}}/products/restrictions \3 --header "Authorization: Bearer {userToken}" \4 --header "Content-Type: application/json" \5 --data '{6 "products": [7 {8 "productId": 10,9 "tradePolicyId": 2,10 "requiredAge": 1811 }12 ]13 }'✅ Resposta de Sucesso
1{2 "status": true,3 "data": [4 {5 "productId": 10,6 "tradePolicyId": 2,7 "requiredAge": 18,8 "error": ""9 }10 ]11}⚠️ Possíveis Erros
| Código Interno | Código HTTP | Descrição |
|---|---|---|
| UAPPI_STORE_PRODUCT_NOT_FOUND | 404 | Produto não encontrado. |
| UAPPI_CORE_INVALID_TRADE_POLICY_ID | 404 | A(s) políticas comerciais não são permitidas ou não existem. |
Remoção de restrições de produtos
/products/restrictions
Remove as restrições de múltiplos produtos por pares de produto e política comercial.
Descrição
Esta rota exclui permanentemente o registro de restrição vinculado ao par productId + tradePolicyId. Após a remoção, o produto volta a se comportar como um item sem restrições dentro da política comercial informada.
Para entender as regras de processamento em lote e a chave única, consulte a Restrições de Produtos.
🔓 Permissão
Escopo: PRODUCT_WRITEHeaders Obrigatórios
| Header | Valor | Descrição |
|---|---|---|
Content-Type | application/json | Tipo de conteúdo da requisição |
Authorization | Bearer {userToken} | Token de autenticação do usuário |
Parâmetros do Corpo
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| products | array | ✅ | Lista de pares a serem removidos. Máximo de 100 itens. |
| products.*.productId | integer | ✅ | ID do produto. |
| products.*.tradePolicyId | integer | ✅ | ID da política comercial. |
Exemplo de Requisição
1curl --request DELETE \2 --url {{MAIN_URL}}/products/restrictions \3 --header "Authorization: Bearer {userToken}" \4 --header "Content-Type: application/json" \5 --data '{6 "products": [7 {8 "productId": 10,9 "tradePolicyId": 210 }11 ]12 }'✅ Resposta de Sucesso
A operação é idempotente: se o par não existir, o retorno será de sucesso com error: "".
1{2 "status": true,3 "data": [4 {5 "productId": 10,6 "tradePolicyId": 2,7 "error": ""8 }9 ]10}⚠️ Possíveis Erros
| Código Interno | Código HTTP | Descrição |
|---|---|---|
| UAPPI_STORE_PRODUCT_NOT_FOUND | 404 | Produto não encontrado. |
| UAPPI_CORE_INVALID_TRADE_POLICY_ID | 404 | A(s) políticas comerciais não são permitidas ou não existem. |