# This file was generated. Do not edit manually.

schema {
    query: Query
    mutation: Mutation
}

type Category {
    icon: String!
    id: Long!
    name: String!
}

"Information about the offset pagination."
type CollectionSegmentInfo {
    "Indicates whether more items exist following the set defined by the clients arguments."
    hasNextPage: Boolean!
    "Indicates whether more items exist prior the set defined by the clients arguments."
    hasPreviousPage: Boolean!
}

"A segment of a collection."
type EntriesCollectionSegment {
    "A flattened list of the items."
    items: [Entry!]
    "Information to aid in pagination."
    pageInfo: CollectionSegmentInfo!
    totalCount: Int!
}

"A connection to a list of items."
type EntriesV2Connection {
    "A list of edges."
    edges: [EntriesV2Edge!]
    "A flattened list of the nodes."
    nodes: [Entry!]
    "Information to aid in pagination."
    pageInfo: PageInfo!
    "Identifies the total count of items in the connection."
    totalCount: Int!
}

"An edge in a connection."
type EntriesV2Edge {
    "A cursor for use in pagination."
    cursor: String!
    "The item at the end of the edge."
    node: Entry!
}

type Entry {
    author: String!
    authorId: UUID!
    categories: [Category!]!
    createdAt: DateTime!
    dependantReleases: [Release!]!
    description: String!
    downloads: Long!
    entryType: EntryType!
    icon: Image
    iconId: UUID
    id: Long!
    images: [Image!]!
    isDefault: Boolean!
    isOfficial: Boolean!
    latestRelease: Release
    latestReleaseId: Long
    layoutInfo: [LayoutInfo!]!
    name: String!
    pluginInfo: PluginInfo
    popularityScore: Float!
    releases: [Release!]!
    summary: String!
    tags: [Tag!]!
}

type Image {
    description: String
    entry: Entry
    entryId: Long
    height: Int!
    id: UUID!
    mimeType: String!
    name: String!
    size: Long!
    width: Int!
}

type LayoutInfo {
    deviceProvider: UUID!
    deviceType: RGBDeviceType!
    entry: Entry!
    entryId: Long!
    id: Long!
    logicalLayout: String
    model: String!
    physicalLayout: KeyboardLayoutType
    vendor: String!
}

type Mutation {
    addEntry(input: CreateEntryInput!): Entry
    addLayoutInfo(input: CreateLayoutInfoInput!): LayoutInfo
    removeEntry(id: Long!): Entry
    removeLayoutInfo(id: Long!): LayoutInfo!
    removeRelease(id: Long!): Release!
    setLayoutInfo(input: SetLayoutInfoInput!): [LayoutInfo!]!
    updateEntry(input: UpdateEntryInput!): Entry
    updateEntryImage(input: UpdateEntryImageInput!): Image
    updateRelease(input: UpdateReleaseInput!): Release
}

"Information about pagination in a connection."
type PageInfo {
    "When paginating forwards, the cursor to continue."
    endCursor: String
    "Indicates whether more edges exist following the set defined by the clients arguments."
    hasNextPage: Boolean!
    "Indicates whether more edges exist prior the set defined by the clients arguments."
    hasPreviousPage: Boolean!
    "When paginating backwards, the cursor to continue."
    startCursor: String
}

type PluginInfo {
    api: Int
    entry: Entry!
    entryId: Long!
    helpPage: String
    minmumVersion: String
    pluginGuid: UUID!
    repository: String
    requiresAdmin: Boolean!
    supportsLinux: Boolean!
    supportsOSX: Boolean!
    supportsWindows: Boolean!
    website: String
}

"A segment of a collection."
type PluginInfosCollectionSegment {
    "A flattened list of the items."
    items: [PluginInfo!]
    "Information to aid in pagination."
    pageInfo: CollectionSegmentInfo!
    totalCount: Int!
}

