# ===============================================
# GROUPS
# ===============================================

extend type Query {
  groups: GroupQuery
}

extend type Mutation {
  groups: GroupMutation
}

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

type GroupQuery {
  list(
    filter: String
    orderBy: String
  ): [GroupMinimal]

  single(
    id: Int!
  ): Group
}

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

type GroupMutation {
  create(
    name: String!
  ): GroupResponse

  update(
    id: Int!
    name: String!
  ): DefaultResponse

  delete(
    id: Int!
  ): DefaultResponse

  assignUser(
    groupId: Int!
    userId: Int!
  ): DefaultResponse

  unassignUser(
    groupId: Int!
    userId: Int!
  ): DefaultResponse
}

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

type GroupResponse {
  responseResult: ResponseStatus!
  group: Group
}

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

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