From 2a4ddc621db79c84b66bbe225e7c48feae667160 Mon Sep 17 00:00:00 2001 From: Dan Ungureanu Date: Tue, 23 Mar 2021 18:57:39 +0200 Subject: [PATCH] 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. --- app/models/invite.rb | 3 ++- ...323142518_update_invites_redemption_count.rb | 17 +++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 db/migrate/20210323142518_update_invites_redemption_count.rb diff --git a/app/models/invite.rb b/app/models/invite.rb index da46b38dcd8..749bb8512c8 100644 --- a/app/models/invite.rb +++ b/app/models/invite.rb @@ -212,7 +212,8 @@ class Invite < ActiveRecord::Base .joins("LEFT JOIN invited_users ON invites.id = invited_users.invite_id") .joins("LEFT JOIN users ON invited_users.user_id = users.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') end diff --git a/db/migrate/20210323142518_update_invites_redemption_count.rb b/db/migrate/20210323142518_update_invites_redemption_count.rb new file mode 100644 index 00000000000..2646799b6d9 --- /dev/null +++ b/db/migrate/20210323142518_update_invites_redemption_count.rb @@ -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