Sha256: 76ab5cae1c6cafad6f64439c9808d999b4e3bfd4c340af679770427996f83aa2

Contents?: true

Size: 1.21 KB

Versions: 93

Compression:

Stored size: 1.21 KB

Contents

# This migration comes from decidim_initiatives (originally 20171214161410)
# frozen_string_literal: true

class AddUniqueOnVotes < ActiveRecord::Migration[5.1]
  class InitiativesVote < ApplicationRecord
    self.table_name = :decidim_initiatives_votes
  end

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

  def row_count(issue)
    InitiativesVote.where(
      decidim_initiative_id: issue.decidim_initiative_id,
      decidim_author_id: issue.decidim_author_id,
      decidim_user_group_id: issue.decidim_user_group_id
    ).count
  end

  def find_next(issue)
    InitiativesVote.find_by(
      decidim_initiative_id: issue.decidim_initiative_id,
      decidim_author_id: issue.decidim_author_id,
      decidim_user_group_id: issue.decidim_user_group_id
    )
  end

  def up
    columns = [:decidim_initiative_id, :decidim_author_id, :decidim_user_group_id]

    get_duplicates(columns).each do |issue|
      find_next(issue)&.destroy while row_count(issue) > 1
    end

    add_index :decidim_initiatives_votes,
              columns,
              unique: true,
              name: "decidim_initiatives_voutes_author_uniqueness_index"
  end
end

Version data entries

93 entries across 93 versions & 1 rubygems

Version Path
decidim-initiatives-0.30.0.rc3 db/migrate/20171214161410_add_unique_on_votes.rb
decidim-initiatives-0.30.0.rc2 db/migrate/20171214161410_add_unique_on_votes.rb
decidim-initiatives-0.30.0.rc1 db/migrate/20171214161410_add_unique_on_votes.rb
decidim-initiatives-0.29.2 db/migrate/20171214161410_add_unique_on_votes.rb
decidim-initiatives-0.28.5 db/migrate/20171214161410_add_unique_on_votes.rb
decidim-initiatives-0.29.1 db/migrate/20171214161410_add_unique_on_votes.rb
decidim-initiatives-0.28.4 db/migrate/20171214161410_add_unique_on_votes.rb
decidim-initiatives-0.27.9 db/migrate/20171214161410_add_unique_on_votes.rb
decidim-initiatives-0.29.0 db/migrate/20171214161410_add_unique_on_votes.rb
decidim-initiatives-0.28.3 db/migrate/20171214161410_add_unique_on_votes.rb
decidim-initiatives-0.27.8 db/migrate/20171214161410_add_unique_on_votes.rb
decidim-initiatives-0.29.0.rc4 db/migrate/20171214161410_add_unique_on_votes.rb
decidim-initiatives-0.29.0.rc3 db/migrate/20171214161410_add_unique_on_votes.rb
decidim-initiatives-0.29.0.rc2 db/migrate/20171214161410_add_unique_on_votes.rb
decidim-initiatives-0.29.0.rc1 db/migrate/20171214161410_add_unique_on_votes.rb
decidim-initiatives-0.28.2 db/migrate/20171214161410_add_unique_on_votes.rb
decidim-initiatives-0.27.7 db/migrate/20171214161410_add_unique_on_votes.rb
decidim-initiatives-0.28.1 db/migrate/20171214161410_add_unique_on_votes.rb
decidim-initiatives-0.27.6 db/migrate/20171214161410_add_unique_on_votes.rb
decidim-initiatives-0.26.10 db/migrate/20171214161410_add_unique_on_votes.rb