type Query {
    categories(order: [CategorySortInput!], where: CategoryFilterInput): [Category!]!
    entries(order: [EntrySortInput!], popular: Boolean, search: String, skip: Int, take: Int, where: EntryFilterInput): EntriesCollectionSegment
    entriesV2(
        "Returns the elements in the list that come after the specified cursor."
        after: String,
        "Returns the elements in the list that come before the specified cursor."
        before: String,
        "Returns the first _n_ elements from the list."
        first: Int,
        "Returns the last _n_ elements from the list."
        last: Int,
        order: [EntrySortInput!],
        popular: Boolean,
        search: String,
        where: EntryFilterInput
    ): EntriesV2Connection
    entry(id: Long!): Entry
    pluginInfo(pluginGuid: UUID!): PluginInfo
    pluginInfos(order: [PluginInfoSortInput!], skip: Int, take: Int, where: PluginInfoFilterInput): PluginInfosCollectionSegment
    popularEntries(where: EntryFilterInput): [Entry!]!
    release(id: Long!): Release
    searchEntries(input: String!, order: [EntrySortInput!], type: EntryType, where: EntryFilterInput): [Entry!]!
    searchKeyboardLayout(deviceProvider: UUID!, logicalLayout: String, model: String!, physicalLayout: KeyboardLayoutType!, vendor: String!): LayoutInfo
    searchLayout(deviceProvider: UUID!, deviceType: RGBDeviceType!, model: String!, vendor: String!): LayoutInfo
    submittedEntries(order: [EntrySortInput!], where: EntryFilterInput): [Entry!]!
}

type Release {
    changelog: String
    createdAt: DateTime!
    dependencies: [Entry!]!
    downloadSize: Long!
    downloads: Long!
    entry: Entry!
    entryId: Long!
    id: Long!
    md5Hash: String
    version: String!
}

type Tag {
    id: Long!
    name: String!
}

enum ApplyPolicy {
    AFTER_RESOLVER
    BEFORE_RESOLVER
    VALIDATION
}

enum EntryType {
    LAYOUT
    PLUGIN
    PROFILE
}

enum KeyboardLayoutType {
    ABNT
    ANSI
    ISO
    JIS
    KS
    UNKNOWN
}

enum RGBDeviceType {
    ALL
    COOLER
    DRAM
    FAN
    GAME_CONTROLLER
    GRAPHICS_CARD
    HEADSET
    HEADSET_STAND
    KEYBOARD
    KEYPAD
    LED_CONTROLLER
    LED_MATRIX
    LED_STRIPE
    MAINBOARD
    MONITOR
    MOUSE
    MOUSEPAD
    NONE
    SPEAKER
    UNKNOWN
}

enum SortEnumType {
    ASC
    DESC
}

"The `DateTime` scalar represents an ISO-8601 compliant date time type."
scalar DateTime

"The `Long` scalar type represents non-fractional signed whole 64-bit numeric values. Long can represent values between -(2^63) and 2^63 - 1."
scalar Long

scalar UUID

input BooleanOperationFilterInput {
    eq: Boolean
    neq: Boolean
}

input CategoryFilterInput {
    and: [CategoryFilterInput!]
    icon: StringOperationFilterInput
    id: LongOperationFilterInput
    name: StringOperationFilterInput
    or: [CategoryFilterInput!]
}

input CategorySortInput {
    icon: SortEnumType
    id: SortEnumType
    name: SortEnumType
}

input CreateEntryInput {
    categories: [Long!]!
    description: String!
    entryType: EntryType!
    isDefault: Boolean!
    name: String!
    summary: String!
    tags: [String!]!
}

input CreateLayoutInfoInput {
    deviceProvider: UUID!
    deviceType: RGBDeviceType!
    entryId: Long!
    logicalLayout: String
    model: String!
    physicalLayout: KeyboardLayoutType
    vendor: String!
}

input DateTimeOperationFilterInput {
    eq: DateTime
    gt: DateTime
    gte: DateTime
    in: [DateTime]
    lt: DateTime
    lte: DateTime
    neq: DateTime
    ngt: DateTime
    ngte: DateTime
    nin: [DateTime]
    nlt: DateTime
    nlte: DateTime
}

