FIX: Add migration to set correct redemption_count (#12491)

Redeeming email invites did not increase the redemption_count which let
those invites in a weird state were they were both pending and redeemed.
This commit is contained in:
Dan Ungureanu 2021-03-23 18:57:39 +02:00 committed by GitHub
parent 066c59d0e3
commit 2a4ddc621d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 19 additions and 1 deletions

View File

@ -212,7 +212,8 @@ class Invite < ActiveRecord::Base
.joins("LEFT JOIN invited_users ON invites.id = invited_users.invite_id") .joins("LEFT JOIN invited_users ON invites.id = invited_users.invite_id")
.joins("LEFT JOIN users ON invited_users.user_id = users.id") .joins("LEFT JOIN users ON invited_users.user_id = users.id")
.where(invited_by_id: inviter.id) .where(invited_by_id: inviter.id)
.where('redemption_count > max_redemptions_allowed OR expires_at < ?', Time.zone.now) .where('redemption_count < max_redemptions_allowed')
.where('expires_at < ?', Time.zone.now)
.order('invites.expires_at ASC') .order('invites.expires_at ASC')
end end

View File

@ -0,0 +1,17 @@
# frozen_string_literal: true
class UpdateInvitesRedemptionCount < ActiveRecord::Migration[6.0]
def change
execute <<~SQL
WITH invite_counts AS (
SELECT invite_id, COUNT(*) count
FROM invited_users
GROUP BY invite_id
)
UPDATE invites
SET redemption_count = GREATEST(redemption_count, count)
FROM invite_counts
WHERE invites.id = invite_counts.invite_id
SQL
end
end