Ajout de nouveaux contrôleurs et routes au plugin Discourse-subscriptions

Bonjour,
J’ai besoin d’aide, j’ai l’habitude de créer des applications fullstack mais en ce qui concerne Ember et Rails, je suis encore débutant.

Je veux ajouter une autre méthode de paiement (virement bancaire) au plugin discourse-subscriptions. J’ai déjà réussi à créer de nouvelles routes et à y ajouter quelques fonctionnalités, mais j’ai du mal à ajouter un nouveau contrôleur au répertoire /discourse_subscriptions/ controllers et à le faire fonctionner correctement.

Je veux mettre en place un contrôleur Ruby qui agira comme serveur et un template Ember comme mon client, la structure est la suivante :

après avoir créé l’intention de paiement, le contrôleur payment_intent doit retourner les instructions de paiement nécessaires au client.
plus de détails : Stripe - accepter les virements bancaires

J’ai déjà créé de nouvelles pages en ajoutant des méthodes dans le fichier subscribe_controller.rb dans le dossier controller /discourse_subscriptions/ mais quand j’essaie de créer un autre contrôleur (le serveur), ça ne fonctionne pas, ça affiche une erreur 404, cependant dans l’inspecteur Ember je vois que la route existe réellement (oui c’est vraiment déroutant).

NB J’ai créé toutes les routes correspondantes et leurs types de méthodes dans les fichiers route.rb et subscriptions-route-map.js.

J’ai créé un contrôleur Ruby payment_intent et une route correspondante, le contrôleur doit recevoir une requête POST du client et générer une intention de paiement Stripe en fonction des données reçues avec la requête POST, après la création de l’intention de paiement, il doit retourner les instructions de paiement nécessaires au client.
Côté client, j’ai un petit formulaire avec un bouton de soumission.

Je n’arrive pas à établir la communication entre ce contrôleur et la page client (serveur-client), le fait qu’il y ait deux contrôleurs (Rails et Ember) est un peu déroutant.

3 « J'aime »

D’excellents progrès. En tant que première incursion dans le développement de plugins Discourse, c’est certainement ambitieux. L’avantage est le sentiment d’accomplissement et l’utilité que vous obtiendrez une fois que cela fonctionnera. Le risque que vous courez ici est que vous abordez tellement de choses d’un coup que cela pourrait vous décourager de continuer à travailler sur la plateforme. La combinaison Ember/Rails est beaucoup à prendre en charge, surtout au début, continuez !

Quelques conseils pour le moment :

  • Abordez les choses par morceaux.
  • Pousser la fourche sur GitHub, puis lier des sections de code ici pourrait aider la communauté à mieux voir ce que vous faites.
  • Concentrez-vous d’abord sur les données descendantes de votre contrôleur Rails, vérifiez cela en accédant à la route Rails avec .json à la fin de l’adresse http pour voir les données brutes qui sont transmises au client. Cela validera le côté Rails du GET.
  • Considérez le contrôleur Ember comme le module pour gérer les « actions dans l’interface » et les choses qui pourraient devoir être renvoyées au backend (vous pouvez gérer les actions sur les Routes aussi, mais je digresse ! :D)
  • Le routeur Ember connecte le backend au reste du frontend, configurant le modèle pour que le modèle, ses composants et/ou son contrôleur le consomment.
  • Utilisez l’art antérieur, parcourez tous les plugins officiels et Pavilion sur GitHub pour voir comment les choses sont faites pour des actions/objectifs similaires. Tout est open source, exploitez-le, copiez-le, suivez les conventions (surtout celles du cœur de Discourse !) ! :slight_smile:
4 « J'aime »

Merci, je suivrai votre conseil et vous tiendrai informé :slightly_smiling_face:

1 « J'aime »

J’ai supprimé tout ce que j’avais fait hier et j’ai recommencé à zéro. Laissez-moi vous montrer ce que j’ai déjà fait jusqu’à présent et le(s) problème(s) que je rencontre actuellement. Pour le moment, je ne me soucie pas vraiment de modifier les fichiers /locales .yml, j’ai codé en dur tout le texte, et j’ai également décidé d’utiliser le HTML classique plutôt que le handlebar (j’y reviendrai une fois que j’aurai quelque chose qui fonctionne)

  1. J’ai ajouté l’option de virement bancaire
../discourse-subscriptions/assets/javascripts/discourse/templates/subscribe/show.hbs

      <h3>Virement bancaire</h3>
      <form action="/payment_intent" method="post">
       <!-- some data-->
        <input type="submit" value="Suivant" class="btn btn-primary ">
      </form>
      
  1. J’ai créé un contrôleur de 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])
          # create a test payment intent
          bk_payment_intent = Stripe::PaymentIntent.create({
            amount: 1099,
            currency: 'eur'  
          })

          render json: payment_intent
        end
    end
end
  1. C’est sa route
    ../discourse-subscriptions/config/routes.rb
 resources :payment_intents, only: %i[create]

Mais quand je lance le projet et que je vais dans l’inspecteur ember, il me dit que la route n’existe pas

Et après, quelle serait la meilleure façon de gérer la soumission du formulaire ? Devrais-je créer un autre contrôleur ember, utiliser le contrôleur subscribe-show.js ou ajouter une balise script dans le subscribe/show.hbs ?

Vous avez besoin d’une route Ember pour cet écran et d’un contrôleur Ember. Je n’en vois pas ici, donc « un autre » ?

Assurez-vous de consulter :

Ember.js Guides - Guides et tutoriels - Guides Ember (emberjs.com)

Et jetez un œil au code des écrans de préférences utilisateur, qui constitue un ensemble de formulaires de base.

2 « J'aime »

Ok. merci pour votre réponse