add: invite code
This commit is contained in:
parent
5ef9549b6b
commit
d4b8b3e24f
|
@ -14,7 +14,8 @@ class AppliedProject < ApplicationRecord
|
||||||
belongs_to :project
|
belongs_to :project
|
||||||
|
|
||||||
has_many :applied_messages, as: :applied, dependent: :destroy
|
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
|
end
|
||||||
|
|
|
@ -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
|
|
@ -66,6 +66,7 @@ class Project < ApplicationRecord
|
||||||
include Publicable
|
include Publicable
|
||||||
include Watchable
|
include Watchable
|
||||||
include ProjectOperable
|
include ProjectOperable
|
||||||
|
include Dcodes
|
||||||
|
|
||||||
# common:开源托管项目
|
# common:开源托管项目
|
||||||
# mirror:普通镜像项目,没有定时同步功能
|
# mirror:普通镜像项目,没有定时同步功能
|
||||||
|
@ -105,7 +106,7 @@ class Project < ApplicationRecord
|
||||||
has_many :pinned_projects, dependent: :destroy
|
has_many :pinned_projects, dependent: :destroy
|
||||||
has_many :has_pinned_users, through: :pinned_projects, source: :user
|
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
|
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 :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)}
|
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)
|
self.reset_user_cache_async_job(self.owner)
|
||||||
end
|
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)
|
def self.search_project(search)
|
||||||
ransack(name_or_identifier_cont: search)
|
ransack(name_or_identifier_cont: search)
|
||||||
end
|
end
|
||||||
|
|
|
@ -7,6 +7,7 @@ else
|
||||||
json.readme @result[:readme].merge(content: readme_render_decode64_content(@result[:readme]["content"], nil))
|
json.readme @result[:readme].merge(content: readme_render_decode64_content(@result[:readme]["content"], nil))
|
||||||
end
|
end
|
||||||
json.identifier render_identifier(@project)
|
json.identifier render_identifier(@project)
|
||||||
|
json.invite_code @project.invite_code
|
||||||
json.name @project.name
|
json.name @project.name
|
||||||
json.description @project.description
|
json.description @project.description
|
||||||
json.project_id @project.id
|
json.project_id @project.id
|
||||||
|
|
Loading…
Reference in New Issue