lib/api/structs/issue.ex

defmodule Noizu.Github.Issue do
  defstruct [
    :url,
    :repository_url,
    :labels_url,
    :comments_url,
    :events_url,
    :html_url,
    :id,
    :node_id,
    :number,
    :title,
    :user,
    :labels,
    :state,
    :locked,
    :assignee,
    :assignees,
    :milestone,
    :comments,
    :created_at,
    :updated_at,
    :closed_at,
    :author_association,
    :active_lock_reason,
    :body,
    :reactions,
    :timeline_url,
    :performed_via_github_app,
    :state_reason
  ]

  def format(issue, format)
  def format(issue, format) when is_list(issue) do
    Enum.map(issue, &format(&1, format))
  end
  def format(nil, _), do: nil
  def format(%__MODULE__{} = this, :basic) do
    labels = Noizu.Github.Label.format(this.labels, :basic)
    %{
      id: this.number,
      internal_id: this.id,
      url: this.html_url,
      labels: labels,
      title: this.title,
      body: this.body,
      state: this.state,
      reactions: this.reactions,
      user: Noizu.Github.User.format(this.user, :basic),
      assignee: Noizu.Github.User.format(this.assignee, :basic),
      assignees: Noizu.Github.User.format(this.assignees, :basic),
      milestone:  this.milestone,
      comments:  this.comments, #Noizu.Github.Comment.format(this.comments, :basic),
      created_at:  this.created_at,
      updated_at:  this.updated_at,
      closed_at:  this.closed_at,
    }
  end

  def from_json(%{
    url: url,
    repository_url: repository_url,
    labels_url:  labels_url,
    comments_url:  comments_url,
    events_url:  events_url,
    html_url:  html_url,
    id:  id,
    node_id:  node_id,
    number:  number,
    title:  title,
    user:  user,
    labels:  labels,
    state:  state,
    locked:  locked,
    assignee:  assignee,
    assignees:  assignees,
    milestone:  milestone,
    comments:  comments,
    created_at:  created_at,
    updated_at:  updated_at,
    closed_at:  closed_at,
    author_association:  author_association,
    active_lock_reason:  active_lock_reason,
    body:  body,
    reactions:  reactions,
    timeline_url:  timeline_url,
    performed_via_github_app:  performed_via_github_app,
    state_reason:  state_reason
  }) do
    assignees = Enum.map(assignees || [], &(Noizu.Github.User.from_json(&1)))
    %__MODULE__{
      url: url,
      repository_url: repository_url,
      labels_url: labels_url,
      comments_url: comments_url,
      events_url: events_url,
      html_url: html_url,
      id: id,
      node_id: node_id,
      number: number,
      title: title,
      user: Noizu.Github.User.from_json(user),
      labels: Noizu.Github.Label.from_json(labels),
      state: state,
      locked: locked,
      assignee: Noizu.Github.User.from_json(assignee),
      assignees: assignees,
      milestone: milestone,
      comments: comments,
      created_at: created_at,
      updated_at: updated_at,
      closed_at: closed_at,
      author_association: author_association,
      active_lock_reason: active_lock_reason,
      body: body,
      reactions: Noizu.Github.Reaction.from_json(reactions),
      timeline_url: timeline_url,
      performed_via_github_app: performed_via_github_app,
      state_reason: state_reason
    }
  end
end