Skip to content
This repository has been archived by the owner on Oct 5, 2022. It is now read-only.

Commit

Permalink
Refactored user CRUD to be usable by Ghost core (#113)
Browse files Browse the repository at this point in the history
refs #105

- It's a follow up to a series of refactorings in the module mostly discussed in refed PR
- The sendEmailWithMagicLink and destroyStripeSubscriptions were exposed through members API so that Ghost  could call it from the controller level
  • Loading branch information
naz authored Jan 15, 2020
1 parent 3cd5bde commit aa7c76a
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 33 deletions.
2 changes: 1 addition & 1 deletion packages/members-api/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,6 @@ module.exports = function MembersApi({
}

const users = Users({
sendEmailWithMagicLink,
stripe,
memberModel
});
Expand Down Expand Up @@ -311,6 +310,7 @@ module.exports = function MembersApi({
getMemberIdentityData,
getPublicConfig,
bus,
sendEmailWithMagicLink,
members: users
};
};
60 changes: 28 additions & 32 deletions packages/members-api/lib/users.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,19 @@ const common = require('./common');

let Member;

async function createMember({email, name, note}, options = {}) {
async function createMember({email, name, note}) {
const model = await Member.add({
email,
name,
note
});
const member = model.toJSON(options);
const member = model.toJSON();
return member;
}

async function getMember(data, options = {}) {
if (!data.email && !data.id && !data.uuid) {
return Promise.resolve(null);
return null;
}
const model = await Member.findOne(data, options);
if (!model) {
Expand Down Expand Up @@ -56,28 +56,34 @@ function listMembers(options) {
}

module.exports = function ({
sendEmailWithMagicLink,
stripe,
memberModel
}) {
Member = memberModel;

async function getStripeSubscriptions(member) {
if (!stripe) {
return {subscriptions: []};
}

return await stripe.getActiveSubscriptions(member);
}

async function destroyStripeSubscriptions(member) {
if (stripe) {
await stripe.cancelAllSubscriptions(member);
}
}

async function get(data, options) {
debug(`get id:${data.id} email:${data.email}`);
const member = await getMember(data, options);
if (!member) {
return member;
}

if (!stripe) {
return Object.assign(member, {
stripe: {
subscriptions: []
}
});
}
try {
const subscriptions = await stripe.getActiveSubscriptions(member);
const subscriptions = await getStripeSubscriptions(member);

return Object.assign(member, {
stripe: {
Expand All @@ -96,31 +102,23 @@ module.exports = function ({
if (!member) {
return;
}
if (stripe) {
await stripe.cancelAllSubscriptions(member);
}
return deleteMember(data, options);

await destroyStripeSubscriptions(member);

return deleteMember(data);
}

async function update(data, options) {
debug(`update id:${options.id}`);
await getMember({id: options.id});

return updateMember(data, options);
}

async function list(options) {
const {meta, members} = await listMembers(options);

const membersWithSubscriptions = await Promise.all(members.map(async function (member) {
if (!stripe) {
return Object.assign(member, {
stripe: {
subscriptions: []
}
});
}

const subscriptions = await stripe.getActiveSubscriptions(member);
const subscriptions = await getStripeSubscriptions(member);

return Object.assign(member, {
stripe: {
Expand All @@ -135,13 +133,9 @@ module.exports = function ({
};
}

async function create(data, options = {}) {
async function create(data) {
debug(`create email:${data.email}`);
const member = await createMember(data);
if (options.sendEmail) {
debug(`create sending email to ${member.email}`);
await sendEmailWithMagicLink(member.email, options.emailType);
}
return member;
}

Expand All @@ -150,6 +144,8 @@ module.exports = function ({
update,
list,
get,
destroy
destroy,
getStripeSubscriptions,
destroyStripeSubscriptions
};
};

0 comments on commit aa7c76a

Please sign in to comment.