scalar Violation

interface NodeInterface {
  id: Int!
  uuid: String!
  title: String!
  path: String!
  author: String
  bundle: String!
}

interface SearchResultInterface {
  id: Int!
  uuid: String!
  title: String!
  path: String!
  author: String
  bundle: String!
  #
  short_description: String
  body: String
  linked_materials: [Materiau]
}

type Materiau implements NodeInterface & SearchResultInterface{
  id: Int!
  uuid: String!
  title: String!
  path: String!
  author: String
  bundle: String!
  #
  short_description: String
  body: String
  linked_materials: [Materiau]
  #
  linked_articles: [Article]
  images: [Image]
  videos: [VideoLink]
  tags: [Tag]
  thesaurus: [Thesaurus]
  memo: String
  attachments: [Filefield]
  distributor: [Company]
  manufacturer: [Company]
  reference: String
  samples: [Sample]
  note: Note
  note_id: Int
  # famille: String
  # index: Int
}

type Thematique implements NodeInterface & SearchResultInterface {
  id: Int!
  uuid: String!
  title: String!
  path: String!
  author: String
  bundle: String!
  #
  short_description: String
  body: String
  linked_materials: [Materiau]
  #
  images: [Image]
  tags: [Tag]
  memo: String
}

type Article implements NodeInterface {
  id: Int!
  uuid: String!
  title: String!
  path: String!
  author: String
  bundle: String!
  #
  body: String
  linked_materials: [Materiau]
  images: [Image]
  videos: [VideoLink]
  source: Link
  showroom: Showroom
  tags: [Tag]
  thesaurus: [Thesaurus]
  date: Date
  memo: String
}

type Note {
  id: Int!
  contenu: String
  target: Int
}

# type SearchResult {
#   id: Int!
#   uuid: String!
#   title: String!
#   bundle: String!
#   path: String!
#   short_description: String
#   images: [Image]
#   visuels: [Image]
#   reference: String
#   samples: [Sample]
# }

type Product {
  id: Int!
  uuid: String!
  title: String
  bundle: String
  body: String
  price_description: String
  path: String
  variations: [Variation]
}

type Variation {
  id: Int!
  uuid: String!
  title: String
  description: String
  subscription_type: String
  sku: String
  price: Price
  product_id: Int
  # list_price
  # billing_schedule
  # license_expiration
  # license_type
  # field_multiple
}

type Price {
  value: Int
  currency: String
}

type Sample {
  showroom: Showroom
  location: String
}

type Filefield {
  file: File!
  description: String
}

type File {
  fid: String!
  uuid: String!
  filename: String!
  filemime: String!
  filesize: String!
  url: String!
}

type Link {
  url: String
  title: String
}

type Showroom {
  id: Int!
  uuid: String!
  name: String!
  images: [Image]
  email: String
  address: Address
  phone: String
}

type Company {
  id: Int!
  uuid: String!
  name: String!
  description: String
  attachments: [Filefield]
  memo: String
  note: Int
  website: Link
  departement: String
  email: String
  address: Address
  phone: String
  infos: String
}

type Tag {
  id: Int!
  uuid: String!
  name: String!
}

type Thesaurus {
  id: Int!
  uuid: String!
  name: String!
}

type Address {
  langcode: String
  country_code: String
  administrative_area: String
  locality: String
  dependent_locality: String
  postal_code: String
  sorting_code: String
  address_line1: String
  address_line2: String
  organization: String
  given_name: String
  additional_name: String
  family_name: String
}


type Date {
  start: String
  end: String
}

type VideoLink {
  url: String
}

type Image {
  id: Int!
  url: String!
  alt: String
  style_minicard: ImageStyle
  style_minicard_url: String
  style_linkedmaterialcard: ImageStyle
  style_linkedmaterialcard_url: String
  style_cardmedium: ImageStyle
  style_cardmedium_url: String
  style_cardfull: ImageStyle
  style_cardfull_url: String
  style_articlecardmedium: ImageStyle
  style_articlecardmedium_url: String
  style_hd: ImageStyle
  style_hd_url: String
}

type ImageStyle {
  width: Int
  height: Int
  url: String
}
