summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJules Laplace <jules@okfoc.us>2015-01-31 09:16:27 -0500
committerJules Laplace <jules@okfoc.us>2015-01-31 09:16:27 -0500
commitaf230e59ec431c9b617b0caf94dc7c37bb5e81af (patch)
treebc67c5aec42091fa8b469d4f4009e2c7381973f4
parentd08c86d68ceb22665b735054fc3bc316f85f84c1 (diff)
handle cancelled subscription
-rw-r--r--public/assets/javascripts/ui/site/EditSubscriptionModal.js5
-rw-r--r--server/index.js2
-rw-r--r--server/lib/api/subscription.js78
-rw-r--r--server/lib/schemas/Subscription.js2
4 files changed, 51 insertions, 36 deletions
diff --git a/public/assets/javascripts/ui/site/EditSubscriptionModal.js b/public/assets/javascripts/ui/site/EditSubscriptionModal.js
index 82f6903..7dd527a 100644
--- a/public/assets/javascripts/ui/site/EditSubscriptionModal.js
+++ b/public/assets/javascripts/ui/site/EditSubscriptionModal.js
@@ -61,7 +61,6 @@ var EditSubscriptionModal = ModalView.extend({
},
didLoad: function(data){
this.loaded = true
- console.log("didLoad", data)
this.plans = data.plans
if (data.subscription) {
this.subscriber = data.subscription
@@ -163,11 +162,13 @@ var EditSubscriptionModal = ModalView.extend({
e.preventDefault()
var msg = "Are you sure you want to cancel your subscription?"
ConfirmModal.confirm(msg, function(){
+ this.__super__.show.call(this)
$.ajax({
url: this.destroyAction,
type: "delete",
- data: { _csrf: this.$csrf.val() },
+ data: { _csrf: $("[name=_csrf]").val() },
success: function(data){
+ window.location.href = "/"
}
})
}.bind(this))
diff --git a/server/index.js b/server/index.js
index 9f28f59..3572675 100644
--- a/server/index.js
+++ b/server/index.js
@@ -154,7 +154,7 @@ site.route = function () {
app.get('/api/subscription', middleware.ensureAuthenticated, api.subscription.middleware.ensurePlans, api.subscription.middleware.ensureSubscription, api.subscription.show)
app.put('/api/subscription', middleware.ensureAuthenticated, api.subscription.middleware.ensureSubscription, api.subscription.update)
app.put('/api/subscription/sync', middleware.ensureAuthenticated, api.subscription.middleware.ensurePlans, api.subscription.middleware.ensureSubscription, api.subscription.sync)
- app.delete('/api/subscription', middleware.ensureAuthenticated, api.subscription.middleware.ensureSubscription, api.subscription.destroy)
+ app.delete('/api/subscription/destroy', middleware.ensureAuthenticated, api.subscription.middleware.ensureSubscription, api.subscription.destroy)
app.get('/partials/plans', views.partials.plans)
diff --git a/server/lib/api/subscription.js b/server/lib/api/subscription.js
index 0801204..285ce8b 100644
--- a/server/lib/api/subscription.js
+++ b/server/lib/api/subscription.js
@@ -51,40 +51,51 @@ var subscription = module.exports = {
res.json({ error: "account error" })
return
}
+ if (subscriber.state != "active") {
+ user.plan_type = "free"
+ user.plan_level = plan_levels["free"]
- var plan = data.subscriptions.subscription.plan.plan_code.split("-")
- var plan_type = plan[0]
- var plan_period = plan[1]
-
- user.plan_type = plan_type
- user.plan_level = plan_levels[plan_type]
+ return subscriber.remove(function(){
+ user.save(function(){
+ res.json({ error: "account cancelled" })
+ })
+ })
+ }
+ else {
+ var plan = data.subscriptions.subscription.plan.plan_code.split("-")
+ var plan_type = plan[0]
+ var plan_period = plan[1]
+
+ user.plan_type = plan_type
+ user.plan_level = plan_levels[plan_type]
- subscriber.uuid = data.subscriptions.subscription.uuid
- subscriber.user_id = user._id
- subscriber.plan_type = plan_type
- subscriber.plan_period = plan_period
- subscriber.plan_level = plan_levels[plan_type]
-
- var add_ons = data.subscriptions.subscription.subscription_add_ons.subscription_add_on
- if (add_ons) {
- if (add_ons.add_on_code) {
- add_ons = [ add_ons ]
- }
- // TODO: handle multiple add-ons.. presumably this will work
- add_ons.forEach(function(add_on){
- var add_on_type = add_on.add_on_code.split("-")[1]
- if (add_on_type == "basic") {
- subscriber.basic_layouts = parseInt( add_on.quantity._ )
- }
- if (add_on_type == "pro") {
- subscriber.pro_layouts = parseInt( add_on.quantity._ )
- }
- })
- }
- else {
- subscriber.basic_layouts = 0
- subscriber.pro_layouts = 0
- }
+ subscriber.uuid = data.subscriptions.subscription.uuid
+ subscriber.user_id = user._id
+ subscriber.plan_type = plan_type
+ subscriber.plan_period = plan_period
+ subscriber.plan_level = plan_levels[plan_type]
+
+ var add_ons = data.subscriptions.subscription.subscription_add_ons.subscription_add_on
+ if (add_ons) {
+ if (add_ons.add_on_code) {
+ add_ons = [ add_ons ]
+ }
+ // TODO: handle multiple add-ons.. presumably this will work
+ add_ons.forEach(function(add_on){
+ var add_on_type = add_on.add_on_code.split("-")[1]
+ if (add_on_type == "basic") {
+ subscriber.basic_layouts = parseInt( add_on.quantity._ )
+ }
+ if (add_on_type == "pro") {
+ subscriber.pro_layouts = parseInt( add_on.quantity._ )
+ }
+ })
+ }
+ else {
+ subscriber.basic_layouts = 0
+ subscriber.pro_layouts = 0
+ }
+ }
subscriber.save(function(){
user.save(function(){
@@ -156,6 +167,9 @@ var subscription = module.exports = {
subscriber.remove(function(){
req.user.plan_code = 0
req.user.plan_type = "free"
+ req.user.save(function(){
+ res.json({ status: "OK" })
+ })
})
})
},
diff --git a/server/lib/schemas/Subscription.js b/server/lib/schemas/Subscription.js
index 44455a9..355bbe2 100644
--- a/server/lib/schemas/Subscription.js
+++ b/server/lib/schemas/Subscription.js
@@ -12,7 +12,7 @@ var SubscriptionSchema = new mongoose.Schema({
plan_type: { type: String, default: "free" },
plan_period: { type: String, default: "monthly" },
- subscription_uuid: { type: String },
+ uuid: { type: String },
basic_layouts: { type: Number, default: 0 },
pro_layouts: { type: Number, default: 0 },