FEATURE: multiple use invite links (#9813)

This commit is contained in:
Arpit Jalan
2020-06-09 20:49:32 +05:30
committed by GitHub
parent 6b7a2d6d4d
commit 3094459cd9
48 changed files with 1280 additions and 351 deletions

View File

@@ -0,0 +1,17 @@
# frozen_string_literal: true
class AddBulkInviteLinkToInvites < ActiveRecord::Migration[6.0]
def change
add_column :invites, :max_redemptions_allowed, :integer, null: false, default: 1
add_column :invites, :redemption_count, :integer, null: false, default: 0
add_column :invites, :expires_at, :datetime, null: true
invite_expiry_days = DB.query_single("SELECT value FROM site_settings WHERE name = 'invite_expiry_days'").first
invite_expiry_days = 30 if invite_expiry_days.blank?
execute <<~SQL
UPDATE invites SET expires_at = updated_at + INTERVAL '#{invite_expiry_days} days'
SQL
change_column :invites, :expires_at, :datetime, null: false
end
end

View File

@@ -0,0 +1,15 @@
# frozen_string_literal: true
class CreateInvitedUsers < ActiveRecord::Migration[6.0]
def change
create_table :invited_users do |t|
t.integer :user_id
t.integer :invite_id, null: false
t.datetime :redeemed_at
t.timestamps null: false
end
add_index :invited_users, :invite_id
add_index :invited_users, [:user_id, :invite_id], unique: true, where: 'user_id IS NOT NULL'
end
end

View File

@@ -0,0 +1,26 @@
# frozen_string_literal: true
class MigrateInviteRedeemedDataToInvitedUsers < ActiveRecord::Migration[6.0]
def up
%i{user_id redeemed_at}.each do |column|
Migration::ColumnDropper.mark_readonly(:invites, column)
end
execute <<~SQL
INSERT INTO invited_users (
user_id,
invite_id,
redeemed_at,
created_at,
updated_at
)
SELECT user_id, id, redeemed_at, created_at, updated_at
FROM invites
WHERE user_id IS NOT NULL AND redeemed_at IS NOT NULL
SQL
end
def down
raise ActiveRecord::IrreversibleMigration
end
end