From: Aidan Cornelius-Bell Date: Tue, 8 Oct 2024 08:12:16 +0000 (+1030) Subject: Added resync from buttondown. Testing in prod like a pro X-Git-Url: https://gitweb.mndrdr.org/?a=commitdiff_plain;h=8cf610e9f5eb88d63c55b6ff8b4626c37fd3ee2e;p=arelpe.git Added resync from buttondown. Testing in prod like a pro --- diff --git a/app/controllers/mailing_lists_controller.rb b/app/controllers/mailing_lists_controller.rb index 39144be..60c75c7 100644 --- a/app/controllers/mailing_lists_controller.rb +++ b/app/controllers/mailing_lists_controller.rb @@ -24,6 +24,15 @@ class MailingListsController < ApplicationController redirect_to mailing_lists_path, alert: "Failed to unsubscribe. Please try again later." end end + + def resync_from_buttondown + result = ButtondownService.new.resync_user(current_user) + if result + redirect_to mailing_lists_path, notice: "Successfully resynced your information from Buttondown." + else + redirect_to mailing_lists_path, alert: "Failed to resync from Buttondown. Please try again later." + end + end def sync_status result = ButtondownService.new.update_subscriber(current_user) diff --git a/app/services/buttondown_service.rb b/app/services/buttondown_service.rb index e2b01bb..fa166ec 100644 --- a/app/services/buttondown_service.rb +++ b/app/services/buttondown_service.rb @@ -44,6 +44,18 @@ class ButtondownService user.update(buttondown_status: 'unactivated') if response.success? response.success? end + + def resync_user(user) + response = self.class.get("/subscribers/#{user.email}", @options) + + if response.success? + subscriber_data = JSON.parse(response.body) + update_user_from_buttondown(user, subscriber_data) + true + else + false + end + end private @@ -56,6 +68,17 @@ class ButtondownService user.buttondown_status end end + + def update_user_from_buttondown(user, subscriber_data) + user.update( + buttondown_status: subscriber_data['type'], + # Add any other fields you want to sync from Buttondown + # For example: + # last_buttondown_sync: Time.current, + # buttondown_notes: subscriber_data['notes'], + # etc. + ) + end def update_user_buttondown_status(user, response) buttondown_data = JSON.parse(response.body) diff --git a/app/views/mailing_lists/index.html.erb b/app/views/mailing_lists/index.html.erb index 3961721..617b56d 100644 --- a/app/views/mailing_lists/index.html.erb +++ b/app/views/mailing_lists/index.html.erb @@ -16,6 +16,8 @@ <% end %> <%= button_to "Unsubscribe", unsubscribe_mailing_lists_path, method: :delete, class: "button danger", data: { confirm: "Are you sure you want to unsubscribe?" } %> + + <%= button_to "Resync from Buttondown", resync_from_buttondown_mailing_lists_path, method: :post, class: "button" %> <% end %> <% if @is_paid_user && @buttondown_status != 'gifted' %> diff --git a/config/routes.rb b/config/routes.rb index 2232850..efa8e9f 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -10,11 +10,12 @@ Rails.application.routes.draw do end end - resources :mailing_lists, only: [:index] do +resources :mailing_lists, only: [:index] do collection do post 'subscribe' delete 'unsubscribe' post 'sync_status' + post 'resync_from_buttondown' end end resources :subscriptions, only: [:new, :create, :index]