Sha256: c558830509a7bdfeaaae3e3a73c1911c7f35710d061a25f75b356ecf2ddb7bc7

Contents?: true

Size: 1.72 KB

Versions: 15

Compression:

Stored size: 1.72 KB

Contents

# frozen_string_literal: true

namespace :decidim do
  namespace :upgrade do
    desc "Remove duplicated endorsements"
    task fix_duplicate_endorsements: :environment do
      logger = Logger.new($stdout)
      logger.info("Removing duplicate endorsements...")
      has_count = 0

      columns = [:resource_type, :resource_id, :decidim_author_type, :decidim_author_id, :decidim_user_group_id]

      get_duplicates(columns).each do |issue|
        while row_count(issue) > 1
          find_next(issue)&.destroy
          has_count += 1
          logger.info("Removed duplicate endorsement for #{issue.resource_type} #{issue.resource_id}")
        end
      end

      logger.info("Patch remaining endorsements.")
      Decidim::Endorsement.where(decidim_user_group_id: nil).update(decidim_user_group_id: 0)
      logger.info("Process terminated, #{has_count} endorsements have been removed.")
      logger.info("Done")
    end

    private

    def get_duplicates(*columns)
      Decidim::Endorsement.select("#{columns.join(",")}, COUNT(*)").group(columns).having("COUNT(*) > 1")
    end

    def row_count(issue)
      Decidim::Endorsement.where(
        resource_type: issue.resource_type,
        resource_id: issue.resource_id,
        decidim_author_type: issue.decidim_author_type,
        decidim_author_id: issue.decidim_author_id,
        decidim_user_group_id: issue.decidim_user_group_id
      ).count
    end

    def find_next(issue)
      Decidim::Endorsement.find_by(
        resource_type: issue.resource_type,
        resource_id: issue.resource_id,
        decidim_author_type: issue.decidim_author_type,
        decidim_author_id: issue.decidim_author_id,
        decidim_user_group_id: issue.decidim_user_group_id
      )
    end
  end
end

Version data entries

15 entries across 15 versions & 1 rubygems

Version Path
decidim-core-0.28.5 lib/tasks/upgrade/decidim_deduplicate_endorsements.rake
decidim-core-0.28.4 lib/tasks/upgrade/decidim_deduplicate_endorsements.rake
decidim-core-0.27.9 lib/tasks/upgrade/decidim_deduplicate_endorsements.rake
decidim-core-0.28.3 lib/tasks/upgrade/decidim_deduplicate_endorsements.rake
decidim-core-0.27.8 lib/tasks/upgrade/decidim_deduplicate_endorsements.rake
decidim-core-0.28.2 lib/tasks/upgrade/decidim_deduplicate_endorsements.rake
decidim-core-0.27.7 lib/tasks/upgrade/decidim_deduplicate_endorsements.rake
decidim-core-0.28.1 lib/tasks/upgrade/decidim_deduplicate_endorsements.rake
decidim-core-0.27.6 lib/tasks/upgrade/decidim_deduplicate_endorsements.rake
decidim-core-0.26.10 lib/tasks/upgrade/decidim_deduplicate_endorsements.rake
decidim-core-0.26.9 lib/tasks/upgrade/decidim_deduplicate_endorsements.rake
decidim-core-0.28.0 lib/tasks/upgrade/decidim_deduplicate_endorsements.rake
decidim-core-0.27.5 lib/tasks/upgrade/decidim_deduplicate_endorsements.rake
decidim-core-0.28.0.rc5 lib/tasks/upgrade/decidim_deduplicate_endorsements.rake
decidim-core-0.28.0.rc4 lib/tasks/upgrade/decidim_deduplicate_endorsements.rake