Group plan subscription (#8153)

* Added payment to groups and pay with group plan with Stripe

* Added edit card for Stripe

* Added stripe cancel

* Added subscribe with Amazon payments

* Added Amazon cancel for group subscription

* Added group subscription with paypal

* Added paypal cancel

* Added ipn cancel for Group plan

* Added a subscription tab and hid only the task tab when group is not subscribed

* Fixed linting issues

* Fixed tests

* Added payment unit tests

* Added back refresh after stripe payment

* Fixed style issues

* Limited grouop query fields and checked access

* Abstracted subscription schema

* Added year group plan and more access checks

* Maded purchase fields private

* Removed id and timestampes

* Added else checks to ensure user subscription is not altered. Removed active field from group model

* Added toJSONTransform function

* Moved plan active check to other toJson function

* Added check to see if purchaed has been populated

* Added purchase details to private

* Added correct data usage when paying for group sub
This commit is contained in:
Keith Holliday
2016-11-01 21:51:30 +01:00
committed by Matteo Pagliazzi
parent 7f38c61c70
commit d8c37f6e2d
14 changed files with 558 additions and 118 deletions

View File

@@ -23,6 +23,9 @@ import pusher from '../libs/pusher';
import {
syncableAttrs,
} from '../libs/taskManager';
import {
schema as SubscriptionPlanSchema,
} from './subscriptionPlan';
const questScrolls = shared.content.quests;
const Schema = mongoose.Schema;
@@ -91,7 +94,9 @@ export let schema = new Schema({
rewards: [{type: String, ref: 'Task'}],
},
purchased: {
active: {type: Boolean, default: false},
plan: {type: SubscriptionPlanSchema, default: () => {
return {};
}},
},
}, {
strict: true,
@@ -100,6 +105,10 @@ export let schema = new Schema({
schema.plugin(baseModel, {
noSet: ['_id', 'balance', 'quest', 'memberCount', 'chat', 'challengeCount', 'tasksOrder', 'purchased'],
private: ['purchased.plan'],
toJSONTransform (plainObj, originalDoc) {
if (plainObj.purchased) plainObj.purchased.active = originalDoc.purchased.plan && originalDoc.purchased.plan.customerId;
},
});
// A list of additional fields that cannot be updated (but can be set on creation)