From 9f3375806fb8687de090eb3193a24ede1b6ecdea Mon Sep 17 00:00:00 2001 From: lexiaozhang Date: Thu, 5 Oct 2023 23:41:16 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E8=AF=84=E9=80=89?= =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E7=9A=84=E5=AE=9A=E6=97=B6=E4=BB=BB=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admins/project_evaluation_controller.rb | 29 +------------------ app/jobs/evaluate_project_job.rb | 7 +++++ app/models/project_evaluation_top.rb | 5 ++++ config/sidekiq_cron.yml | 5 ++++ spec/jobs/evaluate_project_job_spec.rb | 5 ++++ 5 files changed, 23 insertions(+), 28 deletions(-) create mode 100644 app/jobs/evaluate_project_job.rb create mode 100644 spec/jobs/evaluate_project_job_spec.rb diff --git a/app/controllers/admins/project_evaluation_controller.rb b/app/controllers/admins/project_evaluation_controller.rb index 0745ddc6..94a1e510 100644 --- a/app/controllers/admins/project_evaluation_controller.rb +++ b/app/controllers/admins/project_evaluation_controller.rb @@ -1,33 +1,6 @@ class Admins::ProjectEvaluationController < Admins::BaseController def update - Project.where(is_public: 1, id: Repository.pluck(:project_id)).find_each do |project| - ProjectEvaluation.update_raw_scores(project) - end - ProjectEvaluation.update_normalized_scores - - def evaluate_and_update(interval) - ProjectEvaluationTop.top_projects_selection(interval) - ProjectEvaluation.update_scores_by_interval(interval) - end - - current_date = Date.today - - if current_date.wday == 1 - evaluate_and_update(:weekly) - end - - if current_date.day == 1 - evaluate_and_update(:monthly) - end - - if current_date.day == 1 && [1, 4, 7, 10].include?(current_date.month) - evaluate_and_update(:quarterly) - end - - if current_date.yday == 1 - evaluate_and_update(:yearly) - end - + ProjectEvaluation.update_all render_ok() end end diff --git a/app/jobs/evaluate_project_job.rb b/app/jobs/evaluate_project_job.rb new file mode 100644 index 00000000..eb359ddc --- /dev/null +++ b/app/jobs/evaluate_project_job.rb @@ -0,0 +1,7 @@ +class EvaluateProjectJob < ApplicationJob + queue_as :message + + def perform(*args) + ProjectEvaluation.update_all + end +end diff --git a/app/models/project_evaluation_top.rb b/app/models/project_evaluation_top.rb index 783ac27f..0fe337d8 100644 --- a/app/models/project_evaluation_top.rb +++ b/app/models/project_evaluation_top.rb @@ -54,4 +54,9 @@ class ProjectEvaluationTop < ApplicationRecord ) end end + + def self.evaluate_and_update(interval) + ProjectEvaluationTop.top_projects_selection(interval) + ProjectEvaluation.update_scores_by_interval(interval) + end end diff --git a/config/sidekiq_cron.yml b/config/sidekiq_cron.yml index 448e9c94..81529705 100644 --- a/config/sidekiq_cron.yml +++ b/config/sidekiq_cron.yml @@ -7,3 +7,8 @@ delay_expired_issue: cron: "0 0 * * *" class: "DelayExpiredIssueJob" queue: message + +evaluate_project: + cron: "0 0 * * *" + class: "EvaluateProjectJob" + queue: message \ No newline at end of file diff --git a/spec/jobs/evaluate_project_job_spec.rb b/spec/jobs/evaluate_project_job_spec.rb new file mode 100644 index 00000000..cd444ae6 --- /dev/null +++ b/spec/jobs/evaluate_project_job_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe EvaluateProjectJob, type: :job do + pending "add some examples to (or delete) #{__FILE__}" +end