mirror of
https://github.com/TryGhost/Ghost.git
synced 2025-04-08 02:52:39 -05:00
🐛 Fixed table constraint error when updating member's email with an already existing email (#12178)
closes #12045 - When member's email is updated to an already existing email of different member it caused table's unique constraint error, which was not handled properly. - Added handling for this error similar to one in members `add` method.
This commit is contained in:
parent
453bc2c491
commit
afa976066a
4 changed files with 34 additions and 17 deletions
|
@ -242,7 +242,9 @@ module.exports = {
|
|||
if (error.code && error.message.toLowerCase().indexOf('unique') !== -1) {
|
||||
throw new errors.ValidationError({
|
||||
message: i18n.t('errors.models.member.memberAlreadyExists.message'),
|
||||
context: i18n.t('errors.models.member.memberAlreadyExists.context')
|
||||
context: i18n.t('errors.models.member.memberAlreadyExists.context', {
|
||||
action: 'add'
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -282,24 +284,37 @@ module.exports = {
|
|||
},
|
||||
permissions: true,
|
||||
async query(frame) {
|
||||
frame.options.withRelated = ['stripeSubscriptions'];
|
||||
const member = await membersService.api.members.update(frame.data.members[0], frame.options);
|
||||
try {
|
||||
frame.options.withRelated = ['stripeSubscriptions'];
|
||||
const member = await membersService.api.members.update(frame.data.members[0], frame.options);
|
||||
|
||||
const hasCompedSubscription = !!member.related('stripeSubscriptions').find(subscription => subscription.get('plan_nickname') === 'Complimentary');
|
||||
const hasCompedSubscription = !!member.related('stripeSubscriptions').find(subscription => subscription.get('plan_nickname') === 'Complimentary');
|
||||
|
||||
if (typeof frame.data.members[0].comped === 'boolean') {
|
||||
if (frame.data.members[0].comped && !hasCompedSubscription) {
|
||||
await membersService.api.members.setComplimentarySubscription(member);
|
||||
} else if (!(frame.data.members[0].comped) && hasCompedSubscription) {
|
||||
await membersService.api.members.cancelComplimentarySubscription(member);
|
||||
if (typeof frame.data.members[0].comped === 'boolean') {
|
||||
if (frame.data.members[0].comped && !hasCompedSubscription) {
|
||||
await membersService.api.members.setComplimentarySubscription(member);
|
||||
} else if (!(frame.data.members[0].comped) && hasCompedSubscription) {
|
||||
await membersService.api.members.cancelComplimentarySubscription(member);
|
||||
}
|
||||
|
||||
await member.load(['stripeSubscriptions']);
|
||||
}
|
||||
|
||||
await member.load(['stripeSubscriptions']);
|
||||
await member.load(['stripeSubscriptions.customer']);
|
||||
|
||||
return member.toJSON(frame.options);
|
||||
} catch (error) {
|
||||
if (error.code && error.message.toLowerCase().indexOf('unique') !== -1) {
|
||||
throw new errors.ValidationError({
|
||||
message: i18n.t('errors.models.member.memberAlreadyExists.message'),
|
||||
context: i18n.t('errors.models.member.memberAlreadyExists.context', {
|
||||
action: 'edit'
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
throw error;
|
||||
}
|
||||
|
||||
await member.load(['stripeSubscriptions.customer']);
|
||||
|
||||
return member.toJSON(frame.options);
|
||||
}
|
||||
},
|
||||
|
||||
|
|
|
@ -55,7 +55,9 @@ const doImport = async ({members, labels, importSetLabels, createdBy}) => {
|
|||
if (error.code === 'ER_DUP_ENTRY') {
|
||||
return new errors.ValidationError({
|
||||
message: i18n.t('errors.models.member.memberAlreadyExists.message'),
|
||||
context: i18n.t('errors.models.member.memberAlreadyExists.context'),
|
||||
context: i18n.t('errors.models.member.memberAlreadyExists.context', {
|
||||
action: 'add'
|
||||
}),
|
||||
err: error
|
||||
});
|
||||
} else {
|
||||
|
|
|
@ -250,7 +250,7 @@
|
|||
"member": {
|
||||
"memberAlreadyExists": {
|
||||
"message": "Member already exists",
|
||||
"context": "Attempting to add member with existing email address."
|
||||
"context": "Attempting to {action} member with existing email address."
|
||||
}
|
||||
},
|
||||
"member_stripe_customer": {
|
||||
|
|
|
@ -494,7 +494,7 @@ describe('Members API', function () {
|
|||
});
|
||||
});
|
||||
|
||||
it('Fails to import memmber duplicate emails', function () {
|
||||
it('Fails to import member duplicate emails', function () {
|
||||
return request
|
||||
.post(localUtils.API.getApiQuery(`members/upload/`))
|
||||
.attach('membersfile', path.join(__dirname, '/../../../../utils/fixtures/csv/members-duplicate-emails.csv'))
|
||||
|
|
Loading…
Add table
Reference in a new issue