json.total_count @projects.total_count
json.projects @projects.each do |project|
  json.(project, :id, :name, :identifier, :description, :forked_count, :praises_count, :forked_from_project_id, :is_public)
  json.mirror_url project.repository&.mirror_url
  json.type project.numerical_for_project_type
  json.praised project.praised_by?(current_user)
  json.last_update_time render_unix_time(project.updated_on)
  json.full_last_update_time project.updated_on
  json.time_ago time_from_now(project.updated_on)
  json.is_member project.member?(current_user.try(:id))
  json.is_need_apply project.is_need_apply
  user_apply_signatures = project.apply_signatures.with_user_id(current_user.id)
  json.user_apply_signatures user_apply_signatures do |signature|
    json.id signature.id
    json.status signature.status
  end
  json.author do
    if project.educoder?
      project_educoder = project.project_educoder
      json.name project_educoder&.owner
      json.type 'Educoder'
      json.login project_educoder&.repo_name.split('/')[0]
      json.image_url render_educoder_avatar_url(project.project_educoder)
    else
      user = project.owner
      json.name user.try(:show_real_name)
      json.type user&.type
      json.login user&.login
      json.image_url url_to_avatar(user)
    end
  end
  json.language do
    if project.project_language.blank?
      json.nil!
    else
      json.id project.project_language.id
      json.name project.project_language.name
    end
  end
  json.category do
    if project.project_category.blank?
      json.nil!
    else
      json.id project.project_category.id
      json.name project.project_category.name
    end
  end
  json.topics project.project_topics.each do |topic|
    json.(topic, :id, :name)
  end
  json.url project.full_url
end