# ===============================================
# PAGES
# ===============================================

extend type Query {
  pages: PageQuery
}

extend type Mutation {
  pages: PageMutation
}

# -----------------------------------------------
# QUERIES
# -----------------------------------------------

type PageQuery {
  list(
    filter: String
    orderBy: String
  ): [PageMinimal]

  single(
    id: Int
    path: String
    locale: String
    isPrivate: Boolean
  ): Page
}

# -----------------------------------------------
# MUTATIONS
# -----------------------------------------------

type PageMutation {
  create(
    content: String!
    description: String!
    editor: String!
    isPublished: Boolean!
    isPrivate: Boolean!
    locale: String!
    path: String!
    publishEndDate: Date
    publishStartDate: Date
    tags: [String]!
    title: String!
  ): PageResponse

  update(
    id: Int!
    content: String
    description: String
    editor: String
    isPrivate: Boolean
    isPublished: Boolean
    locale: String
    path: String
    publishEndDate: Date
    publishStartDate: Date
    tags: [String]
    title: String
  ): PageResponse

  delete(
    id: Int!
  ): DefaultResponse
}

# -----------------------------------------------
# TYPES
# -----------------------------------------------

type PageResponse {
  responseResult: ResponseStatus!
  page: Page
}

type PageMinimal {
  id: Int!
  name: String!
  userCount: Int
  createdAt: Date!
  updatedAt: Date!
}

type Page {
  id: Int!
  name: String!
  rights: [Right]
  users: [User]
  createdAt: Date!
  updatedAt: Date!
}