@startuml
class Platform {
  + String platformKey
  + String name
  + String groupId
  + String artifactId
  + Map<String,Object> metadata
  + boolean isDefault
}

class PlatformStream {
  + String streamKey
  - String streamKeySortable
  + String name
  + boolean unlisted
  + Map<String,Object> metadata
}

class PlatformRelease {
  + String version
  - String versionSortable
  + String quarkusCoreVersion
  + boolean pinned
  + boolean unlisted
  + String upstreamQuarkusCoreVersion
  + List<String> memberBoms
  + Map<String,Object> metadata
}

class PlatformExtension {
  + Map<String,Object> metadata
}

class Extension {
  + String groupId
  + String artifactId
  + String name
  + String description
}

class ExtensionRelease {
  + String version
  - String versionSortable
  - String quarkusCoreVersionSortable
  + Map<String,Object> metadata
  + String quarkusCore
}

class Category {
  + String name
  + String description
  + Map<String,Object> metadata
}

class ExtensionReleaseCompatibility {
  + String quarkusCoreVersion
  + boolean compatible
}

note right of PlatformRelease::memberBoms
  This is stored as a JSON array
end note

Platform         *-- PlatformStream
PlatformStream   *-- PlatformRelease
PlatformRelease  *-- PlatformExtension

Extension        *-- ExtensionRelease
ExtensionRelease o-- PlatformExtension
ExtensionRelease <-- ExtensionReleaseCompatibility
@enduml