input EntryFilterInput {
    and: [EntryFilterInput!]
    author: StringOperationFilterInput
    authorId: UuidOperationFilterInput
    categories: ListFilterInputTypeOfCategoryFilterInput
    createdAt: DateTimeOperationFilterInput
    dependantReleases: ListFilterInputTypeOfReleaseFilterInput
    description: StringOperationFilterInput
    downloads: LongOperationFilterInput
    entryType: EntryTypeOperationFilterInput
    icon: ImageFilterInput
    iconId: UuidOperationFilterInput
    id: LongOperationFilterInput
    images: ListFilterInputTypeOfImageFilterInput
    isDefault: BooleanOperationFilterInput
    isOfficial: BooleanOperationFilterInput
    latestRelease: ReleaseFilterInput
    latestReleaseId: LongOperationFilterInput
    layoutInfo: ListFilterInputTypeOfLayoutInfoFilterInput
    name: StringOperationFilterInput
    or: [EntryFilterInput!]
    pluginInfo: PluginInfoFilterInput
    popularityScore: FloatOperationFilterInput
    releases: ListFilterInputTypeOfReleaseFilterInput
    summary: StringOperationFilterInput
    tags: ListFilterInputTypeOfTagFilterInput
}

input EntrySortInput {
    author: SortEnumType
    authorId: SortEnumType
    createdAt: SortEnumType
    description: SortEnumType
    downloads: SortEnumType
    entryType: SortEnumType
    icon: ImageSortInput
    iconId: SortEnumType
    id: SortEnumType
    isDefault: SortEnumType
    isOfficial: SortEnumType
    latestRelease: ReleaseSortInput
    latestReleaseId: SortEnumType
    name: SortEnumType
    pluginInfo: PluginInfoSortInput
    popularityScore: SortEnumType
    summary: SortEnumType
}

input EntryTypeOperationFilterInput {
    eq: EntryType
    in: [EntryType!]
    neq: EntryType
    nin: [EntryType!]
}

input FloatOperationFilterInput {
    eq: Float
    gt: Float
    gte: Float
    in: [Float]
    lt: Float
    lte: Float
    neq: Float
    ngt: Float
    ngte: Float
    nin: [Float]
    nlt: Float
    nlte: Float
}

input ImageFilterInput {
    and: [ImageFilterInput!]
    description: StringOperationFilterInput
    entry: EntryFilterInput
    entryId: LongOperationFilterInput
    height: IntOperationFilterInput
    id: UuidOperationFilterInput
    mimeType: StringOperationFilterInput
    name: StringOperationFilterInput
    or: [ImageFilterInput!]
    size: LongOperationFilterInput
    width: IntOperationFilterInput
}

input ImageSortInput {
    description: SortEnumType
    entry: EntrySortInput
    entryId: SortEnumType
    height: SortEnumType
    id: SortEnumType
    mimeType: SortEnumType
    name: SortEnumType
    size: SortEnumType
    width: SortEnumType
}

input IntOperationFilterInput {
    eq: Int
    gt: Int
    gte: Int
    in: [Int]
    lt: Int
    lte: Int
    neq: Int
    ngt: Int
    ngte: Int
    nin: [Int]
    nlt: Int
    nlte: Int
}

input LayoutInfoFilterInput {
    and: [LayoutInfoFilterInput!]
    deviceProvider: UuidOperationFilterInput
    deviceType: RGBDeviceTypeOperationFilterInput
    entry: EntryFilterInput
    entryId: LongOperationFilterInput
    id: LongOperationFilterInput
    logicalLayout: StringOperationFilterInput
    model: StringOperationFilterInput
    or: [LayoutInfoFilterInput!]
    physicalLayout: NullableOfKeyboardLayoutTypeOperationFilterInput
    vendor: StringOperationFilterInput
}

input LayoutInfoInput {
    deviceProvider: UUID!
    deviceType: RGBDeviceType!
    logicalLayout: String
    model: String!
    physicalLayout: KeyboardLayoutType
    vendor: String!
}

input ListFilterInputTypeOfCategoryFilterInput {
    all: CategoryFilterInput
    any: Boolean
    none: CategoryFilterInput
    some: CategoryFilterInput
}

input ListFilterInputTypeOfEntryFilterInput {
    all: EntryFilterInput
    any: Boolean
    none: EntryFilterInput
    some: EntryFilterInput
}

input ListFilterInputTypeOfImageFilterInput {
    all: ImageFilterInput
    any: Boolean
    none: ImageFilterInput
    some: ImageFilterInput
}

input ListFilterInputTypeOfLayoutInfoFilterInput {
    all: LayoutInfoFilterInput
    any: Boolean
    none: LayoutInfoFilterInput
    some: LayoutInfoFilterInput
}

