'type Article {
  author: Profile!
  body: String!
  createdAt: DateTime!
  description: String!
  favorited: Boolean!
  favoritesCount: Int!
  slug: String!
  tagList: [String]!
  title: String!
  updatedAt: DateTime!
}

type Comment {
  author: Profile!
  body: String!
  createdAt: DateTime!
  id: Int!
  updatedAt: DateTime!
}

input LoginUserInput {
  email: String!
  password: String!
}

input LoginUserRequestInput {
  user: LoginUserInput!
}

type MultipleArticlesResponse {
  articles: [Article]!
  articlesCount: Int!
}

type MultipleCommentsResponse {
  comments: [Comment]!
}

type Mutation {
  "Create an article"
  CreateArticle(article: NewArticleRequestInput!): SingleArticleResponse
  "Create a comment for an article"
  CreateArticleComment(comment: NewCommentRequestInput!, slug: String!): SingleCommentResponse
  "Favorite an article"
  CreateArticleFavorite(slug: String!): SingleArticleResponse
  "Register a new user"
  CreateUser(body: NewUserRequestInput!): UserResponse
  "Delete an article"
  DeleteArticle(slug: String!): String
  "Delete a comment for an article"
  DeleteArticleComment(id: Int!, slug: String!): String
  "Unfavorite an article"
  DeleteArticleFavorite(slug: String!): SingleArticleResponse
  "Follow a user"
  FollowUserByUsername(username: String!): ProfileResponse
  "Existing user login"
  Login(body: LoginUserRequestInput!): UserResponse
  "Unfollow a user"
  UnfollowUserByUsername(username: String!): ProfileResponse
  "Update an article"
  UpdateArticle(article: UpdateArticleRequestInput!, slug: String!): SingleArticleResponse
  "Update current user"
  UpdateCurrentUser(body: UpdateUserRequestInput!): UserResponse
}

input NewArticleInput {
  body: String!
  description: String!
  tagList: [String]
  title: String!
}

input NewArticleRequestInput {
  article: NewArticleInput!
}

input NewCommentInput {
  body: String!
}

input NewCommentRequestInput {
  comment: NewCommentInput!
}

input NewUserInput {
  email: String!
  password: String!
  username: String!
}

input NewUserRequestInput {
  user: NewUserInput!
}

type Profile {
  bio: String!
  following: Boolean!
  image: String!
  username: String!
}

type ProfileResponse {
  profile: Profile!
}

type Query {
  "Get an article"
  GetArticle(slug: String!): SingleArticleResponse
  "Get comments for an article"
  GetArticleComments(slug: String!): MultipleCommentsResponse
  "Get recent articles globally"
  GetArticles(author: String, favorited: String, limit: Int, offset: Int, tag: String): MultipleArticlesResponse
  "Get recent articles from users you follow"
  GetArticlesFeed(limit: Int, offset: Int): MultipleArticlesResponse
  "Get current user"
  GetCurrentUser: UserResponse
  "Get a profile"
  GetProfileByUsername(username: String!): ProfileResponse
  "Get tags"
  get__tags: TagsResponse
}

type SingleArticleResponse {
  article: Article!
}

type SingleCommentResponse {
  comment: Comment!
}

type TagsResponse {
  tags: [String]!
}

input UpdateArticleInput {
  body: String
  description: String
  title: String
}

input UpdateArticleRequestInput {
  article: UpdateArticleInput!
}

input UpdateUserInput {
  bio: String
  email: String
  image: String
  token: String
  username: String
}

input UpdateUserRequestInput {
  user: UpdateUserInput!
}

type User {
  bio: String!
  email: String!
  image: String!
  token: String!
  username: String!
}

type UserResponse {
  user: User!
}
'
