diff --git a/app/controllers/admin/products_controller.rb b/app/controllers/admin/products_controller.rb index fb7f5d4..4129bc5 100644 --- a/app/controllers/admin/products_controller.rb +++ b/app/controllers/admin/products_controller.rb @@ -30,6 +30,36 @@ module DiscoursePatrons end end + def show + begin + product = ::Stripe::Product.retrieve(params[:id]) + + render_json_dump product + + rescue ::Stripe::InvalidRequestError => e + return render_json_error e.message + end + end + + def update + begin + product = ::Stripe::Product.update( + params[:id], { + name: params[:name], + active: params[:active], + metadata: { + group_name: params[:group_name] + } + } + ) + + render_json_dump product + + rescue ::Stripe::InvalidRequestError => e + return render_json_error e.message + end + end + def destroy begin product = ::Stripe::Product.delete(params[:id]) diff --git a/assets/javascripts/discourse/controllers/admin-plugins-discourse-patrons-plans-show.js.es6 b/assets/javascripts/discourse/controllers/admin-plugins-discourse-patrons-plans-show.js.es6 index 5c8a8d4..ce50880 100644 --- a/assets/javascripts/discourse/controllers/admin-plugins-discourse-patrons-plans-show.js.es6 +++ b/assets/javascripts/discourse/controllers/admin-plugins-discourse-patrons-plans-show.js.es6 @@ -3,7 +3,7 @@ import { popupAjaxError } from "discourse/lib/ajax-error"; export default Ember.Controller.extend({ actions: { createPlan() { - this.get("model") + this.get("model.plan") .save() .then(() => { this.transitionToRoute("adminPlugins.discourse-patrons.plans"); diff --git a/assets/javascripts/discourse/controllers/admin-plugins-discourse-patrons-products-show.js.es6 b/assets/javascripts/discourse/controllers/admin-plugins-discourse-patrons-products-show.js.es6 index 7533876..963b93f 100644 --- a/assets/javascripts/discourse/controllers/admin-plugins-discourse-patrons-products-show.js.es6 +++ b/assets/javascripts/discourse/controllers/admin-plugins-discourse-patrons-products-show.js.es6 @@ -17,6 +17,15 @@ export default Ember.Controller.extend({ this.transitionToRoute("adminPlugins.discourse-patrons.products"); }) .catch(popupAjaxError); + }, + + updateProduct() { + this.get("model.product") + .update() + .then(() => { + this.transitionToRoute("adminPlugins.discourse-patrons.products"); + }) + .catch(popupAjaxError); } } }); diff --git a/assets/javascripts/discourse/discourse-patrons-route-map.js.es6 b/assets/javascripts/discourse/discourse-patrons-route-map.js.es6 index 78ba315..dcefa3f 100644 --- a/assets/javascripts/discourse/discourse-patrons-route-map.js.es6 +++ b/assets/javascripts/discourse/discourse-patrons-route-map.js.es6 @@ -5,7 +5,7 @@ export default { this.route("discourse-patrons", function() { this.route("dashboard"); this.route("products", function() { - this.route("show", { path: "/:plan-id" }); + this.route("show", { path: "/:product-id" }); }); this.route("plans", function() { this.route("show", { path: "/:plan-id" }); diff --git a/assets/javascripts/discourse/models/admin-product.js.es6 b/assets/javascripts/discourse/models/admin-product.js.es6 index c875c43..5da5791 100644 --- a/assets/javascripts/discourse/models/admin-product.js.es6 +++ b/assets/javascripts/discourse/models/admin-product.js.es6 @@ -1,6 +1,8 @@ import { ajax } from "discourse/lib/ajax"; const AdminProduct = Discourse.Model.extend({ + isNew: false, + destroy() { return ajax(`/patrons/admin/products/${this.id}`, { method: "delete" }); }, @@ -13,6 +15,16 @@ const AdminProduct = Discourse.Model.extend({ }; return ajax("/patrons/admin/products", { method: "post", data }); + }, + + update() { + const data = { + name: this.name, + groupName: this.groupName, + active: this.active + }; + + return ajax(`/patrons/admin/products/${this.id}`, { method: "patch", data }); } }); @@ -21,7 +33,13 @@ AdminProduct.reopenClass({ return ajax("/patrons/admin/products", { method: "get" }).then(result => result.map(product => AdminProduct.create(product)) ); - } + }, + + find(id) { + return ajax(`/patrons/admin/products/${id}`, { method: "get" }).then(product => + AdminProduct.create(product) + ); + }, }); export default AdminProduct; diff --git a/assets/javascripts/discourse/routes/admin-plugins-discourse-patrons-plans-show.js.es6 b/assets/javascripts/discourse/routes/admin-plugins-discourse-patrons-plans-show.js.es6 index 1818889..7b49b78 100644 --- a/assets/javascripts/discourse/routes/admin-plugins-discourse-patrons-plans-show.js.es6 +++ b/assets/javascripts/discourse/routes/admin-plugins-discourse-patrons-plans-show.js.es6 @@ -1,7 +1,11 @@ import AdminPlan from "discourse/plugins/discourse-patrons/discourse/models/admin-plan"; +import AdminProduct from "discourse/plugins/discourse-patrons/discourse/models/admin-product"; export default Discourse.Route.extend({ model() { - return AdminPlan.create(); + const plan = AdminPlan.create(); + const products = AdminProduct.findAll(); + + return Ember.RSVP.hash({ plan, products }); } }); diff --git a/assets/javascripts/discourse/routes/admin-plugins-discourse-patrons-products-show.js.es6 b/assets/javascripts/discourse/routes/admin-plugins-discourse-patrons-products-show.js.es6 index 4771d63..9a22327 100644 --- a/assets/javascripts/discourse/routes/admin-plugins-discourse-patrons-products-show.js.es6 +++ b/assets/javascripts/discourse/routes/admin-plugins-discourse-patrons-products-show.js.es6 @@ -2,8 +2,17 @@ import AdminProduct from "discourse/plugins/discourse-patrons/discourse/models/a import Group from "discourse/models/group"; export default Discourse.Route.extend({ - model(param) { - const product = AdminProduct.create(); + model(params) { + const id = params['product-id']; + let product; + + if(id === 'new') { + product = AdminProduct.create({ active: true, isNew: true }); + } + else { + product = AdminProduct.find(id); + } + const groups = Group.findAll({ ignore_automatic: true }); return Ember.RSVP.hash({ product, groups }); diff --git a/assets/javascripts/discourse/templates/admin/plugins-discourse-patrons-plans-show.hbs b/assets/javascripts/discourse/templates/admin/plugins-discourse-patrons-plans-show.hbs index 48f83c4..7c2905f 100644 --- a/assets/javascripts/discourse/templates/admin/plugins-discourse-patrons-plans-show.hbs +++ b/assets/javascripts/discourse/templates/admin/plugins-discourse-patrons-plans-show.hbs @@ -2,18 +2,22 @@