save plan model
This commit is contained in:
parent
0d82bcf37e
commit
a2d120c8b5
|
@ -2,12 +2,22 @@
|
||||||
|
|
||||||
module DiscoursePatrons
|
module DiscoursePatrons
|
||||||
class PlansController < ::Admin::AdminController
|
class PlansController < ::Admin::AdminController
|
||||||
def index
|
include DiscoursePatrons::Stripe
|
||||||
head 204
|
|
||||||
end
|
|
||||||
|
|
||||||
def show
|
before_action :set_api_key
|
||||||
head 204
|
|
||||||
|
def create
|
||||||
|
plan = ::Stripe::Plan.create(
|
||||||
|
amount: params[:amount],
|
||||||
|
interval: params[:interval],
|
||||||
|
product: {
|
||||||
|
name: 'Gold special',
|
||||||
|
},
|
||||||
|
currency: 'usd',
|
||||||
|
id: 'gold-special',
|
||||||
|
)
|
||||||
|
|
||||||
|
plan.to_json
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -2,11 +2,12 @@
|
||||||
|
|
||||||
module DiscoursePatrons
|
module DiscoursePatrons
|
||||||
class SubscriptionsController < ::Admin::AdminController
|
class SubscriptionsController < ::Admin::AdminController
|
||||||
|
include DiscoursePatrons::Stripe
|
||||||
|
|
||||||
|
before_action :set_api_key
|
||||||
|
|
||||||
def index
|
def index
|
||||||
::Stripe.api_key = SiteSetting.discourse_patrons_secret_key
|
|
||||||
|
|
||||||
subscriptions = ::Stripe::Subscription.list
|
subscriptions = ::Stripe::Subscription.list
|
||||||
|
|
||||||
subscriptions.to_json
|
subscriptions.to_json
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
module DiscoursePatrons
|
||||||
|
module Stripe
|
||||||
|
extend ActiveSupport::Concern
|
||||||
|
|
||||||
|
def set_api_key
|
||||||
|
::Stripe.api_key = 'SiteSetting.discourse_patrons_secret_key'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -2,6 +2,8 @@
|
||||||
|
|
||||||
module DiscoursePatrons
|
module DiscoursePatrons
|
||||||
class PatronsController < ::ApplicationController
|
class PatronsController < ::ApplicationController
|
||||||
|
include DiscoursePatrons::Stripe
|
||||||
|
|
||||||
skip_before_action :verify_authenticity_token, only: [:create]
|
skip_before_action :verify_authenticity_token, only: [:create]
|
||||||
before_action :set_api_key
|
before_action :set_api_key
|
||||||
|
|
||||||
|
@ -16,7 +18,7 @@ module DiscoursePatrons
|
||||||
end
|
end
|
||||||
|
|
||||||
def show
|
def show
|
||||||
payment_intent = Stripe::PaymentIntent.retrieve(params[:pid])
|
payment_intent = ::Stripe::PaymentIntent.retrieve(params[:pid])
|
||||||
|
|
||||||
if current_user && (current_user.admin || payment_intent[:customer] == current_user.id)
|
if current_user && (current_user.admin || payment_intent[:customer] == current_user.id)
|
||||||
result = payment_intent
|
result = payment_intent
|
||||||
|
@ -61,10 +63,6 @@ module DiscoursePatrons
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def set_api_key
|
|
||||||
::Stripe.api_key = SiteSetting.discourse_patrons_secret_key
|
|
||||||
end
|
|
||||||
|
|
||||||
def param_currency_to_number
|
def param_currency_to_number
|
||||||
params[:amount].to_s.sub('.', '').to_i
|
params[:amount].to_s.sub('.', '').to_i
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,7 +1,11 @@
|
||||||
export default Ember.Controller.extend({
|
export default Ember.Controller.extend({
|
||||||
actions: {
|
actions: {
|
||||||
createPlan() {
|
createPlan() {
|
||||||
this.transitionToRoute("adminPlugins.discourse-patrons.plans");
|
this.get("model")
|
||||||
|
.save()
|
||||||
|
.then(() => {
|
||||||
|
this.transitionToRoute("adminPlugins.discourse-patrons.plans");
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -5,7 +5,7 @@ export default {
|
||||||
this.route("discourse-patrons", function() {
|
this.route("discourse-patrons", function() {
|
||||||
this.route("subscriptions");
|
this.route("subscriptions");
|
||||||
this.route("plans", function() {
|
this.route("plans", function() {
|
||||||
this.route("show", { path: '/:plan-id' });
|
this.route("show", { path: "/:plan-id" });
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -1 +1,22 @@
|
||||||
export default Discourse.Route.extend({});
|
import { ajax } from "discourse/lib/ajax";
|
||||||
|
|
||||||
|
export default Discourse.Route.extend({
|
||||||
|
model() {
|
||||||
|
return Ember.Object.create({
|
||||||
|
name: "",
|
||||||
|
interval: "month",
|
||||||
|
amount: 0,
|
||||||
|
intervals: ["day", "week", "month", "year"],
|
||||||
|
|
||||||
|
save() {
|
||||||
|
const data = {
|
||||||
|
interval: this.interval,
|
||||||
|
amount: this.amount,
|
||||||
|
name: this.name
|
||||||
|
};
|
||||||
|
|
||||||
|
return ajax("/patrons/admin/plans", { method: "post", data });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
export default Discourse.Route.extend({});
|
|
@ -1,7 +1,22 @@
|
||||||
|
|
||||||
|
|
||||||
<h4>[plans show]</h4>
|
<h4>{{i18n 'discourse_patrons.admin.plans.title'}}</h4>
|
||||||
|
|
||||||
|
<form class="form-horizontal">
|
||||||
|
<div>
|
||||||
|
<label for="name">{{i18n 'discourse_patrons.admin.plans.show.name'}}</label>
|
||||||
|
{{input type="text" name="name" value=model.name}}
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<label for="amount">{{i18n 'discourse_patrons.admin.plans.show.amount'}}</label>
|
||||||
|
{{input type="text" name="name" value=model.amount}}
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<label for="interval">{{i18n 'discourse_patrons.admin.plans.show.interval'}}</label>
|
||||||
|
{{combo-box valueAttribute="value" content=model.intervals value=model.interval}}
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
|
||||||
<div class="buttons">
|
<div class="buttons">
|
||||||
{{d-button label="plans.show" action="createPlan" icon="plus"}}
|
{{d-button label="discourse_patrons.admin.plans.show.create" action="createPlan" icon="plus"}}
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,7 +1,10 @@
|
||||||
|
|
||||||
|
|
||||||
<h3>{{i18n 'discourse_patrons.admin.plans.title'}}</h3>
|
<h3>{{i18n 'discourse_patrons.admin.plans.title'}}</h3>
|
||||||
|
|
||||||
{{#link-to 'adminPlugins.discourse-patrons.plans.show' 'new' class="btn btn-primary"}}
|
{{#link-to 'adminPlugins.discourse-patrons.plans.show' 'new' class="btn btn-primary"}}
|
||||||
{{d-icon "plus"}}
|
{{d-icon "plus"}}
|
||||||
<span>{{i18n 'discourse_patrons.admin.plans.new'}}</span>
|
<span>{{i18n 'discourse_patrons.admin.plans.new'}}</span>
|
||||||
{{/link-to}}
|
{{/link-to}}
|
||||||
|
|
||||||
|
{{outlet}}
|
||||||
|
|
|
@ -49,6 +49,11 @@ en:
|
||||||
plans:
|
plans:
|
||||||
title: Plans
|
title: Plans
|
||||||
new: New
|
new: New
|
||||||
|
show:
|
||||||
|
create: Create
|
||||||
|
name: Name
|
||||||
|
amount: Amount
|
||||||
|
interval: Interval
|
||||||
table:
|
table:
|
||||||
head:
|
head:
|
||||||
plan: Plan
|
plan: Plan
|
||||||
|
|
|
@ -4,6 +4,7 @@ DiscoursePatrons::Engine.routes.draw do
|
||||||
get '/admin' => 'admin#index'
|
get '/admin' => 'admin#index'
|
||||||
get '/admin/subscriptions' => 'subscriptions#index'
|
get '/admin/subscriptions' => 'subscriptions#index'
|
||||||
get '/admin/plans/:plan_id' => 'plans#show'
|
get '/admin/plans/:plan_id' => 'plans#show'
|
||||||
|
post '/admin/plans' => 'plans#create'
|
||||||
get '/' => 'patrons#index'
|
get '/' => 'patrons#index'
|
||||||
get '/:pid' => 'patrons#show'
|
get '/:pid' => 'patrons#show'
|
||||||
resources :patrons, only: [:index, :create]
|
resources :patrons, only: [:index, :create]
|
||||||
|
|
|
@ -37,6 +37,7 @@ after_initialize do
|
||||||
[
|
[
|
||||||
"../lib/discourse_patrons/engine",
|
"../lib/discourse_patrons/engine",
|
||||||
"../config/routes",
|
"../config/routes",
|
||||||
|
"../app/controllers/concerns/stripe",
|
||||||
"../app/controllers/admin_controller",
|
"../app/controllers/admin_controller",
|
||||||
"../app/controllers/admin/plans_controller",
|
"../app/controllers/admin/plans_controller",
|
||||||
"../app/controllers/admin/subscriptions_controller",
|
"../app/controllers/admin/subscriptions_controller",
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
require 'rails_helper'
|
||||||
|
|
||||||
|
module DiscoursePatrons
|
||||||
|
RSpec.describe PlansController do
|
||||||
|
let(:admin) { Fabricate(:admin) }
|
||||||
|
|
||||||
|
before { sign_in(admin) }
|
||||||
|
|
||||||
|
it 'is a subclass of AdminController' do
|
||||||
|
expect(DiscoursePatrons::PlansController < Admin::AdminController).to eq(true)
|
||||||
|
end
|
||||||
|
|
||||||
|
it "creates a plan" do
|
||||||
|
::Stripe::Plan.expects(:create)
|
||||||
|
post "/patrons/admin/plans.json", params: {}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in New Issue