| @@ -11,6 +11,7 @@ module Repository::LanguagesPercentagable | |||||
| end | end | ||||
| def update_project_language(language) | def update_project_language(language) | ||||
| return if @project.project_language.present? | |||||
| db_language = ProjectLanguage.find_or_create_by!(name: language.keys.first.downcase.upcase_first) | db_language = ProjectLanguage.find_or_create_by!(name: language.keys.first.downcase.upcase_first) | ||||
| @project.update_column(:project_language_id, db_language.id) | @project.update_column(:project_language_id, db_language.id) | ||||
| rescue | rescue | ||||
| @@ -47,8 +47,13 @@ class RepositoriesController < ApplicationController | |||||
| end | end | ||||
| def entries | def entries | ||||
| @project.increment!(:visits) | |||||
| CacheAsyncSetJob.perform_later("project_common_service", {visits: 1}, @project.id) | |||||
| @week_project_visit_record, @month_project_visit_record = TimeableVisitRecord.build(@project.id) | |||||
| if @week_project_visit_record.visits < 300 && @month_project_visit_record.visits < 1000 | |||||
| @week_project_visit_record.increment!(:visits) | |||||
| @month_project_visit_record.increment!(:visits) | |||||
| @project.increment!(:visits) | |||||
| CacheAsyncSetJob.perform_later("project_common_service", {visits: 1}, @project.id) | |||||
| end | |||||
| if @project.educoder? | if @project.educoder? | ||||
| @entries = Educoder::Repository::Entries::ListService.call(@project&.project_educoder.repo_name) | @entries = Educoder::Repository::Entries::ListService.call(@project&.project_educoder.repo_name) | ||||
| else | else | ||||
| @@ -0,0 +1,28 @@ | |||||
| # == Schema Information | |||||
| # | |||||
| # Table name: timeable_visit_records | |||||
| # | |||||
| # id :integer not null, primary key | |||||
| # time :string(255) | |||||
| # project_id :integer | |||||
| # visits :integer | |||||
| # created_at :datetime not null | |||||
| # updated_at :datetime not null | |||||
| # | |||||
| # Indexes | |||||
| # | |||||
| # index_timeable_visit_records_on_project_id (project_id) | |||||
| # index_timeable_visit_records_on_time (time) | |||||
| # | |||||
| class TimeableVisitRecord < ApplicationRecord | |||||
| belongs_to :project | |||||
| def self.build(project_id) | |||||
| week = TimeableVisitRecord.find_or_create_by!(time: Date.today.strftime("%Y-%W"), project_id: project_id) | |||||
| month = TimeableVisitRecord.find_or_create_by!(time: Date.today.strftime("%Y%m"), project_id: project_id) | |||||
| return week, month | |||||
| end | |||||
| end | |||||
| @@ -133,6 +133,8 @@ class Cache::V2::ProjectCommonService < ApplicationService | |||||
| end | end | ||||
| if @watchers.present? | if @watchers.present? | ||||
| $redis_cache.hincrby(project_common_key, watchers_key, @watchers) | $redis_cache.hincrby(project_common_key, watchers_key, @watchers) | ||||
| Cache::V2::ProjectRankService.call(@project_id, {watchers: @watchers}) | |||||
| Cache::V2::ProjectDateRankService.call(@project_id, Date.today, {watchers: @watchers}) | |||||
| end | end | ||||
| if @praises.present? | if @praises.present? | ||||
| $redis_cache.hincrby(project_common_key, praises_key, @praises) | $redis_cache.hincrby(project_common_key, praises_key, @praises) | ||||
| @@ -7,6 +7,7 @@ class Cache::V2::ProjectDateRankService < ApplicationService | |||||
| @project_id = project_id | @project_id = project_id | ||||
| @rank_date = rank_date | @rank_date = rank_date | ||||
| @visits = params[:visits] | @visits = params[:visits] | ||||
| @watchers = params[:watchers] | |||||
| @praises = params[:praises] | @praises = params[:praises] | ||||
| @forks = params[:forks] | @forks = params[:forks] | ||||
| @issues = params[:issues] | @issues = params[:issues] | ||||
| @@ -35,6 +36,9 @@ class Cache::V2::ProjectDateRankService < ApplicationService | |||||
| if @visits.present? | if @visits.present? | ||||
| $redis_cache.zincrby(project_rank_key, @visits.to_i * 1, @project_id) | $redis_cache.zincrby(project_rank_key, @visits.to_i * 1, @project_id) | ||||
| end | end | ||||
| if @watchers.present? | |||||
| $redis_cache.zincrby(project_rank_key, @watchers.to_i * 5, @project_id) | |||||
| end | |||||
| if @praises.present? | if @praises.present? | ||||
| $redis_cache.zincrby(project_rank_key, @praises.to_i * 5, @project_id) | $redis_cache.zincrby(project_rank_key, @praises.to_i * 5, @project_id) | ||||
| end | end | ||||
| @@ -42,13 +46,13 @@ class Cache::V2::ProjectDateRankService < ApplicationService | |||||
| $redis_cache.zincrby(project_rank_key, @forks.to_i * 10, @project_id) | $redis_cache.zincrby(project_rank_key, @forks.to_i * 10, @project_id) | ||||
| end | end | ||||
| if @issues.present? | if @issues.present? | ||||
| $redis_cache.zincrby(project_rank_key, @issues.to_i * 10, @project_id) | |||||
| $redis_cache.zincrby(project_rank_key, @issues.to_i * 5, @project_id) | |||||
| end | end | ||||
| if @pullrequests.present? | if @pullrequests.present? | ||||
| $redis_cache.zincrby(project_rank_key, @pullrequests.to_i * 10, @project_id) | $redis_cache.zincrby(project_rank_key, @pullrequests.to_i * 10, @project_id) | ||||
| end | end | ||||
| if @commits.present? | if @commits.present? | ||||
| $redis_cache.zincrby(project_rank_key, @commits.to_i * 1, @project_id) | |||||
| $redis_cache.zincrby(project_rank_key, @commits.to_i * 5, @project_id) | |||||
| end | end | ||||
| $redis_cache.zscore(project_rank_key, @project_id) | $redis_cache.zscore(project_rank_key, @project_id) | ||||
| @@ -5,6 +5,7 @@ class Cache::V2::ProjectRankService < ApplicationService | |||||
| def initialize(project_id, params={}) | def initialize(project_id, params={}) | ||||
| @project_id = project_id | @project_id = project_id | ||||
| @visits = params[:visits] | @visits = params[:visits] | ||||
| @watchers = params[:watchers] | |||||
| @praises = params[:praises] | @praises = params[:praises] | ||||
| @forks = params[:forks] | @forks = params[:forks] | ||||
| @issues = params[:issues] | @issues = params[:issues] | ||||
| @@ -51,6 +52,9 @@ class Cache::V2::ProjectRankService < ApplicationService | |||||
| if @visits.present? | if @visits.present? | ||||
| $redis_cache.zincrby(project_rank_key, @visits.to_i * 1, @project_id) | $redis_cache.zincrby(project_rank_key, @visits.to_i * 1, @project_id) | ||||
| end | end | ||||
| if @watchers.present? | |||||
| $redis_cache.zincrby(project_rank_key, @watchers.to_i * 5, @project_id) | |||||
| end | |||||
| if @praises.present? | if @praises.present? | ||||
| $redis_cache.zincrby(project_rank_key, @praises.to_i * 5, @project_id) | $redis_cache.zincrby(project_rank_key, @praises.to_i * 5, @project_id) | ||||
| end | end | ||||
| @@ -58,13 +62,13 @@ class Cache::V2::ProjectRankService < ApplicationService | |||||
| $redis_cache.zincrby(project_rank_key, @forks.to_i * 10, @project_id) | $redis_cache.zincrby(project_rank_key, @forks.to_i * 10, @project_id) | ||||
| end | end | ||||
| if @issues.present? | if @issues.present? | ||||
| $redis_cache.zincrby(project_rank_key, @issues.to_i * 10, @project_id) | |||||
| $redis_cache.zincrby(project_rank_key, @issues.to_i * 5, @project_id) | |||||
| end | end | ||||
| if @pullrequests.present? | if @pullrequests.present? | ||||
| $redis_cache.zincrby(project_rank_key, @pullrequests.to_i * 10, @project_id) | $redis_cache.zincrby(project_rank_key, @pullrequests.to_i * 10, @project_id) | ||||
| end | end | ||||
| if @commits.present? | if @commits.present? | ||||
| $redis_cache.zincrby(project_rank_key, @commits.to_i * 1, @project_id) | |||||
| $redis_cache.zincrby(project_rank_key, @commits.to_i * 5, @project_id) | |||||
| end | end | ||||
| reset_user_project_rank | reset_user_project_rank | ||||
| end | end | ||||
| @@ -74,7 +78,7 @@ class Cache::V2::ProjectRankService < ApplicationService | |||||
| def reset_project_rank | def reset_project_rank | ||||
| load_project_common | load_project_common | ||||
| score = @project_common["visits"].to_i * 1 + @project_common["praises"].to_i * 5 + @project_common["forks"].to_i * 10 + @project_common["issues"].to_i * 10 + @project_common["pullrequests"].to_i * 10 + @project_common["commits"].to_i * 1 | |||||
| score = @project_common["visits"].to_i * 1 + @project_common["watchers"].to_i * 5 + @project_common["praises"].to_i * 5 + @project_common["forks"].to_i * 10 + @project_common["issues"].to_i * 5 + @project_common["pullrequests"].to_i * 10 + @project_common["commits"].to_i * 5 | |||||
| $redis_cache.zadd(project_rank_key, score, @project_id) | $redis_cache.zadd(project_rank_key, score, @project_id) | ||||
| reset_user_project_rank | reset_user_project_rank | ||||
| @@ -0,0 +1,13 @@ | |||||
| class CreateTimeableVisitRecords < ActiveRecord::Migration[5.2] | |||||
| def change | |||||
| create_table :timeable_visit_records do |t| | |||||
| t.string :time | |||||
| t.references :project | |||||
| t.integer :visits, default: 0 | |||||
| t.timestamps | |||||
| end | |||||
| add_index :timeable_visit_records, :time | |||||
| end | |||||
| end | |||||