@startuml

hide methods
enum ReferenceTypeId {
    ASSOCIATE_ROLE
    ATTRIBUTE_GROUP
    BUSINESS_UNIT
    CART
    CART_DISCOUNT
    CATEGORY
    CHANNEL
    CUSTOMER
    CUSTOMER_GROUP
    DIRECT_DISCOUNT
    DISCOUNT_CODE
    EXTENSION
    INVENTORY_ENTRY
    KEY_VALUE_DOCUMENT
    ORDER
    ORDER_EDIT
    PAYMENT
    PRODUCT
    PRODUCT_DISCOUNT
    PRODUCT_PRICE
    PRODUCT_SELECTION
    PRODUCT_TYPE
    QUOTE
    QUOTE_REQUEST
    REVIEW
    SHIPPING_METHOD
    SHOPPING_LIST
    STAGED_QUOTE
    STANDALONE_PRICE
    STATE
    STORE
    SUBSCRIPTION
    TAX_CATEGORY
    TYPE
    ZONE
}
interface KeyReference [[KeyReference.svg]]  {
    typeId: [[ReferenceTypeId.svg ReferenceTypeId]]
    key: String
}
interface Reference [[Reference.svg]]  {
    typeId: [[ReferenceTypeId.svg ReferenceTypeId]]
    id: String
}
interface ResourceIdentifier [[ResourceIdentifier.svg]]  {
    typeId: [[ReferenceTypeId.svg ReferenceTypeId]]
    id: String
    key: String
}
interface MaxResourceLimitExceededError [[MaxResourceLimitExceededError.svg]]  {
    code: String
    message: String
    exceededResource: [[ReferenceTypeId.svg ReferenceTypeId]]
}
interface ReferenceExistsError [[ReferenceExistsError.svg]]  {
    code: String
    message: String
    referencedBy: [[ReferenceTypeId.svg ReferenceTypeId]]
}
interface ReferencedResourceNotFoundError [[ReferencedResourceNotFoundError.svg]]  {
    code: String
    message: String
    typeId: [[ReferenceTypeId.svg ReferenceTypeId]]
    id: String
    key: String
}
interface GraphQLMaxResourceLimitExceededError [[GraphQLMaxResourceLimitExceededError.svg]]  {
    code: String
    exceededResource: [[ReferenceTypeId.svg ReferenceTypeId]]
}
interface GraphQLReferenceExistsError [[GraphQLReferenceExistsError.svg]]  {
    code: String
    referencedBy: [[ReferenceTypeId.svg ReferenceTypeId]]
}
interface GraphQLReferencedResourceNotFoundError [[GraphQLReferencedResourceNotFoundError.svg]]  {
    code: String
    typeId: [[ReferenceTypeId.svg ReferenceTypeId]]
    id: String
    key: String
}
ReferenceTypeId --> KeyReference #green;text:green : "typeId"
ReferenceTypeId --> Reference #green;text:green : "typeId"
ReferenceTypeId --> ResourceIdentifier #green;text:green : "typeId"
ReferenceTypeId --> MaxResourceLimitExceededError #green;text:green : "exceededResource"
ReferenceTypeId --> ReferenceExistsError #green;text:green : "referencedBy"
ReferenceTypeId --> ReferencedResourceNotFoundError #green;text:green : "typeId"
ReferenceTypeId --> GraphQLMaxResourceLimitExceededError #green;text:green : "exceededResource"
ReferenceTypeId --> GraphQLReferenceExistsError #green;text:green : "referencedBy"
ReferenceTypeId --> GraphQLReferencedResourceNotFoundError #green;text:green : "typeId"
@enduml
