Pular para o conteúdo principal

Assets vs Options

A plataforma separa as características de um produto em dois tipos fundamentais. Entender essa distinção é essencial para configurar produtos corretamente.

Assets (Ativos)

Características estruturais/de fabricação. Definem o que será produzido fisicamente.

  • Afetam custo de produção e logística
  • Cada combinação de assets = uma ProductVariant com seu próprio custo
  • Exemplos: tamanho (350ml/700ml), acabamento (brilhante/fosco), material (algodão/poliéster)

:::warning Regra Se muda o que é fabricado e impacta no custo de produção → é Asset. :::

Options (Opções)

Características puramente visuais. O cliente escolhe na hora da compra, mas NÃO afetam preço nem fabricação.

  • Controlam quais renders (mockups) são exibidos na galeria
  • Exemplos: cor (preto/branco), lado (frente/costas), orientação (retrato/paisagem)

:::tip Regra Se é apenas visual e não muda custo → é Option. :::

Comparação

AssetsOptions
Afeta preço?Indiretamente (cada variante tem preço próprio)Nunca
Afeta fabricação?SimNunca
Afeta galeria?Sim (sempre filtra)Depende do displayBehavior
Quem define?Admin (por ProductType)Admin (por ProductType)
Quem escolhe?Cliente (seleciona variante)Cliente (seleciona opção visual)

Regra de seleção única

Tanto assets quanto options seguem a regra de uma value por key. O formato é sempre dict[str, str]:

{ "size": "350ml", "finish": "glossy" }

:::danger Nunca múltiplos valores por key

// ERRADO
{ "size": ["350ml", "700ml"] }

:::

Onde cada um é armazenado

RecursoCampoQuem defineSignificado
ProductVariantassetsAdminCombinação de assets = 1 variant com seu custo
TemplateassetsAdminMatch exato com a variant
Templateoptions (nullable)AdminMatch opcional — filtra renders por option
SellerProductVariantallowed_optionsSellerQuais options permitir. {} = todas do ProductType
informação

Options não ficam na variant. A variant define apenas assets (o que é fabricado). Options são escolhidas pelo cliente na hora da compra e usadas para filtrar os renders/templates exibidos na galeria.

Campos da Option

Cada option tem campos que orientam o frontend sobre como renderizar o seletor:

CampoValores possíveisO que faz
inputTypeselect, radio, color_pickerTipo de input HTML do frontend
displayBehaviorfilter, show_allComo afeta a galeria de renders
requiredtrue, falseSe o cliente deve selecionar um valor antes de comprar

Display Behavior

ValorComportamentoExemplo
filterFiltra galeria pelo valor selecionadoCor: ao selecionar "preto", só mostra renders de cor preta
show_allMostra todos os renders, independente da seleçãoLado: sempre mostra frente + costas

Exemplo prático

Option "color" (inputType: color_picker, displayBehavior: filter)
→ Frontend renderiza círculos coloridos (usando hexColor de cada value)
→ Ao clicar em "Preto", filtra galeria para só mostrar renders pretos

Option "side" (inputType: radio, displayBehavior: show_all)
→ Frontend renderiza botões "Frente" / "Costas"
→ Galeria sempre mostra ambos os lados, independente da seleção

Desativação e impacto

Todos os deletes são soft delete (is_active = false). A desativação não é automática em cascata.

Desativar um Asset (ex: size=350ml)

Recurso afetadoO que aconteceAutomático?
ProductVariant com esse assetContinua existindo, mas não deveria ser vendidaNão — admin desativa manualmente
Template com esse assetContinua existindo, mas não deveria ser usadoNão — admin desativa manualmente
SellerProductVariant vinculadaContinua existindo, mas venda deveria ser bloqueadaNão — admin deve agir
informação

Desativar um asset é raro (parar de fabricar um tamanho). O admin deve desativar a variant, os templates e os SKUs dos sellers que a usam. Pedidos existentes não são afetados (têm snapshot de preços).

Desativar uma Option (ex: color)

Recurso afetadoO que aconteceAutomático?
ProductVariantNenhum impacto — variants não têm options
Template com essa optionA API filtra options inativas ao retornar dados públicosSim (filtra na resposta)
SellerProductVariant com allowedOptions usando essa keyA option some do seletor do clienteSim (filtra na resposta)

:::warning Filtra na resposta, não limpa o banco O backend filtra options inativas ao retornar dados públicos, mas não limpa o campo allowedOptions do SellerProductVariant no banco. Se você reativar a option depois, ela volta a aparecer. Se você migrar/exportar dados, pode ver valores órfãos. :::

dica

Desativar uma option é mais seguro que desativar um asset — como options não afetam fabricação nem preço, o impacto é apenas visual.

Desativar um Option Value (ex: color=red)

Recurso afetadoO que aconteceAutomático?
Seletor no frontendValue red desaparece das opções do clienteSim
Template com options: { color: "red" }Não aparece mais ao selecionar red (fica efetivamente invisível)Sim

Desativar uma Variant

Recurso afetadoO que acontece
SellerProductVariant que referenciaContinua existindo, mas venda deveria ser bloqueada
TemplateContinua existindo (sem relação direta com a variant)
Pedidos em andamentoNão são cancelados — o pedido tem snapshot completo

Desativar um ProductType

Recurso afetadoO que acontece
SellerProducts existentesContinuam visíveis nas lojas dos sellers
Novos seller productsAPI impede criação

Resumo de desativação

Recurso desativadoImpacto em cascata
AssetNenhum automático — admin desativa variants/templates/SKUs manualmente
OptionAPI filtra na resposta, mas não limpa allowedOptions no banco
Option ValueSome do seletor; templates usando esse value ficam invisíveis
VariantAPI bloqueia criação de novas vendas; pedidos existentes intactos
ProductTypeAPI impede criação de novos seller products; existentes continuam

Regras rápidas

  • Assets afetam fabricação e custo → definem o que é produzido
  • Options são puramente visuais → nunca afetam preço
  • Uma value por key → formato {"key": "value"}, nunca arrays
  • Options não ficam na variant → variant define apenas assets
  • Options não afetam qual SKU é selecionado → SKU = combinação de assets
  • Desativação não é automática em cascata → admin desativa manualmente