# Enums

# Inputs

# Type

type Column{
    id: ID!
    platform: String!
    name: String!
    type: Int!
    formattedName: String!
    pipes: String
    align: String!
    key: String
    goToDetailPage: Boolean
    searchable: Boolean
    order: Int
}

type Platform{
    platform: String
}

# Mutations
extend type Mutation{
    createColumn(
        platform: String!
        name: String!
        type: Int!
        formattedName: String!
        pipes: String
        align: String!
        key: String
        goToDetailPage: Boolean
        searchable:Boolean): Column! @field(resolver: "ColumnMutation@create") @guard @canAccess(requiredRole: ["admin"])

    updateColumn(
        id: ID!
        platform: String!
        name: String!
        type: Int!
        formattedName: String!
        pipes: String
        align: String!
        key: String
        goToDetailPage: Boolean
        searchable: Boolean): Column @field(resolver: "ColumnMutation@update") @guard @canAccess(requiredRole: ["admin"])

    removeColumn(id: ID!): Column @delete @guard @canAccess(requiredRole: ["admin"])

    reorderColumns(
        order: [Int]!
    ): [Column] @field(resolver: "ColumnMutation@reorder") @guard @canAccess(requiredRole: ["admin"])
}

# Queries
extend type Query{
    findColumnById(id: Int @where(operator: "=")): [Column] @all @guard
    findAllColumns: [Column] @all @orderBy(column: "id", direction: ASC) @guard
    findPlatforms: [Platform] @field(resolver: "ColumnQuery@getPlatforms") @orderBy(column: "id", direction: ASC) @guard
    findColumnByPlatform(platform: String! @where(operator: "like")): [Column] @all @guard
    findAvailableColumnsFor(columnsfor: String ): JSON @field(resolver: "ColumnQuery@getAvailableColumns") @guard
}


