FIX code review and user cache

This commit is contained in:
Jasder 2020-10-30 15:47:09 +08:00
parent ece6cba4a4
commit 1bc935ffd5
7 changed files with 167 additions and 50 deletions

View File

@ -385,11 +385,7 @@ class ApplicationController < ActionController::Base
end
def current_user
if Rails.env.development?
User.current = User.find 1
else
User.current
end
User.current
end
## 默认输出json
@ -745,7 +741,7 @@ class ApplicationController < ActionController::Base
namespace = params[:owner]
id = params[:repo] || params[:id]
@project = Project.find_with_namespace(namespace, id)
@project, @owner = Project.find_with_namespace(namespace, id)
if @project and current_user.can_read_project?(@project)
logger.info "########### has project and can read project"

View File

@ -6,7 +6,6 @@ class IssuesController < ApplicationController
before_action :check_project_public, only: [:index ,:show, :copy, :index_chosen, :close_issue]
before_action :set_issue, only: [:edit, :update, :destroy, :show, :copy, :close_issue, :lock_issue]
before_action :get_branches, only: [:new, :edit]
before_action :check_token_enough, only: [:create, :update]
include ApplicationHelper
@ -97,8 +96,7 @@ class IssuesController < ApplicationController
end
def new
@all_branches = get_branches
@issue_chosen = issue_left_chosen(@project, nil)
@issue_chosen = get_associated_data(@project)
end
def create
@ -150,7 +148,6 @@ class IssuesController < ApplicationController
end
def edit
# @all_branches = get_branches
# @issue_chosen = issue_left_chosen(@project, @issue.id)
@cannot_edit_tags = @issue.issue_type=="2" && @issue.status_id == 5 #悬赏任务已解决且关闭的状态下,不能修改
@issue_attachments = @issue.attachments
@ -439,17 +436,6 @@ class IssuesController < ApplicationController
tracker_array
end
def get_branches
all_branches = []
get_all_branches = Gitea::Repository::Branches::ListService.new(@user, @project&.repository.try(:identifier)).call
if get_all_branches && get_all_branches.size > 0
get_all_branches.each do |b|
all_branches.push(b["name"])
end
end
all_branches
end
def issue_send_params(params)
{
subject: params[:subject],

View File

@ -44,7 +44,7 @@ class ProjectsController < ApplicationController
end
def branches
@branches = @project.forge? ? Gitea::Repository::Branches::ListService.new(@project.owner, @project.identifier).call : []
@branches = @project.forge? ? Gitea::Repository::Branches::ListService.new(@owner, @project.identifier).call : []
end
def group_type_list

View File

@ -30,7 +30,7 @@ module ProjectsHelper
def json_response(project, user)
# repo = project.repository
repo = Repository.select(:id, :mirror_url).find_by(project: project)
repo = Repository.includes(:mirror).select(:id, :mirror_url).find_by(project: project)
tmp_json = {}
unless project.common?
@ -41,20 +41,6 @@ module ProjectsHelper
first_sync: repo.first_sync?
})
end
author =
if project.educoder?
{
login: project.project_educoder.owner,
name: project.project_educoder.owner,
image_url: project.project_educoder.image_url
}
else
{
login: project.owner.login,
name: project.owner.real_name,
image_url: url_to_avatar(project.owner)
}
end
tmp_json = tmp_json.merge({
identifier: render_identifier(project),
@ -64,12 +50,28 @@ module ProjectsHelper
repo_id: repo.id,
open_devops: (user.blank? || user.is_a?(AnonymousUser)) ? false : project.open_devops?,
type: project.numerical_for_project_type,
author: author
author: render_owner(project)
}).compact
render json: tmp_json
end
def render_owner(project)
if project.educoder?
{
login: project.project_educoder.owner,
name: project.project_educoder.owner,
image_url: project.project_educoder.image_url
}
else
{
login: @owner.login,
name: @owner.real_name,
image_url: url_to_avatar(@owner)
}
end
end
def render_identifier(project)
project.educoder? ? project.project_educoder&.repo_name&.split('/')[1] : project.identifier
end

View File

