Saleor Metadata 쿼리와 필터
Mutation (4종)
updateMetadata(id: ID!, input: [MetadataInput!]!) # 공개 metadata 설정
updatePrivateMetadata(id: ID!, input: [MetadataInput!]!) # 비공개 metadata 설정
deleteMetadata(id: ID!, keys: [String!]!) # 공개 키 삭제
deletePrivateMetadata(id: ID!, keys: [String!]!) # 비공개 키 삭제MetadataInput의 value는 String 타입이다. JSON 객체 저장 시 JSON.stringify한 문자열로 넣어야 한다.
필터링
두 가지 방식이 공존한다.
# 방식 1: filter (기존)
products(filter: { metadata: [{ key: "color", value: "red" }] })
# 방식 2: where (3.14+, 더 강력)
products(where: { metadata: { key: "color", value: { eq: "red" } } })
# one_of 연산자도 지원: value: { one_of: ["red", "blue"] }내부 구현은 PostgreSQL @> (jsonb contains)와 ? (key exists) 연산자. GIN 인덱스 활용.
권한 규칙
metadata(공개): 해당 리소스 read 권한. Checkout/CheckoutLine은 권한 불필요 (익명 접근 가능)privateMetadata: 항상 관리 권한 필요- App은
MANAGE_STAFF필요한 metadata 뮤테이션 불가 (하드코딩 제한) private_metadata는 필터링 불가 — 공개 metadata만 필터 지원