extend type Mutation {
  inviteProjectMembers(input: InviteProjectMembers!):
    InviteProjectMembersPayload! @hasRole(roles: [ADMIN], level: PROJECT, type: PROJECT)
  deleteProjectMember(input: DeleteProjectMember!):
    DeleteProjectMemberPayload! @hasRole(roles: [ADMIN], level: PROJECT, type: PROJECT)
  updateProjectMemberRole(input: UpdateProjectMemberRole!):
    UpdateProjectMemberRolePayload! @hasRole(roles: [ADMIN], level: PROJECT, type: PROJECT)

  deleteInvitedProjectMember(input: DeleteInvitedProjectMember!):
    DeleteInvitedProjectMemberPayload! @hasRole(roles: [ADMIN], level: PROJECT, type: PROJECT)
}

input DeleteInvitedProjectMember {
  projectID: UUID!
  email: String!
}

type DeleteInvitedProjectMemberPayload {
  invitedMember: InvitedMember!
}

input MemberInvite {
  userID: UUID
  email: String
}

input InviteProjectMembers {
  projectID: UUID!
  members: [MemberInvite!]!
}

type InviteProjectMembersPayload {
  ok: Boolean!
  projectID: UUID!
  members: [Member!]!
  invitedMembers: [InvitedMember!]!
}

input DeleteProjectMember {
  projectID: UUID!
  userID: UUID!
}

type DeleteProjectMemberPayload {
  ok: Boolean!
  member: Member!
  projectID: UUID!
}

input UpdateProjectMemberRole {
  projectID: UUID!
  userID: UUID!
  roleCode: RoleCode!
}

type UpdateProjectMemberRolePayload {
  ok: Boolean!
  member: Member!
}
