Justin DiRose c9ff55b46a
REFACTOR: Use the Prices API in place of Plans (#17)
Stripe has a newer API called Prices where you can create a price for any product and it can either be recurring or one-time. The easy part is existing Plans work with the Prices API by passing a Plan ID, but objects are returned in the slightly-different Prices API object format.

This commit is a refactor to the new API to handle the data in its new form, and lays the foundation for a one time payment plan to be added to any subscriptions product.
2020-07-15 08:44:40 -05:00

64 lines
1.5 KiB
JavaScript

import Plan from "discourse/plugins/discourse-subscriptions/discourse/models/plan";
import discourseComputed from "discourse-common/utils/decorators";
import { ajax } from "discourse/lib/ajax";
const AdminPlan = Plan.extend({
isNew: false,
name: "",
interval: "month",
unit_amount: 0,
intervals: ["day", "week", "month", "year"],
metadata: {},
@discourseComputed("trial_period_days")
parseTrialPeriodDays(trialDays) {
if (trialDays) {
return parseInt(0 + trialDays, 10);
} else {
return 0;
}
},
save() {
const data = {
nickname: this.nickname,
interval: this.interval,
amount: this.unit_amount,
currency: this.currency,
trial_period_days: this.parseTrialPeriodDays,
product: this.product,
metadata: this.metadata,
active: this.active
};
return ajax("/s/admin/plans", { method: "post", data });
},
update() {
const data = {
nickname: this.nickname,
trial_period_days: this.parseTrialPeriodDays,
metadata: this.metadata,
active: this.active
};
return ajax(`/s/admin/plans/${this.id}`, { method: "patch", data });
}
});
AdminPlan.reopenClass({
findAll(data) {
return ajax("/s/admin/plans", { method: "get", data }).then(result =>
result.map(plan => AdminPlan.create(plan))
);
},
find(id) {
return ajax(`/s/admin/plans/${id}`, { method: "get" }).then(plan =>
AdminPlan.create(plan)
);
}
});
export default AdminPlan;