fix: projects load by invite code slowly

This commit is contained in:
vilet.yy 2021-06-15 15:33:23 +08:00
parent 7c43f2d8fc
commit 818317c292
3 changed files with 84 additions and 74 deletions

View File

@ -1,76 +1,78 @@
# == Schema Information # == Schema Information
# #
# Table name: projects # Table name: projects
# #
# id :integer not null, primary key # id :integer not null, primary key
# name :string(255) default(""), not null # name :string(255) default(""), not null
# description :text(4294967295) # description :text(4294967295)
# homepage :string(255) default("") # homepage :string(255) default("")
# is_public :boolean default("1"), not null # is_public :boolean default("1"), not null
# parent_id :integer # parent_id :integer
# created_on :datetime # created_on :datetime
# updated_on :datetime # updated_on :datetime
# identifier :string(255) # identifier :string(255)
# status :integer default("1"), not null # status :integer default("1"), not null
# lft :integer # lft :integer
# rgt :integer # rgt :integer
# inherit_members :boolean default("0"), not null # inherit_members :boolean default("0"), not null
# project_type :integer default("0") # project_type :integer default("0")
# hidden_repo :boolean default("0"), not null # hidden_repo :boolean default("0"), not null
# attachmenttype :integer default("1") # attachmenttype :integer default("1")
# user_id :integer # user_id :integer
# dts_test :integer default("0") # dts_test :integer default("0")
# enterprise_name :string(255) # enterprise_name :string(255)
# organization_id :integer # organization_id :integer
# project_new_type :integer # project_new_type :integer
# gpid :integer # gpid :integer
# forked_from_project_id :integer # forked_from_project_id :integer
# forked_count :integer default("0") # forked_count :integer default("0")
# publish_resource :integer default("0") # publish_resource :integer default("0")
# visits :integer default("0") # visits :integer default("0")
# hot :integer default("0") # hot :integer default("0")
# invite_code :string(255) # invite_code :string(255)
# qrcode :string(255) # qrcode :string(255)
# qrcode_expiretime :integer default("0") # qrcode_expiretime :integer default("0")
# script :text(65535) # script :text(65535)
# training_status :integer default("0") # training_status :integer default("0")
# rep_identifier :string(255) # rep_identifier :string(255)
# project_category_id :integer # project_category_id :integer
# project_language_id :integer # project_language_id :integer
# license_id :integer # license_id :integer
# ignore_id :integer # ignore_id :integer
# praises_count :integer default("0") # praises_count :integer default("0")
# watchers_count :integer default("0") # watchers_count :integer default("0")
# issues_count :integer default("0") # issues_count :integer default("0")
# pull_requests_count :integer default("0") # pull_requests_count :integer default("0")
# language :string(255) # language :string(255)
# versions_count :integer default("0") # versions_count :integer default("0")
# issue_tags_count :integer default("0") # issue_tags_count :integer default("0")
# closed_issues_count :integer default("0") # closed_issues_count :integer default("0")
# open_devops :boolean default("0") # open_devops :boolean default("0")
# gitea_webhook_id :integer # gitea_webhook_id :integer
# open_devops_count :integer default("0") # open_devops_count :integer default("0")
# recommend :boolean default("0") # recommend :boolean default("0")
# platform :integer default("0") # platform :integer default("0")
# default_branch :string(255) default("master") # default_branch :string(255) default("master")
# website :string(255) # website :string(255)
# order_index :integer default("0") # order_index :integer default("0")
# lesson_url :string(255) # lesson_url :string(255)
# #
# Indexes # Indexes
# #
# index_projects_on_forked_from_project_id (forked_from_project_id) # index_projects_on_forked_from_project_id (forked_from_project_id)
# index_projects_on_identifier (identifier) # index_projects_on_identifier (identifier)
# index_projects_on_is_public (is_public) # index_projects_on_invite_code (invite_code)
# index_projects_on_lft (lft) # index_projects_on_is_public (is_public)
# index_projects_on_name (name) # index_projects_on_lft (lft)
# index_projects_on_platform (platform) # index_projects_on_name (name)
# index_projects_on_project_type (project_type) # index_projects_on_platform (platform)
# index_projects_on_recommend (recommend) # index_projects_on_project_type (project_type)
# index_projects_on_rgt (rgt) # index_projects_on_recommend (recommend)
# index_projects_on_status (status) # index_projects_on_rgt (rgt)
# index_projects_on_updated_on (updated_on) # index_projects_on_status (status)
# # index_projects_on_updated_on (updated_on)
#

View File

@ -33,7 +33,7 @@ class Projects::ApplyJoinService < ApplicationService
private private
def project def project
@_project ||= Project.find_by('binary(invite_code) = ? ',"#{params[:code].to_s.strip}") @_project ||= Project.find_by(invite_code: params[:code].to_s.strip)
end end
def role_value def role_value

View File

@ -0,0 +1,8 @@
class AddInviteCodeIndexToProjects < ActiveRecord::Migration[5.2]
def change
add_index :projects, :invite_code
execute <<-SQL
ALTER TABLE projects MODIFY COLUMN invite_code VARCHAR(255) BINARY CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL;
SQL
end
end