budibase/packages/core/src/templateApi/saveActionsAndTriggers.js

41 lines
1.5 KiB
JavaScript
Raw Normal View History

2019-07-15 08:12:52 +02:00
import { join } from 'lodash';
import { map } from 'lodash/fp';
import { appDefinitionFile } from '../common';
import { validateTriggers, validateActions } from './validate';
import { apiWrapper } from '../common/apiWrapper';
import { events } from '../common/events';
import { permission } from '../authApi/permissions';
import { BadRequestError } from '../common/errors';
export const saveActionsAndTriggers = app => async (actions, triggers) => apiWrapper(
app,
events.templateApi.saveActionsAndTriggers,
permission.writeTemplates.isAuthorized,
{ actions, triggers },
_saveActionsAndTriggers, app.datastore, actions, triggers,
);
export const _saveActionsAndTriggers = async (datastore, actions, triggers) => {
if (await datastore.exists(appDefinitionFile)) {
const appDefinition = await datastore.loadJson(appDefinitionFile);
appDefinition.actions = actions;
appDefinition.triggers = triggers;
const actionValidErrs = map(e => e.error)(validateActions(actions));
if (actionValidErrs.length > 0) {
throw new BadRequestError(`Actions are invalid: ${join(actionValidErrs, ', ')}`);
}
const triggerValidErrs = map(e => e.error)(validateTriggers(triggers, actions));
if (triggerValidErrs.length > 0) {
throw new BadRequestError(`Triggers are invalid: ${join(triggerValidErrs, ', ')}`);
}
await datastore.updateJson(appDefinitionFile, appDefinition);
} else {
throw new BadRequestError('Cannot save actions: Application definition does not exist');
}
};