# 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!
}

type Entry {
    author: String!
    authorId: UUID!
    categories: [Category!]!
    createdAt: DateTime!
    description: String!
    downloads: Long!
    entryType: EntryType!
    icon: Image
    iconId: UUID
    id: Long!
    images: [Image!]!
    latestRelease: Release
    latestReleaseId: Long
    name: String!
    releases: [Release!]!
    summary: String!
    tags: [Tag!]!
}

type Image {
    id: UUID!
    mimeType: String!
}

type Mutation {
    addEntry(input: CreateEntryInput!): Entry
    removeEntry(id: Long!): Entry
    updateEntry(input: UpdateEntryInput!): Entry
}

type Query {
    categories(order: [CategorySortInput!], where: CategoryFilterInput): [Category!]!
    entries(order: [EntrySortInput!], search: String, skip: Int, take: Int, where: EntryFilterInput): EntriesCollectionSegment
    entry(id: Long!): Entry
    searchEntries(input: String!, order: [EntrySortInput!], type: EntryType, where: EntryFilterInput): [Entry!]!
    submittedEntries(order: [EntrySortInput!], where: EntryFilterInput): [Entry!]!
}

type Release {
    createdAt: DateTime!
    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 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 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!
    name: String!
    summary: String!
    tags: [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
    description: StringOperationFilterInput
    downloads: LongOperationFilterInput
    entryType: EntryTypeOperationFilterInput
    icon: ImageFilterInput
    iconId: UuidOperationFilterInput
    id: LongOperationFilterInput
    images: ListFilterInputTypeOfImageFilterInput
    latestRelease: ReleaseFilterInput
    latestReleaseId: LongOperationFilterInput
    name: StringOperationFilterInput
    or: [EntryFilterInput!]
    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
    latestRelease: ReleaseSortInput
    latestReleaseId: SortEnumType
    name: SortEnumType
    summary: SortEnumType
}

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

input ImageFilterInput {
    and: [ImageFilterInput!]
    id: UuidOperationFilterInput
    mimeType: StringOperationFilterInput
    or: [ImageFilterInput!]
}

input ImageSortInput {
    id: SortEnumType
    mimeType: SortEnumType
}

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

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

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 ReleaseFilterInput {
    and: [ReleaseFilterInput!]
    createdAt: DateTimeOperationFilterInput
    downloadSize: LongOperationFilterInput
    downloads: LongOperationFilterInput
    entry: EntryFilterInput
    entryId: LongOperationFilterInput
    id: LongOperationFilterInput
    md5Hash: StringOperationFilterInput
    or: [ReleaseFilterInput!]
    version: StringOperationFilterInput
}

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

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 UpdateEntryInput {
    categories: [Long!]!
    description: String!
    id: Long!
    name: String!
    summary: String!
    tags: [String!]!
}

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
}
