From 02f8e453f1b22cd564ea60c17fb0ddbd400c95c1 Mon Sep 17 00:00:00 2001 From: yystopf Date: Fri, 10 Sep 2021 11:26:01 +0800 Subject: [PATCH] fix: remove watcher when project change is_public --- app/models/project.rb | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/app/models/project.rb b/app/models/project.rb index 93d7e6470..293e6c478 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -127,8 +127,8 @@ class Project < ApplicationRecord has_many :has_pinned_users, through: :pinned_projects, source: :user has_many :webhooks, class_name: "Gitea::Webhook", primary_key: :gpid, foreign_key: :repo_id - after_save :check_project_members, :reset_cache_data - before_save :set_invite_code + after_save :check_project_members + before_save :set_invite_code, :reset_cache_data, :reset_unmember_followed 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)} @@ -158,6 +158,12 @@ class Project < ApplicationRecord self.reset_user_cache_async_job(self.owner) end + def reset_unmember_followed + if changes[:is_public].present? && changes[:is_public] == [true, false] + self.watchers.where.not(user_id: self.all_collaborators).destroy_all + end + end + def set_invite_code if self.invite_code.nil? self.invite_code= self.generate_dcode('invite_code', 6)