# ===============================================
# USERS
# ===============================================

extend type Query {
  users: UserQuery
}

extend type Mutation {
  users: UserMutation
}

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

type UserQuery {
  list(
    filter: String
    orderBy: String
  ): [UserMinimal]

  search(
    query: String!
  ): [UserMinimal]

  single(
    id: Int!
  ): User
}

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

type UserMutation {
  create(
    email: String!
    name: String
    passwordRaw: String
    provider: String!
    providerId: String
    role: UserRole!
  ): UserResponse

  update(
    id: Int!
    email: String
    name: String
    provider: String
    providerId: String
    role: UserRole
  ): UserResponse

  delete(
    id: Int!
  ): DefaultResponse

  resetPassword(
    id: Int!
  ): DefaultResponse

  setPassword(
    id: Int!
    passwordRaw: String!
  ): DefaultResponse
}

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

enum UserRole {
  guest
  user
  admin
}

type UserResponse {
  responseResult: ResponseStatus!
  user: User
}

type UserMinimal {
  id: Int!
  name: String!
  email: String!
  providerKey: String!
}

type User {
  id: Int!
  name: String!
  email: String!
  providerKey: String!
  providerId: String
  role: UserRole!
  createdAt: Date!
  updatedAt: Date!
  groups: [Group]
}