@ -1,4 +1,143 @@
module TagChosenHelper
def get_associated_data(project)
issue_comment_users_array = []
cost_time_array = []
all_issues = []
{
"assign_user": render_cache_collaborators(project),
"tracker": render_cache_trackers,
"issue_status": render_cache_issue_statuses,
"priority": render_cache_issue_priorities,
"issue_version": render_cache_milestones(project),
"start_date": "",
"due_date": "",
"joins_users": issue_comment_users_array,
"cost_time_users": cost_time_array,
# "total_cost_time": Time.at(all_cost_time).utc.strftime('%H h %M min %S s'),
# "be_depended_issues": be_depended_issues_array,
# "depended_issues":depended_issues_array,
# "estimated_hours": issue_info[7],
"done_ratio": render_complete_percentage,
"issue_tag": render_issue_tags(project),
"issue_type": render_issue_species,
"all_issues": all_issues
}
end
def render_cache_trackers
cache_key = "all_trackers/#{Tracker.maximum('id')}"
Rails.cache.fetch(cache_key) do
Tracker.select(:id, :name, :position).collect do |event|
{
id: event.id,
name: event.name,
position: event.position,
is_chosen: '0'
}
end
end
end
def render_cache_issue_statuses
cache_key = "all_issue_statuses/#{IssueStatus.maximum('id')}"
Rails.cache.fetch(cache_key) do
IssueStatus.select(:id, :name, :position).collect do |event|
{
id: event.id,
name: event.name,
position: event.position,
is_chosen: '0'
}
end
end
end
def render_cache_issue_priorities
cache_key = "all_issue_priorities/#{IssuePriority.maximum('id')}"
Rails.cache.fetch(cache_key) do
IssuePriority.select(:id, :name, :position).collect do |event|
{
id: event.id,
name: event.name,
position: event.position,
is_chosen: '0'
}
end
end
end
def render_complete_percentage
completion_nums = %w(0 10 20 30 40 50 60 70 80 90 100)
completion_nums.collect do |event|
{
id: event.to_i,
name: event + "%",
is_chosen: '0'
}
end
end
def render_issue_species
species = %W(普通 悬赏)
species.collect do |event|
{
id: event.to_i + 1,
token: nil,
is_chosen: '0'
}
end
end
def render_issue_tags(project)
# project.issue_tags.last&.cache_key
cache_key = "all_issue_tags/#{project.issue_tags.maximum('updated_at')}"
Rails.cache.fetch(cache_key) do
project.issue_tags.select(:id, :name, :color).collect do |event|
{
id: event.id,
name: event.name,
color: event.color,
is_chosen: '0'
}
end
end
end
def render_cache_milestones(project)
cache_key = "all_milestones/#{project.versions.maximum('updated_on')}"
Rails.cache.fetch(cache_key) do
project.versions.select(:id, :name, :status).collect do |event|
{
id: event.id,
name: event.name,
status: event.status,
is_chosen: '0'
}
end
end
end
def render_cache_collaborators(project)
cache_key = "all_collaborators/#{project.members.maximum('created_on')}"
Rails.cache.fetch(cache_key) do
project.members.includes(:user).collect do |event|
{
id: event.user&.id,
name: event.user&.show_real_name,
avatar_url: url_to_avatar(event.user),
is_chosen: '0'
}
end
end
end
def issue_left_chosen(project,issue_id)
issue_info = Array.new(11)
@ -205,4 +344,4 @@ module TagChosenHelper
# be_depended_issues_array
# end
end
end

View File

@ -178,18 +178,13 @@ class Project < ApplicationRecord
def self.find_with_namespace(namespace_path, identifier)
logger.info "########namespace_path: #{namespace_path} ########identifier: #{identifier} "
project = Project.find_by(identifier: identifier) || Project.find_by(identifier: "#{namespace_path}/#{identifier}")
user = User.find_by_login namespace_path
return nil if user.blank?
project = user.projects.find_by(identifier: identifier) || Project.find_by(identifier: "#{namespace_path}/#{identifier}")
return nil if project.blank?
if project.forge?
user = User.find_by_login namespace_path
return nil if user.blank?
project = user.projects.find_by(identifier: identifier)
return nil if project.blank?
end
project
[project, user]
end
def ci_reactivate?

View File

@ -1,3 +1,2 @@
json.partial! "commons/success"
json.branches @all_branches
json.issue_chosen @issue_chosen
json.issue_chosen @issue_chosen