Aggiunta di nuovi controller e route al plugin Discourse-subscriptions

Ciao,
Ho bisogno di aiuto, sono abituato a creare applicazioni fullstack ma per quanto riguarda Ember e Rails sono ancora un principiante.

Voglio aggiungere un altro metodo di pagamento (bonifico bancario) al plugin discourse-subscriptions. Sono già riuscito a creare alcune nuove route e ad aggiungere alcune funzionalità, ma sto lottando per aggiungere un nuovo controller alla directory /discourse_subscriptions/controllers e farlo funzionare correttamente.

Voglio impostare un controller Ruby che funga da server e un template Ember come mio client, la struttura è la seguente:

dopo aver creato l’intento di pagamento, il controller payment_intent deve restituire le necessarie istruzioni di pagamento al client.
maggiori dettagli: Stripe - accept bank transfers

Ho già creato nuove pagine aggiungendo metodi nel file subscribe_controller.rb nella cartella del controller discourse_subscriptions/ ma quando provo a creare un altro controller (il server) non funziona, visualizza un errore 404, tuttavia nell’inspector di Ember vedo che la route esiste effettivamente (sì, è davvero confuso).

NB Ho creato tutte le route corrispondenti e i loro tipi di metodo nei file route.rb e subscriptions-route-map.js.

Ho creato un controller Ruby payment_intent e una route corrispondente, il controller dovrebbe ricevere una richiesta post dal client e generare un intento di pagamento Stripe basato sui dati ricevuti con la richiesta post, dopo che l’intento di pagamento è stato creato dovrebbe restituire le necessarie istruzioni di pagamento al client.
Sul lato client, ho un piccolo form con un pulsante di invio.

Non riesco a stabilire la comunicazione tra questo controller e la pagina client (server-client), il fatto che ci siano due controller (Rails ed Ember) è un po’ confusionario.

3 Mi Piace

Ottimo progresso. Come prima esperienza nello sviluppo di plugin per Discourse, questo è decisamente ambizioso. Il vantaggio è il senso di realizzazione e utilità che otterrai una volta che questo funzionerà. Il rischio è che stai affrontando troppe cose in una volta sola, il che potrebbe scoraggiarti dal continuare a lavorare sulla piattaforma. La combinazione Ember/Rails è molto impegnativa, specialmente all’inizio, continua così!

Alcuni suggerimenti per il momento:

  • Affronta le cose a pezzi.
  • Pubblicare il fork su GitHub, quindi creare collegamenti permanenti a sezioni di codice qui potrebbe aiutare la community a vedere più chiaramente cosa stai facendo.
  • Per prima cosa preoccupati dei dati in ingresso dal tuo controller Rails, controlla questo indirizzando la rotta Rails con .json alla fine dell’indirizzo http per vedere i dati grezzi che vengono passati al client. Questo verificherà il lato Rails della richiesta GET.
  • Pensa al Controller Ember come al modulo per gestire le “azioni nell’interfaccia” e le cose che potrebbero dover essere inviate nuovamente al backend (puoi gestire le azioni anche sulle Route, ma divago! :D)
  • Il Router Ember collega il backend al resto del frontend, impostando il modello per il Template, i suoi Componenti e/o Controller da utilizzare.
  • Usa l’arte precedente, esamina tutti i plugin ufficiali e di Pavilion su GitHub per vedere come vengono fatte le cose per azioni/scopi simili. È tutto open source, sfruttalo, copialo, segui le convenzioni (specialmente quelle del core di Discourse)! :slight_smile:
4 Mi Piace

Grazie, seguirò il tuo consiglio e ti terrò aggiornato :slightly_smiling_face:

1 Mi Piace

Ho cancellato tutto quello che ho fatto ieri e sono ripartito da zero. Vi mostrerò cosa ho già fatto finora e i problemi che sto attualmente riscontrando. Per ora non mi interessa davvero modificare i file /locales .yml, ho codificato tutto il testo e ho anche deciso di usare l’html classico invece di handlebar (ci tornerò una volta che avrò qualcosa che funziona)

  1. Ho aggiunto l’opzione bonifico bancario

    ../discourse-subscriptions/assets/javascripts/discourse/templates/subscribe/show.hbs
    
          <h3>Bonifico Bancario</h3>
          <form action="/payment_intent" method="post">
           <!-- alcuni dati-->
            <input type="submit" value="Avanti" class="btn btn-primary ">
          </form>
          
    
  2. Ho creato un controller payment_intent
    ../discourse-subscriptions/app/controllers/discourse_subscriptions/payment_intents_controller.rb

    module DiscourseSubscriptions
        class PaymentIntentsController < ::ApplicationController
          include DiscourseSubscriptions::Stripe
          include DiscourseSubscriptions::Group
          before_action :set_api_key
          requires_login except: [:index, :contributors, :show]
    
          def create
            params.require([:source, :plan])
            begin
              #customer = find_or_create_customer(params[:source])
              # crea un payment intent di test
              bk_payment_intent = Stripe::PaymentIntent.create({
                amount: 1099,
                currency: 'eur'  
              })
    
              render json: payment_intent
            end
        end
    end
    
  3. È il suo percorso
    ../discourse-subscriptions/config/routes.rb

     resources :payment_intents, only: %i[create]
    

    Ma quando eseguo il progetto e vado nell’ispettore di ember mi dice che il percorso non esiste

    E dopo, qual sarebbe il modo migliore per gestire l’invio del modulo? Dovrei creare un altro controller ember, usare il controller subscribe-show.js o aggiungere un tag script all’interno di subscribe/show.hbs?

Hai bisogno di una route Ember per questa schermata e di un controller Ember. Non ne vedo uno qui, quindi “un altro”?

Assicurati di consultare:

Ember.js Guides - Guide e tutorial - Guide Ember (emberjs.com)

E dai un’occhiata al codice per le schermate delle preferenze utente, che è un set di base di moduli.

2 Mi Piace

Ok. grazie per la tua risposta