input ListFilterInputTypeOfReleaseFilterInput {
    all: ReleaseFilterInput
    any: Boolean
    none: ReleaseFilterInput
    some: ReleaseFilterInput
}

input ListFilterInputTypeOfTagFilterInput {
    all: TagFilterInput
    any: Boolean
    none: TagFilterInput
    some: TagFilterInput
}

input LongOperationFilterInput {
    eq: Long
    gt: Long
    gte: Long
    in: [Long]
    lt: Long
    lte: Long
    neq: Long
    ngt: Long
    ngte: Long
    nin: [Long]
    nlt: Long
    nlte: Long
}

input NullableOfKeyboardLayoutTypeOperationFilterInput {
    eq: KeyboardLayoutType
    in: [KeyboardLayoutType]
    neq: KeyboardLayoutType
    nin: [KeyboardLayoutType]
}

input PluginInfoFilterInput {
    and: [PluginInfoFilterInput!]
    api: IntOperationFilterInput
    entry: EntryFilterInput
    entryId: LongOperationFilterInput
    helpPage: StringOperationFilterInput
    minmumVersion: StringOperationFilterInput
    or: [PluginInfoFilterInput!]
    pluginGuid: UuidOperationFilterInput
    repository: StringOperationFilterInput
    requiresAdmin: BooleanOperationFilterInput
    supportsLinux: BooleanOperationFilterInput
    supportsOSX: BooleanOperationFilterInput
    supportsWindows: BooleanOperationFilterInput
    website: StringOperationFilterInput
}

input PluginInfoSortInput {
    api: SortEnumType
    entry: EntrySortInput
    entryId: SortEnumType
    helpPage: SortEnumType
    minmumVersion: SortEnumType
    pluginGuid: SortEnumType
    repository: SortEnumType
    requiresAdmin: SortEnumType
    supportsLinux: SortEnumType
    supportsOSX: SortEnumType
    supportsWindows: SortEnumType
    website: SortEnumType
}

input RGBDeviceTypeOperationFilterInput {
    eq: RGBDeviceType
    in: [RGBDeviceType!]
    neq: RGBDeviceType
    nin: [RGBDeviceType!]
}

input ReleaseFilterInput {
    and: [ReleaseFilterInput!]
    changelog: StringOperationFilterInput
    createdAt: DateTimeOperationFilterInput
    dependencies: ListFilterInputTypeOfEntryFilterInput
    downloadSize: LongOperationFilterInput
    downloads: LongOperationFilterInput
    entry: EntryFilterInput
    entryId: LongOperationFilterInput
    id: LongOperationFilterInput
    md5Hash: StringOperationFilterInput
    or: [ReleaseFilterInput!]
    version: StringOperationFilterInput
}

input ReleaseSortInput {
    changelog: SortEnumType
    createdAt: SortEnumType
    downloadSize: SortEnumType
    downloads: SortEnumType
    entry: EntrySortInput
    entryId: SortEnumType
    id: SortEnumType
    md5Hash: SortEnumType
    version: SortEnumType
}

input SetLayoutInfoInput {
    entryId: Long!
    layoutInfo: [LayoutInfoInput!]!
}

input StringOperationFilterInput {
    and: [StringOperationFilterInput!]
    contains: String
    endsWith: String
    eq: String
    in: [String]
    ncontains: String
    nendsWith: String
    neq: String
    nin: [String]
    nstartsWith: String
    or: [StringOperationFilterInput!]
    startsWith: String
}

input TagFilterInput {
    and: [TagFilterInput!]
    id: LongOperationFilterInput
    name: StringOperationFilterInput
    or: [TagFilterInput!]
}

input UpdateEntryImageInput {
    description: String
    id: UUID!
    name: String!
}

input UpdateEntryInput {
    categories: [Long!]!
    description: String!
    id: Long!
    isDefault: Boolean!
    name: String!
    summary: String!
    tags: [String!]!
}

input UpdateReleaseInput {
    changelog: String
    id: Long!
}

input UuidOperationFilterInput {
    eq: UUID
    gt: UUID
    gte: UUID
    in: [UUID]
    lt: UUID
    lte: UUID
    neq: UUID
    ngt: UUID
    ngte: UUID
    nin: [UUID]
    nlt: UUID
    nlte: UUID
}
