0
Fork 0
mirror of https://github.com/TryGhost/Ghost.git synced 2025-04-15 03:01:37 -05:00

Added admin endpoint for editing member subscription (#12145)

refs #12127

- Adds new `editSubscription` endpoint for members admin API which allows updating individual subscription for a member - `PUT /members/:id/subscriptions/:subscription_id/`
- `editSubscription` has same permissions as member's `edit` endpoint
- Currently allows toggling of cancellation at period end for an active subscription
This commit is contained in:
Rishabh Garg 2020-08-20 17:28:11 +05:30 committed by GitHub
parent 4fff93f9e0
commit c7f3837c54
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 55 additions and 0 deletions

View file

@ -366,6 +366,52 @@ module.exports = {
}
},
editSubscription: {
statusCode: 200,
headers: {},
options: [
'id',
'subscription_id'
],
data: [
'cancel_at_period_end'
],
validation: {
options: {
id: {
required: true
},
subscription_id: {
required: true
}
},
data: {
cancel_at_period_end: {
required: true
}
}
},
permissions: {
method: 'edit'
},
async query(frame) {
await membersService.api.members.updateSubscription(frame.options.id, {
subscriptionId: frame.options.subscription_id,
cancelAtPeriodEnd: frame.data.cancel_at_period_end
});
let model = await membersService.api.members.get({id: frame.options.id}, {
withRelated: ['labels', 'stripeSubscriptions', 'stripeSubscriptions.customer']
});
if (!model) {
throw new errors.NotFoundError({
message: i18n.t('errors.api.members.memberNotFound')
});
}
return model.toJSON(frame.options);
}
},
destroy: {
statusCode: 204,
headers: {},

View file

@ -65,5 +65,12 @@ module.exports = {
stats(data, apiConfig, frame) {
debug('stats');
frame.response = data;
},
editSubscription(data, apiConfig, frame) {
debug('editSubscription');
frame.response = {
members: [mapper.mapMember(data, frame)]
};
}
};

View file

@ -109,6 +109,8 @@ module.exports = function apiRoutes() {
router.put('/members/:id', shared.middlewares.labs.members, mw.authAdminApi, http(apiCanary.members.edit));
router.del('/members/:id', shared.middlewares.labs.members, mw.authAdminApi, http(apiCanary.members.destroy));
router.put('/members/:id/subscriptions/:subscription_id', shared.middlewares.labs.members, mw.authAdminApi, http(apiCanary.members.editSubscription));
router.get('/members/:id/signin_urls', shared.middlewares.labs.members, mw.authAdminApi, http(apiCanary.memberSigninUrls.read));
// ## Labels