Sha256: be8aa3858819280ee18b14e81445ce275b9422091028e3ad0c002a16193aa542

Contents?: true

Size: 1.68 KB

Versions: 23

Compression:

Stored size: 1.68 KB

Contents

# frozen_string_literal: true

module Decidim
  class Follow < ApplicationRecord
    include Decidim::DataPortability

    belongs_to :followable, foreign_key: "decidim_followable_id", foreign_type: "decidim_followable_type", polymorphic: true, counter_cache: true
    belongs_to :user, foreign_key: "decidim_user_id", class_name: "Decidim::User"

    validates :user, uniqueness: { scope: [:followable] }

    after_create :increase_following_counters
    after_create :increase_followers_counter

    after_destroy :decrease_following_counters
    after_destroy :decrease_followers_counter

    def self.user_collection(user)
      where(decidim_user_id: user.id)
    end

    def self.export_serializer
      Decidim::DataPortabilitySerializers::DataPortabilityFollowSerializer
    end

    def self.user_follower_ids_for_participatory_spaces(spaces)
      # IF the space has questions it's a Consultations
      followables = spaces.flat_map { |space| space.try(:questions) || space }
      joins(:user).where(followable: followables).pluck(:decidim_user_id).uniq
    end

    private

    # rubocop:disable Rails/SkipsModelValidations
    def increase_following_counters
      user.increment!(:following_count)
    end

    def increase_followers_counter
      return unless followable.is_a?(Decidim::UserBaseEntity)

      followable.increment!(:followers_count)
    end

    def decrease_following_counters
      return unless user

      user.decrement!(:following_count)
    end

    def decrease_followers_counter
      return unless followable.is_a?(Decidim::UserBaseEntity)
      return unless user

      followable.decrement!(:followers_count)
    end
    # rubocop:enable Rails/SkipsModelValidations
  end
end

Version data entries

23 entries across 23 versions & 1 rubygems

Version Path
decidim-core-0.26.10 app/models/decidim/follow.rb
decidim-core-0.26.9 app/models/decidim/follow.rb
decidim-core-0.26.8 app/models/decidim/follow.rb
decidim-core-0.26.7 app/models/decidim/follow.rb
decidim-core-0.26.5 app/models/decidim/follow.rb
decidim-core-0.26.4 app/models/decidim/follow.rb
decidim-core-0.26.3 app/models/decidim/follow.rb
decidim-core-0.26.2 app/models/decidim/follow.rb
decidim-core-0.26.1 app/models/decidim/follow.rb
decidim-core-0.26.0 app/models/decidim/follow.rb
decidim-core-0.26.0.rc2 app/models/decidim/follow.rb
decidim-core-0.26.0.rc1 app/models/decidim/follow.rb
decidim-core-0.25.2 app/models/decidim/follow.rb
decidim-core-0.25.1 app/models/decidim/follow.rb
decidim-core-0.25.0 app/models/decidim/follow.rb
decidim-core-0.25.0.rc4 app/models/decidim/follow.rb
decidim-core-0.25.0.rc3 app/models/decidim/follow.rb
decidim-core-0.25.0.rc2 app/models/decidim/follow.rb
decidim-core-0.25.0.rc1 app/models/decidim/follow.rb
decidim-core-0.24.3 app/models/decidim/follow.rb