total_myshixun_count = 0
total_forked_myshixun_count = 0
total_shixun_score = 0

json.shixuns @shixuns.each do |shixun|
  total_myshixun_count += shixun.myshixuns_count
  total_forked_myshixun_count += shixun['forked_myshixun_count'].to_i

  valid_course_count = @course_count_map.fetch(shixun.id, 0)
  valid_student_count = @original_myshixun_count_map.fetch(shixun.id, 0)
  score =
    if shixun.fork_from.blank?
      500 + 50 * valid_course_count + 10 * valid_student_count
    else
      100 + 10 * valid_course_count + 5 * valid_student_count
    end

  @forked_shixun_map.each do |shixun_id, fork_from_id|
    next if fork_from_id != shixun.id

    score += 100 + 10 * @forked_map.fetch(shixun_id, 0) + 5 * @forked_myshixun_count_map.fetch(shixun_id, 0)
  end

  total_shixun_score += score

  json.creator shixun.user.real_name
  json.creator_login shixun.user.login
  json.shixun_name shixun.name
  json.shixun_identifier shixun.identifier
  json.forked shixun.fork_from.present?
  json.myshixuns_count shixun.myshixuns_count
  json.forked_myshixun_count shixun['forked_myshixun_count'].to_i
  json.valid_count @myshixun_count_map.fetch(shixun.id, 0)
  json.score score
end

json.shixun_count @shixuns.size
json.total_myshixun_count total_myshixun_count
json.total_forked_myshixun_count total_forked_myshixun_count
json.total_valid_count @myshixun_count_map.values.reduce(:+)
json.total_shixun_score total_shixun_score