diff --git a/app/models/applied_project.rb b/app/models/applied_project.rb index 68095d0ea..8362cfa70 100644 --- a/app/models/applied_project.rb +++ b/app/models/applied_project.rb @@ -14,7 +14,8 @@ class AppliedProject < ApplicationRecord belongs_to :project has_many :applied_messages, as: :applied, dependent: :destroy - has_many :forge_activities, as: :forge_act, dependent: :destroy + # has_many :forge_activities, as: :forge_act, dependent: :destroy + + enum status: {canceled: -1, common: 0, accepted: 1, refused: 2} # -1 已取消 0 待操作 1 已接收 2 已拒绝 - scope :pending, -> { where(status: 0) } end diff --git a/app/models/concerns/dcodes.rb b/app/models/concerns/dcodes.rb new file mode 100644 index 000000000..f76b4b0f8 --- /dev/null +++ b/app/models/concerns/dcodes.rb @@ -0,0 +1,13 @@ +module Dcodes + DCODES = %W(1 2 3 4 5 6 7 8 9 a b c f e f g h i j k l m n o p q r s t u v w x y z) + + extend ActiveSupport::Concern + + def generate_dcode(field, num, pre='') + code = DCODES.sample(num).join + while self.class.exists?("#{field}": pre+code) do + code = DCODES.sample(num).join + end + code + end +end \ No newline at end of file diff --git a/app/models/project.rb b/app/models/project.rb index b61f05689..f58f9f236 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -66,6 +66,7 @@ class Project < ApplicationRecord include Publicable include Watchable include ProjectOperable + include Dcodes # common:开源托管项目 # mirror:普通镜像项目,没有定时同步功能 @@ -105,7 +106,7 @@ class Project < ApplicationRecord has_many :pinned_projects, dependent: :destroy has_many :has_pinned_users, through: :pinned_projects, source: :user - after_save :check_project_members, :reset_cache_data + after_save :check_project_members, :reset_cache_data, :set_invite_code after_destroy :reset_cache_data scope :project_statics_select, -> {select(:id,:name, :is_public, :identifier, :status, :project_type, :user_id, :forked_count, :visits, :project_category_id, :project_language_id, :license_id, :ignore_id, :watchers_count, :created_on)} scope :no_anomory_projects, -> {where("projects.user_id is not null and projects.user_id != ?", 2)} @@ -123,6 +124,12 @@ class Project < ApplicationRecord self.reset_user_cache_async_job(self.owner) end + def set_invite_code + if self.invite_code.nil? + self.update(invite_code: self.generate_dcode('invite_code', 6)) + end + end + def self.search_project(search) ransack(name_or_identifier_cont: search) end diff --git a/app/views/repositories/detail.json.jbuilder b/app/views/repositories/detail.json.jbuilder index 3cf3858d6..1da871486 100644 --- a/app/views/repositories/detail.json.jbuilder +++ b/app/views/repositories/detail.json.jbuilder @@ -7,6 +7,7 @@ else json.readme @result[:readme].merge(content: readme_render_decode64_content(@result[:readme]["content"], nil)) end json.identifier render_identifier(@project) +json.invite_code @project.invite_code json.name @project.name json.description @project.description json.project_id @project.id