up

in db/migrate/20250403181313_create_push_rules_sync_triggers.rb [14:115]


  def up
    
    execute(<<~SQL)
      CREATE OR REPLACE FUNCTION 
        RETURNS TRIGGER
        LANGUAGE plpgsql
      AS $$
       BEGIN
          IF (NEW.organization_id IS NOT NULL AND NEW.is_sample = TRUE) THEN
            INSERT INTO organization_push_rules (
              organization_id,
              max_file_size,
              member_check,
              prevent_secrets,
              reject_unsigned_commits,
              commit_committer_check,
              deny_delete_tag,
              reject_non_dco_commits,
              commit_committer_name_check,
              commit_message_regex,
              branch_name_regex,
              commit_message_negative_regex,
              author_email_regex,
              file_name_regex,
              created_at,
              updated_at
            ) VALUES (
              NEW.organization_id,
              NEW.max_file_size,
              NEW.member_check,
              NEW.prevent_secrets,
              NEW.reject_unsigned_commits,
              NEW.commit_committer_check,
              NEW.deny_delete_tag,
              NEW.reject_non_dco_commits,
              NEW.commit_committer_name_check,
              NEW.commit_message_regex,
              NEW.branch_name_regex,
              NEW.commit_message_negative_regex,
              NEW.author_email_regex,
              NEW.file_name_regex,
              NEW.created_at,
              NEW.updated_at
            )
            ON CONFLICT (organization_id) DO UPDATE SET
              max_file_size = NEW.max_file_size,
              member_check = NEW.member_check,
              prevent_secrets = NEW.prevent_secrets,
              reject_unsigned_commits = NEW.reject_unsigned_commits,
              commit_committer_check = NEW.commit_committer_check,
              deny_delete_tag = NEW.deny_delete_tag,
              reject_non_dco_commits = NEW.reject_non_dco_commits,
              commit_committer_name_check = NEW.commit_committer_name_check,
              commit_message_regex = NEW.commit_message_regex,
              branch_name_regex = NEW.branch_name_regex,
              commit_message_negative_regex = NEW.commit_message_negative_regex,
              author_email_regex = NEW.author_email_regex,
              file_name_regex = NEW.file_name_regex,
              updated_at = NEW.updated_at;
          END IF;
         RETURN NEW;
        END;
       $$
    SQL

    drop_trigger(:push_rules, SYNC_TRIGGER_NAME)

    
    execute(<<~SQL)
      CREATE TRIGGER 
      AFTER INSERT OR UPDATE ON push_rules
      FOR EACH ROW
      EXECUTE FUNCTION 
    SQL

    
    
    execute(<<~SQL)
      CREATE OR REPLACE FUNCTION 
        RETURNS TRIGGER
        LANGUAGE plpgsql
      AS $$
        BEGIN
          IF (OLD.organization_id IS NOT NULL AND OLD.is_sample = true) THEN
            DELETE FROM organization_push_rules WHERE organization_id = OLD.organization_id;
          END IF;
          RETURN OLD;
        END;
      $$;
    SQL

    drop_trigger(:push_rules, DELETE_TRIGGER_NAME)

    
    execute(<<~SQL)
      CREATE TRIGGER 
      BEFORE DELETE ON push_rules
      FOR EACH ROW
      EXECUTE FUNCTION 
    SQL
  end