diff --git a/app/views/accounts/index.html.erb b/app/views/accounts/index.html.erb index 5c99a4f2..b4c78332 100644 --- a/app/views/accounts/index.html.erb +++ b/app/views/accounts/index.html.erb @@ -10,7 +10,6 @@ variant: "outline", disabled: Current.family.syncing?, icon: "refresh-cw", - class: "" ) %> <% end %> diff --git a/app/views/plaid_items/_plaid_item.html.erb b/app/views/plaid_items/_plaid_item.html.erb index 7c3dc8b2..61dea7dc 100644 --- a/app/views/plaid_items/_plaid_item.html.erb +++ b/app/views/plaid_items/_plaid_item.html.erb @@ -92,7 +92,7 @@ <% end %> - <% else %> + <% elsif Rails.env.development? %> <%= icon( "refresh-cw", as_button: true, diff --git a/db/migrate/20250513122703_add_uniqueness_to_subscriptions.rb b/db/migrate/20250513122703_add_uniqueness_to_subscriptions.rb new file mode 100644 index 00000000..f97b67f9 --- /dev/null +++ b/db/migrate/20250513122703_add_uniqueness_to_subscriptions.rb @@ -0,0 +1,6 @@ +class AddUniquenessToSubscriptions < ActiveRecord::Migration[7.2] + def change + remove_index :subscriptions, :family_id + add_index :subscriptions, :family_id, unique: true + end +end diff --git a/db/schema.rb b/db/schema.rb index 4de66be4..1f14a5c9 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -580,7 +580,7 @@ ActiveRecord::Schema[7.2].define(version: 2025_05_12_171654) do t.datetime "trial_ends_at" t.datetime "created_at", null: false t.datetime "updated_at", null: false - t.index ["family_id"], name: "index_subscriptions_on_family_id" + t.index ["family_id"], name: "index_subscriptions_on_family_id", unique: true end create_table "syncs", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| diff --git a/lib/tasks/stripe.rake b/lib/tasks/stripe.rake new file mode 100644 index 00000000..7e2124de --- /dev/null +++ b/lib/tasks/stripe.rake @@ -0,0 +1,28 @@ +namespace :stripe do + desc "Sync legacy Stripe subscriptions" + task sync_legacy_subscriptions: :environment do + cli = Stripe::StripeClient.new(ENV["STRIPE_SECRET_KEY"]) + + subs = cli.v1.subscriptions.list + + subs.auto_paging_each do |sub| + details = sub.items.data.first + + family = Family.find_by(stripe_customer_id: sub.customer) + + if family.nil? + puts "Family not found for Stripe customer ID: #{sub.customer}, skipping" + next + end + + family.subscription.update!( + stripe_id: sub.id, + status: sub.status, + interval: details.plan.interval, + amount: details.plan.amount / 100.0, + currency: details.plan.currency.upcase, + current_period_ends_at: Time.at(details.current_period_end) + ) + end + end +end