From ec0a6be9d4093d83d4fad2743c29d1857c51d24d Mon Sep 17 00:00:00 2001 From: lexiaozhang Date: Thu, 5 Oct 2023 23:39:18 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E7=BB=9F=E4=B8=80=E8=BF=94=E5=9B=9E?= =?UTF-8?q?=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/projects_controller.rb | 28 +++++--------- app/views/projects/score.json.jbuilder | 7 ++++ app/views/projects/top.json.jbuilder | 53 ++++++++++++++++++++++++++ 3 files changed, 70 insertions(+), 18 deletions(-) create mode 100644 app/views/projects/score.json.jbuilder create mode 100644 app/views/projects/top.json.jbuilder diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 3a8ae7ce..fb75b92f 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -291,38 +291,30 @@ class ProjectsController < ApplicationController end end - def score - project_evaluation = ProjectEvaluation.find_by(project_id: @project.id) - - response_data = { - influence_norm_score: project_evaluation&.norm_influence || 0, - community_norm_score: project_evaluation&.norm_community || 0, - vitality_norm_score: project_evaluation&.norm_vitality || 0, - health_norm_score: project_evaluation&.norm_health || 0, - trend_norm_score: project_evaluation&.norm_trend || 0, - score: project_evaluation&.score || 0, - updated_at: project_evaluation&.updated_at&.strftime("%Y-%m-%d %H:%M") - } - render json: response_data + @project_evaluation = ProjectEvaluation.find_by(project_id: @project.id) + if @project_evaluation.nil? + render_error("暂无得分数据") + end end def top period = params[:period] time_interval = params[:time_interval] - if period.present? && time_interval.present? project_evaluation_ids = ProjectEvaluationTop.where(evaluation_period: period, time_interval: time_interval) .pluck(:project_id) - projects = Project.where(id: project_evaluation_ids).includes(:project_category, :project_language, :repository, :project_educoder, :owner, :project_units, :project_topics).project_statics_select - render json: projects + custom_params = { + ids: project_evaluation_ids.join(","), + } + @total_count = project_evaluation_ids.count + scope = Projects::ListQuery.call(custom_params) + @projects = kaminari_paginate(scope.includes(:project_category, :project_language, :repository, :project_educoder, :owner, :project_units, :project_topics)) else render_error("参数错误") end end - - private diff --git a/app/views/projects/score.json.jbuilder b/app/views/projects/score.json.jbuilder new file mode 100644 index 00000000..3bdcae40 --- /dev/null +++ b/app/views/projects/score.json.jbuilder @@ -0,0 +1,7 @@ +json.influence_norm_score @project_evaluation.norm_influence +json.community_norm_score @project_evaluation.norm_community +json.vitality_norm_score @project_evaluation.norm_vitality +json.health_norm_score @project_evaluation.norm_health +json.trend_norm_score @project_evaluation.norm_trend +json.score @project_evaluation.score +json.updated_at time_from_now(@project_evaluation.updated_at) diff --git a/app/views/projects/top.json.jbuilder b/app/views/projects/top.json.jbuilder new file mode 100644 index 00000000..503764c8 --- /dev/null +++ b/app/views/projects/top.json.jbuilder @@ -0,0 +1,53 @@ +json.total_count @total_count +json.projects @projects do |project| + json.id project.id + json.repo_id project&.repository&.id + json.identifier render_identifier(project) + json.name project.name + json.description Nokogiri::HTML(project.description).text + json.visits project.visits + json.praises_count project.praises_count.to_i + json.forked_count project.forked_count.to_i + json.is_public project.is_public + json.mirror_url project.repository&.mirror_url + json.type project&.numerical_for_project_type + json.last_update_time render_unix_time(project.updated_on) + json.time_ago time_from_now(project.updated_on) + json.forked_from_project_id project.forked_from_project_id + json.open_devops project.open_devops? + json.platform project.platform + json.author do + if project.educoder? + project_educoder = project.project_educoder + json.name project_educoder&.owner + json.login project_educoder&.repo_name.split('/')[0] + # json.image_url render_educoder_avatar_url(project.project_educoder) + else + user = project.owner + json.type user.type + json.name user.try(:show_real_name) + json.login user.login + json.image_url url_to_avatar(user) + 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.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.topics project.project_topics.each do |topic| + json.(topic, :id, :name) + end +end