type Mutation {
  authenticateDiscordGuild (
    code: String!
  ): DiscordGuildAuthResponse
}


type Mutation {
  createQuest (
    quest: CreateQuestInput!
  ): CreateQuestOutput
}


type Mutation {
  createQuestCompletion (
    questCompletion: CreateQuestCompletionInput!
  ): CreateQuestCompletionOutput
}


type Mutation {
  saveGuildInformation (
    guildInformation: GuildInfoInput!
  ): SaveGuildResponse
}


type Mutation {
  updateExpiredIDXProfiles : ExpiredPlayerProfiles
}


type Mutation {
  updateIDXProfile (
    playerId: uuid
  ): CacheProcessOutput
}


type Mutation {
  updateQuestCompletion (
    updateData: UpdateQuestCompletionInput!
  ): UpdateQuestCompletionOutput
}




enum QuestRepetition_ActionEnum {
  UNIQUE
  PERSONAL
  RECURRING
}

enum QuestCompletionStatus_ActionEnum {
  ACCEPTED
  REJECTED
}

enum GuildType_ActionEnum {
  PROJECT
  SERVICE
  RESEARCH
  SOCIAL
  FUNDING
}

input CreateQuestInput {
  guildId : uuid!
  title : String!
  description : String
  externalLink : String
  repetition : QuestRepetition_ActionEnum
  cooldown : Int
  roleIds : [uuid]!
  skillIds : [uuid]!
}

input CreateQuestCompletionInput {
  questId : String!
  submissionLink : String
  submissionText : String
}

input UpdateQuestCompletionInput {
  questCompletionId : String!
  status : QuestCompletionStatus_ActionEnum!
}

input GuildInfoInput {
  uuid : String!
  guildname : String!
  name : String!
  type : GuildType_ActionEnum!
  description : String
  discordInviteUrl : String
  joinUrl : String
  logoUrl : String
  websiteUrl : String
  twitterUrl : String
  githubUrl : String
  membershipThroughDiscord : Boolean
  discordAdminRoles : [String]!
  discordMembershipRoles : [String]!
  daos : [GuildDaoInput!]
}

input GuildDaoInput {
  contractAddress : String!
  network : String!
  label : String
  url : String
}

type UpdateIDXProfileResponse {
  success : Boolean!
  ceramic : String!
  did : String
  ethereumAddress : String
  accountLinks : [String]
  fields : [String]
}

type CreateQuestOutput {
  success : Boolean!
  quest_id : uuid
  error : String
}

type CreateQuestCompletionOutput {
  success : Boolean!
  error : String
  quest_completion_id : uuid
}

type UpdateQuestCompletionOutput {
  success : Boolean!
  error : String
  quest_completion_id : uuid
}

type DiscordGuildAuthResponse {
  success : Boolean!
  guildname : String
  exists : Boolean
  error : String
}

type CacheProcessOutput {
  success : Boolean!
  queued : Boolean!
  error : String
}

type ExpiredPlayerProfiles {
  ids : [String]!
}

type SaveGuildResponse {
  success : Boolean
  error : String
}

