Przejdź do głównej zawartości

Zestawy atrybutów

Zestawy atrybutów grupują definicje ProductAttribute w wielokrotnie używane schematy. Każdy produkt jest podpięty do dokładnie jednego zestawu; system dostarcza zestaw default, który stosuje się, gdy admini nie wybiorą innego.

Po co istnieją​

Bez zestawów każdy produkt niósłby pełny graf atrybutów w attributeValues. Różne typy produktów (elektronika, odzież, chemia) potrzebują różnych atrybutów, ale schemat bazowy traktował każdy klucz jako globalny. Zestawy pozwalają adminom kuratorować skupione doświadczenie autorskie per kategoria, a storefrontowi renderować ciaśniejszą tabelę atrybutów.

Publiczne API​

Verb + PathOdbiorcaCel
GET /api/v1/admin/catalog/attribute-setsadminLista wszystkich zestawów łącznie z default
GET /api/v1/admin/catalog/attribute-sets/:idadminSzczegóły zestawu z przypisanymi atrybutami
POST /api/v1/admin/catalog/attribute-setsadminUtworzenie własnego zestawu (code snake_case, unikalny)
PATCH /api/v1/admin/catalog/attribute-sets/:idadminAktualizacja nazwy; systemowy Default jest niemutowalny
DELETE /api/v1/admin/catalog/attribute-sets/:idadminUsunięcie; odrzuca z 409, gdy jakikolwiek produkt odwołuje się do zestawu
POST /api/v1/admin/catalog/attribute-sets/:id/attributesadminPrzypisanie atrybutów do zestawu
DELETE /api/v1/admin/catalog/attribute-sets/:id/attributes/:keyadminOdpięcie

Payload tworzenia/aktualizacji produktu akceptuje attributeSetId. Gdy pominięty, używany jest systemowy Default Set.

Błędy​

CodeStatusKiedy
ATTRIBUTE_SET_CODE_TAKEN409code już istnieje
ATTRIBUTE_SET_IN_USE409Usunięcie zablokowane: co najmniej jeden produkt odwołuje się do zestawu
SYSTEM_ATTRIBUTE_SET_IMMUTABLE409Mutacja seedowanego Default Set
ATTRIBUTE_SET_NOT_FOUND404Brak :id
ATTRIBUTE_NOT_FOUND404Brak :key przy przypisaniu

Integracja ze storefrontem​

productDetail.attributeSet niesie {id, code, name}, żeby motywy mogły renderować etykietę zestawu nad tabelą atrybutów. Motyw referencyjny foundation renderuje zlokalizowaną nazwę zestawu jako mały podnagłówek.

Magazynowanie​

attribute_sets (id, code unique, name jsonb, is_system bool) + attribute_set_attributes (composite PK na (set_id, attribute_id)). Systemowy wiersz Default jest seedowany migracją 017 ze deterministycznym UUID defa0017-0000-4000-8000-000000000000, żeby seedy i testy mogły się do niego odwoływać stabilnie.

Dziennik audytu​

CRUD AttributeSet zapisuje jeden AuditLogEntry na mutację z stateBefore i stateAfter, żeby strona audytu pokazywała, kto co zmienił.