Ghost/core/server/services/integrations/integrations-service.js
Sam Lord 80a385ef0c Replace GhostError with InternalServerError
no issue

@tryghost/errors no longer exports GhostError, as we should only be using subclasses. Replace with InternalServerError as a new default, but should be replaced with a relevant error when one exists.
2021-12-14 12:17:48 +00:00

62 lines
1.9 KiB
JavaScript

const {NotFoundError, InternalServerError} = require('@tryghost/errors');
const tpl = require('@tryghost/tpl');
const messages = {
notFound: '{resource} not found.'
};
class IntegrationsService {
constructor({IntegrationModel, ApiKeyModel}) {
this.IntegrationModel = IntegrationModel;
this.ApiKeyModel = ApiKeyModel;
}
async edit(data, options) {
if (options.keyid) {
const model = await this.ApiKeyModel.findOne({id: options.keyid});
if (!model) {
throw new NotFoundError({
message: tpl(messages.notFound, {
resource: 'ApiKey'
})
});
}
try {
await this.ApiKeyModel.refreshSecret(model.toJSON(), Object.assign({}, options, {id: options.keyid}));
return await this.IntegrationModel.findOne({id: options.id}, {
withRelated: ['api_keys', 'webhooks']
});
} catch (err) {
throw new InternalServerError({
err: err
});
}
}
try {
return await this.IntegrationModel.edit(data, Object.assign(options, {require: true}));
} catch (error) {
if (error.message === 'NotFound' || error.message === 'EmptyResponse') {
throw new NotFoundError({
message: tpl(messages.notFound, {
resource: 'Integration'
})
});
}
throw error;
}
}
}
/**
* @returns {IntegrationsService} instance of the PostsService
*/
const getIntegrationsServiceInstance = ({IntegrationModel, ApiKeyModel}) => {
return new IntegrationsService({IntegrationModel, ApiKeyModel});
};
module.exports = getIntegrationsServiceInstance;