2024-11-15 13:49:37 -05:00
|
|
|
class PlaidItemsController < ApplicationController
|
2025-05-25 08:12:54 -04:00
|
|
|
before_action :set_plaid_item, only: %i[edit destroy sync]
|
|
|
|
|
|
|
|
def new
|
|
|
|
region = params[:region] == "eu" ? :eu : :us
|
|
|
|
webhooks_url = region == :eu ? plaid_eu_webhooks_url : plaid_us_webhooks_url
|
|
|
|
|
|
|
|
@link_token = Current.family.get_link_token(
|
|
|
|
webhooks_url: webhooks_url,
|
|
|
|
redirect_url: accounts_url,
|
|
|
|
accountable_type: params[:accountable_type] || "Depository",
|
|
|
|
region: region
|
|
|
|
)
|
|
|
|
end
|
|
|
|
|
|
|
|
def edit
|
|
|
|
webhooks_url = @plaid_item.plaid_region == "eu" ? plaid_eu_webhooks_url : plaid_us_webhooks_url
|
|
|
|
|
|
|
|
@link_token = @plaid_item.get_update_link_token(
|
|
|
|
webhooks_url: webhooks_url,
|
|
|
|
redirect_url: accounts_url,
|
|
|
|
)
|
|
|
|
end
|
2024-11-15 13:49:37 -05:00
|
|
|
|
|
|
|
def create
|
2025-05-15 10:19:56 -04:00
|
|
|
Current.family.create_plaid_item!(
|
|
|
|
public_token: plaid_item_params[:public_token],
|
2024-11-15 13:49:37 -05:00
|
|
|
item_name: item_name,
|
2025-01-31 12:13:58 -06:00
|
|
|
region: plaid_item_params[:region]
|
2024-11-15 13:49:37 -05:00
|
|
|
)
|
|
|
|
|
|
|
|
redirect_to accounts_path, notice: t(".success")
|
|
|
|
end
|
|
|
|
|
|
|
|
def destroy
|
|
|
|
@plaid_item.destroy_later
|
|
|
|
redirect_to accounts_path, notice: t(".success")
|
|
|
|
end
|
|
|
|
|
|
|
|
def sync
|
|
|
|
unless @plaid_item.syncing?
|
|
|
|
@plaid_item.sync_later
|
|
|
|
end
|
|
|
|
|
2025-02-12 12:59:35 -06:00
|
|
|
respond_to do |format|
|
2025-03-05 12:21:17 -05:00
|
|
|
format.html { redirect_back_or_to accounts_path }
|
2025-02-12 12:59:35 -06:00
|
|
|
format.json { head :ok }
|
|
|
|
end
|
2024-11-15 13:49:37 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
private
|
|
|
|
def set_plaid_item
|
|
|
|
@plaid_item = Current.family.plaid_items.find(params[:id])
|
|
|
|
end
|
|
|
|
|
|
|
|
def plaid_item_params
|
2025-01-31 12:13:58 -06:00
|
|
|
params.require(:plaid_item).permit(:public_token, :region, metadata: {})
|
2024-11-15 13:49:37 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
def item_name
|
|
|
|
plaid_item_params.dig(:metadata, :institution, :name)
|
|
|
|
end
|
2025-05-25 08:12:54 -04:00
|
|
|
|
|
|
|
def plaid_us_webhooks_url
|
|
|
|
return webhooks_plaid_url if Rails.env.production?
|
|
|
|
|
|
|
|
ENV.fetch("DEV_WEBHOOKS_URL", root_url.chomp("/")) + "/webhooks/plaid"
|
|
|
|
end
|
|
|
|
|
|
|
|
def plaid_eu_webhooks_url
|
|
|
|
return webhooks_plaid_eu_url if Rails.env.production?
|
|
|
|
|
|
|
|
ENV.fetch("DEV_WEBHOOKS_URL", root_url.chomp("/")) + "/webhooks/plaid_eu"
|
|
|
|
end
|
2024-11-15 13:49:37 -05:00
|
|
|
end
|