@webiny/api-headless-cms 0.0.0-unstable.6e5425ee89 → 0.0.0-unstable.7f63ea0744
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/context.d.ts +5 -2
- package/context.js +53 -4
- package/context.js.map +1 -1
- package/crud/contentEntry/markLockedFields.js +4 -2
- package/crud/contentEntry/markLockedFields.js.map +1 -1
- package/crud/contentEntry/referenceFieldsMapping.js +7 -5
- package/crud/contentEntry/referenceFieldsMapping.js.map +1 -1
- package/crud/contentEntry/searchableFields.d.ts +9 -0
- package/crud/contentEntry/searchableFields.js +72 -0
- package/crud/contentEntry/searchableFields.js.map +1 -0
- package/crud/contentEntry.crud.js +99 -42
- package/crud/contentEntry.crud.js.map +1 -1
- package/crud/contentModel/beforeCreate.d.ts +2 -3
- package/crud/contentModel/beforeCreate.js +4 -5
- package/crud/contentModel/beforeCreate.js.map +1 -1
- package/crud/contentModel/beforeUpdate.d.ts +2 -4
- package/crud/contentModel/beforeUpdate.js +2 -2
- package/crud/contentModel/beforeUpdate.js.map +1 -1
- package/crud/contentModel/createFieldStorageId.js +4 -1
- package/crud/contentModel/createFieldStorageId.js.map +1 -1
- package/crud/contentModel/validateModel.d.ts +3 -4
- package/crud/contentModel/validateModel.js +6 -3
- package/crud/contentModel/validateModel.js.map +1 -1
- package/crud/contentModel/validateModelFields.d.ts +3 -4
- package/crud/contentModel/validateModelFields.js +100 -38
- package/crud/contentModel/validateModelFields.js.map +1 -1
- package/crud/contentModel/validation.d.ts +477 -0
- package/crud/contentModel/validation.js +97 -0
- package/crud/contentModel/validation.js.map +1 -0
- package/crud/contentModel.crud.js +212 -177
- package/crud/contentModel.crud.js.map +1 -1
- package/crud/contentModelGroup/validation.d.ts +30 -0
- package/crud/contentModelGroup/validation.js +34 -0
- package/crud/contentModelGroup/validation.js.map +1 -0
- package/crud/contentModelGroup.crud.js +47 -52
- package/crud/contentModelGroup.crud.js.map +1 -1
- package/fieldConverters/CmsModelDynamicZoneFieldConverterPlugin.d.ts +11 -0
- package/fieldConverters/CmsModelDynamicZoneFieldConverterPlugin.js +203 -0
- package/fieldConverters/CmsModelDynamicZoneFieldConverterPlugin.js.map +1 -0
- package/fieldConverters/index.d.ts +2 -1
- package/fieldConverters/index.js +2 -1
- package/fieldConverters/index.js.map +1 -1
- package/graphql/buildSchemaPlugins.d.ts +8 -3
- package/graphql/buildSchemaPlugins.js +3 -7
- package/graphql/buildSchemaPlugins.js.map +1 -1
- package/graphql/createExecutableSchema.d.ts +7 -0
- package/graphql/createExecutableSchema.js +29 -0
- package/graphql/createExecutableSchema.js.map +1 -0
- package/graphql/generateSchema.d.ts +8 -0
- package/graphql/generateSchema.js +31 -0
- package/graphql/generateSchema.js.map +1 -0
- package/graphql/graphQLHandlerFactory.js +91 -50
- package/graphql/graphQLHandlerFactory.js.map +1 -1
- package/graphql/index.d.ts +1 -3
- package/graphql/index.js +2 -39
- package/graphql/index.js.map +1 -1
- package/graphql/schema/baseContentSchema.d.ts +6 -2
- package/graphql/schema/baseContentSchema.js +6 -4
- package/graphql/schema/baseContentSchema.js.map +1 -1
- package/graphql/schema/baseSchema.d.ts +3 -0
- package/graphql/schema/baseSchema.js +53 -0
- package/graphql/schema/baseSchema.js.map +1 -0
- package/graphql/schema/contentEntries.d.ts +6 -2
- package/graphql/schema/contentEntries.js +37 -23
- package/graphql/schema/contentEntries.js.map +1 -1
- package/graphql/schema/contentModelGroups.d.ts +6 -2
- package/graphql/schema/contentModelGroups.js +7 -3
- package/graphql/schema/contentModelGroups.js.map +1 -1
- package/graphql/schema/contentModels.d.ts +6 -2
- package/graphql/schema/contentModels.js +40 -7
- package/graphql/schema/contentModels.js.map +1 -1
- package/graphql/schema/createFieldResolvers.d.ts +1 -1
- package/graphql/schema/createFieldResolvers.js +17 -6
- package/graphql/schema/createFieldResolvers.js.map +1 -1
- package/graphql/schema/createManageSDL.d.ts +2 -0
- package/graphql/schema/createManageSDL.js +10 -6
- package/graphql/schema/createManageSDL.js.map +1 -1
- package/graphql/schema/createReadResolvers.js +5 -0
- package/graphql/schema/createReadResolvers.js.map +1 -1
- package/graphql/schema/createReadSDL.d.ts +2 -0
- package/graphql/schema/createReadSDL.js +11 -5
- package/graphql/schema/createReadSDL.js.map +1 -1
- package/graphql/schema/schemaPlugins.d.ts +8 -3
- package/graphql/schema/schemaPlugins.js +58 -46
- package/graphql/schema/schemaPlugins.js.map +1 -1
- package/graphql/system.js +69 -72
- package/graphql/system.js.map +1 -1
- package/graphqlFields/dynamicZone/dynamicZoneField.d.ts +2 -0
- package/graphqlFields/dynamicZone/dynamicZoneField.js +208 -0
- package/graphqlFields/dynamicZone/dynamicZoneField.js.map +1 -0
- package/graphqlFields/dynamicZone/dynamicZoneStorage.d.ts +3 -0
- package/graphqlFields/dynamicZone/dynamicZoneStorage.js +63 -0
- package/graphqlFields/dynamicZone/dynamicZoneStorage.js.map +1 -0
- package/graphqlFields/dynamicZone/index.d.ts +2 -0
- package/graphqlFields/dynamicZone/index.js +19 -0
- package/graphqlFields/dynamicZone/index.js.map +1 -0
- package/graphqlFields/index.d.ts +1 -1
- package/graphqlFields/index.js +2 -1
- package/graphqlFields/index.js.map +1 -1
- package/graphqlFields/number.js +4 -0
- package/graphqlFields/number.js.map +1 -1
- package/graphqlFields/object.js +112 -68
- package/graphqlFields/object.js.map +1 -1
- package/graphqlFields/ref.js +31 -45
- package/graphqlFields/ref.js.map +1 -1
- package/index.d.ts +3 -3
- package/index.js +3 -7
- package/index.js.map +1 -1
- package/package.json +28 -28
- package/plugins/CmsGraphQLSchemaPlugin.d.ts +5 -0
- package/plugins/CmsGraphQLSchemaPlugin.js +12 -0
- package/plugins/CmsGraphQLSchemaPlugin.js.map +1 -0
- package/plugins/CmsGraphQLSchemaSorterPlugin.d.ts +20 -0
- package/plugins/CmsGraphQLSchemaSorterPlugin.js +28 -0
- package/plugins/CmsGraphQLSchemaSorterPlugin.js.map +1 -0
- package/plugins/CmsModelFieldConverterPlugin.d.ts +2 -2
- package/plugins/CmsModelFieldConverterPlugin.js.map +1 -1
- package/plugins/StorageTransformPlugin.d.ts +11 -11
- package/plugins/StorageTransformPlugin.js.map +1 -1
- package/plugins/index.d.ts +2 -0
- package/plugins/index.js +22 -0
- package/plugins/index.js.map +1 -1
- package/storage/object.js +4 -2
- package/storage/object.js.map +1 -1
- package/types.d.ts +241 -57
- package/types.js +62 -7
- package/types.js.map +1 -1
- package/utils/converters/ConverterCollection.js +5 -2
- package/utils/converters/ConverterCollection.js.map +1 -1
- package/utils/createTypeFromFields.d.ts +15 -0
- package/utils/createTypeFromFields.js +64 -0
- package/utils/createTypeFromFields.js.map +1 -0
- package/utils/createTypeName.js +2 -1
- package/utils/createTypeName.js.map +1 -1
- package/utils/entryStorage.js +14 -11
- package/utils/entryStorage.js.map +1 -1
- package/utils/getBaseFieldType.d.ts +4 -0
- package/utils/getBaseFieldType.js +10 -0
- package/utils/getBaseFieldType.js.map +1 -0
- package/utils/getSchemaFromFieldPlugins.d.ts +4 -7
- package/utils/getSchemaFromFieldPlugins.js +22 -14
- package/utils/getSchemaFromFieldPlugins.js.map +1 -1
- package/utils/renderFields.js +2 -1
- package/utils/renderFields.js.map +1 -1
- package/utils/renderGetFilterFields.js +6 -3
- package/utils/renderGetFilterFields.js.map +1 -1
- package/utils/renderInputFields.js +2 -1
- package/utils/renderInputFields.js.map +1 -1
- package/utils/renderListFilterFields.js +4 -2
- package/utils/renderListFilterFields.js.map +1 -1
- package/utils/renderSortEnum.d.ts +7 -4
- package/utils/renderSortEnum.js +21 -4
- package/utils/renderSortEnum.js.map +1 -1
- package/validators/dynamicZone.d.ts +2 -0
- package/validators/dynamicZone.js +20 -0
- package/validators/dynamicZone.js.map +1 -0
- package/validators/index.js +2 -1
- package/validators/index.js.map +1 -1
- package/crud/contentModel/createFieldModels.d.ts +0 -2
- package/crud/contentModel/createFieldModels.js +0 -20
- package/crud/contentModel/createFieldModels.js.map +0 -1
- package/crud/contentModel/fieldIdValidation.d.ts +0 -1
- package/crud/contentModel/fieldIdValidation.js +0 -20
- package/crud/contentModel/fieldIdValidation.js.map +0 -1
- package/crud/contentModel/idValidation.d.ts +0 -1
- package/crud/contentModel/idValidation.js +0 -17
- package/crud/contentModel/idValidation.js.map +0 -1
- package/crud/contentModel/models.d.ts +0 -4
- package/crud/contentModel/models.js +0 -173
- package/crud/contentModel/models.js.map +0 -1
- package/crud/index.d.ts +0 -6
- package/crud/index.js +0 -69
- package/crud/index.js.map +0 -1
- package/graphql/schema/resolvers/manage/resolveRequestChanges.d.ts +0 -7
- package/graphql/schema/resolvers/manage/resolveRequestChanges.js +0 -21
- package/graphql/schema/resolvers/manage/resolveRequestChanges.js.map +0 -1
- package/graphql/schema/resolvers/manage/resolveRequestReview.d.ts +0 -7
- package/graphql/schema/resolvers/manage/resolveRequestReview.js +0 -21
- package/graphql/schema/resolvers/manage/resolveRequestReview.js.map +0 -1
- package/utils/filterModelFields.d.ts +0 -16
- package/utils/filterModelFields.js +0 -71
- package/utils/filterModelFields.js.map +0 -1
|
@@ -7,11 +7,9 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
exports.createModelsCrud = void 0;
|
|
8
8
|
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
9
9
|
var _dataloader = _interopRequireDefault(require("dataloader"));
|
|
10
|
+
var _error = _interopRequireDefault(require("@webiny/error"));
|
|
10
11
|
var _handlerGraphql = require("@webiny/handler-graphql");
|
|
11
12
|
var _contentModelManagerFactory = require("./contentModel/contentModelManagerFactory");
|
|
12
|
-
var _models = require("./contentModel/models");
|
|
13
|
-
var _createFieldModels = require("./contentModel/createFieldModels");
|
|
14
|
-
var _error = _interopRequireDefault(require("@webiny/error"));
|
|
15
13
|
var _pubsub = require("@webiny/pubsub");
|
|
16
14
|
var _beforeCreate = require("./contentModel/beforeCreate");
|
|
17
15
|
var _beforeUpdate = require("./contentModel/beforeUpdate");
|
|
@@ -25,45 +23,19 @@ var _permissions = require("../utils/permissions");
|
|
|
25
23
|
var _filterAsync = require("../utils/filterAsync");
|
|
26
24
|
var _ownership = require("../utils/ownership");
|
|
27
25
|
var _access = require("../utils/access");
|
|
28
|
-
var
|
|
29
|
-
var
|
|
26
|
+
var _validation = require("./contentModel/validation");
|
|
27
|
+
var _utils = require("@webiny/utils");
|
|
30
28
|
/**
|
|
31
|
-
*
|
|
32
|
-
* Required because of the 5.33.0 upgrade.
|
|
33
|
-
* Until the upgrade is done, API will break because there is no storageId assigned.
|
|
29
|
+
* Given a model, return an array of tags ensuring the `type` tag is set.
|
|
34
30
|
*/
|
|
35
|
-
const
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
}
|
|
42
|
-
if (!field.storageId) {
|
|
43
|
-
field.storageId = field.fieldId;
|
|
44
|
-
}
|
|
45
|
-
return field;
|
|
46
|
-
});
|
|
47
|
-
};
|
|
48
|
-
const attachStorageIdToModelFields = model => {
|
|
49
|
-
if (!model.webinyVersion) {
|
|
50
|
-
return model.fields;
|
|
31
|
+
const ensureTypeTag = model => {
|
|
32
|
+
// Let's make sure we have a `type` tag assigned.
|
|
33
|
+
// If `type` tag is not set, set it to a default one (`model`).
|
|
34
|
+
const tags = model.tags || [];
|
|
35
|
+
if (!tags.some(tag => tag.startsWith("type:"))) {
|
|
36
|
+
tags.push("type:model");
|
|
51
37
|
}
|
|
52
|
-
|
|
53
|
-
if (!version) {
|
|
54
|
-
return model.fields;
|
|
55
|
-
}
|
|
56
|
-
/**
|
|
57
|
-
* Unfortunately we need to check for beta and next.
|
|
58
|
-
* TODO remove after 5.33.0
|
|
59
|
-
*/
|
|
60
|
-
if (model.webinyVersion.match(/beta|next/)) {
|
|
61
|
-
return attachStorageIdToFields(model.fields);
|
|
62
|
-
}
|
|
63
|
-
if (_semver.default.compare(version, featureVersion) >= 0) {
|
|
64
|
-
return model.fields;
|
|
65
|
-
}
|
|
66
|
-
return attachStorageIdToFields(model.fields);
|
|
38
|
+
return tags;
|
|
67
39
|
};
|
|
68
40
|
const createModelsCrud = params => {
|
|
69
41
|
const {
|
|
@@ -83,7 +55,7 @@ const createModelsCrud = params => {
|
|
|
83
55
|
});
|
|
84
56
|
return [models.map(model => {
|
|
85
57
|
return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, model), {}, {
|
|
86
|
-
|
|
58
|
+
tags: ensureTypeTag(model),
|
|
87
59
|
tenant: model.tenant || getTenant().id,
|
|
88
60
|
locale: model.locale || getLocale().code
|
|
89
61
|
});
|
|
@@ -109,38 +81,29 @@ const createModelsCrud = params => {
|
|
|
109
81
|
const getModelsAsPlugins = () => {
|
|
110
82
|
const tenant = getTenant().id;
|
|
111
83
|
const locale = getLocale().code;
|
|
112
|
-
|
|
84
|
+
return context.plugins.byType(_CmsModelPlugin.CmsModelPlugin.type)
|
|
113
85
|
/**
|
|
114
86
|
* We need to filter out models that are not for this tenant or locale.
|
|
115
87
|
* If it does not have tenant or locale define, it is for every locale and tenant
|
|
116
88
|
*/.filter(plugin => {
|
|
117
89
|
const {
|
|
118
|
-
tenant:
|
|
119
|
-
locale:
|
|
90
|
+
tenant: modelTenant,
|
|
91
|
+
locale: modelLocale
|
|
120
92
|
} = plugin.contentModel;
|
|
121
|
-
if (
|
|
93
|
+
if (modelTenant && modelTenant !== tenant) {
|
|
122
94
|
return false;
|
|
123
|
-
} else if (
|
|
95
|
+
} else if (modelLocale && modelLocale !== locale) {
|
|
124
96
|
return false;
|
|
125
97
|
}
|
|
126
98
|
return true;
|
|
127
99
|
}).map(plugin => {
|
|
128
100
|
return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, plugin.contentModel), {}, {
|
|
101
|
+
tags: ensureTypeTag(plugin.contentModel),
|
|
129
102
|
tenant,
|
|
130
103
|
locale,
|
|
131
104
|
webinyVersion: context.WEBINY_VERSION
|
|
132
105
|
});
|
|
133
106
|
});
|
|
134
|
-
/**
|
|
135
|
-
* Only point where we can truly validate the user model is in the runtime.
|
|
136
|
-
*/
|
|
137
|
-
for (const model of models) {
|
|
138
|
-
(0, _validateModelFields.validateModelFields)({
|
|
139
|
-
model,
|
|
140
|
-
plugins: context.plugins
|
|
141
|
-
});
|
|
142
|
-
}
|
|
143
|
-
return models;
|
|
144
107
|
};
|
|
145
108
|
const modelsGet = async modelId => {
|
|
146
109
|
const pluginModel = getModelsAsPlugins().find(model => model.modelId === modelId);
|
|
@@ -156,6 +119,7 @@ const createModelsCrud = params => {
|
|
|
156
119
|
throw new _handlerGraphql.NotFoundError(`Content model "${modelId}" was not found!`);
|
|
157
120
|
}
|
|
158
121
|
return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, model), {}, {
|
|
122
|
+
tags: ensureTypeTag(model),
|
|
159
123
|
tenant: model.tenant || getTenant().id,
|
|
160
124
|
locale: model.locale || getLocale().code
|
|
161
125
|
});
|
|
@@ -195,18 +159,33 @@ const createModelsCrud = params => {
|
|
|
195
159
|
return await updateManager(context, model);
|
|
196
160
|
};
|
|
197
161
|
|
|
198
|
-
|
|
162
|
+
/**
|
|
163
|
+
* Create
|
|
164
|
+
*/
|
|
199
165
|
const onModelBeforeCreate = (0, _pubsub.createTopic)("cms.onModelBeforeCreate");
|
|
200
166
|
const onModelAfterCreate = (0, _pubsub.createTopic)("cms.onModelAfterCreate");
|
|
201
|
-
|
|
167
|
+
const onModelCreateError = (0, _pubsub.createTopic)("cms.onModelCreateError");
|
|
168
|
+
/**
|
|
169
|
+
* Create from / clone
|
|
170
|
+
*/
|
|
202
171
|
const onModelBeforeCreateFrom = (0, _pubsub.createTopic)("cms.onModelBeforeCreateFrom");
|
|
203
172
|
const onModelAfterCreateFrom = (0, _pubsub.createTopic)("cms.onModelAfterCreateFrom");
|
|
204
|
-
|
|
173
|
+
const onModelCreateFromError = (0, _pubsub.createTopic)("cms.onModelCreateFromError");
|
|
174
|
+
/**
|
|
175
|
+
* Update
|
|
176
|
+
*/
|
|
205
177
|
const onModelBeforeUpdate = (0, _pubsub.createTopic)("cms.onModelBeforeUpdate");
|
|
206
178
|
const onModelAfterUpdate = (0, _pubsub.createTopic)("cms.onModelAfterUpdate");
|
|
207
|
-
|
|
179
|
+
const onModelUpdateError = (0, _pubsub.createTopic)("cms.onModelUpdateError");
|
|
180
|
+
/**
|
|
181
|
+
* Delete
|
|
182
|
+
*/
|
|
208
183
|
const onModelBeforeDelete = (0, _pubsub.createTopic)("cms.onModelBeforeDelete");
|
|
209
184
|
const onModelAfterDelete = (0, _pubsub.createTopic)("cms.onModelAfterDelete");
|
|
185
|
+
const onModelDeleteError = (0, _pubsub.createTopic)("cms.onModelDeleteError");
|
|
186
|
+
/**
|
|
187
|
+
* Initialize
|
|
188
|
+
*/
|
|
210
189
|
const onModelInitialize = (0, _pubsub.createTopic)("cms.onModelInitialize");
|
|
211
190
|
/**
|
|
212
191
|
* We need to assign some default behaviors.
|
|
@@ -214,7 +193,7 @@ const createModelsCrud = params => {
|
|
|
214
193
|
(0, _beforeCreate.assignModelBeforeCreate)({
|
|
215
194
|
onModelBeforeCreate,
|
|
216
195
|
onModelBeforeCreateFrom,
|
|
217
|
-
|
|
196
|
+
context,
|
|
218
197
|
storageOperations
|
|
219
198
|
});
|
|
220
199
|
(0, _afterCreate.assignModelAfterCreate)({
|
|
@@ -223,8 +202,7 @@ const createModelsCrud = params => {
|
|
|
223
202
|
});
|
|
224
203
|
(0, _beforeUpdate.assignModelBeforeUpdate)({
|
|
225
204
|
onModelBeforeUpdate,
|
|
226
|
-
|
|
227
|
-
storageOperations
|
|
205
|
+
context
|
|
228
206
|
});
|
|
229
207
|
(0, _afterUpdate.assignModelAfterUpdate)({
|
|
230
208
|
context,
|
|
@@ -260,33 +238,38 @@ const createModelsCrud = params => {
|
|
|
260
238
|
*/
|
|
261
239
|
onModelBeforeCreate,
|
|
262
240
|
onModelAfterCreate,
|
|
241
|
+
onModelCreateError,
|
|
263
242
|
onModelBeforeCreateFrom,
|
|
264
243
|
onModelAfterCreateFrom,
|
|
244
|
+
onModelCreateFromError,
|
|
265
245
|
onModelBeforeUpdate,
|
|
266
246
|
onModelAfterUpdate,
|
|
247
|
+
onModelUpdateError,
|
|
267
248
|
onModelBeforeDelete,
|
|
268
249
|
onModelAfterDelete,
|
|
250
|
+
onModelDeleteError,
|
|
269
251
|
onModelInitialize,
|
|
270
252
|
clearModelsCache,
|
|
271
253
|
getModel,
|
|
272
254
|
listModels,
|
|
273
|
-
async createModel(
|
|
255
|
+
async createModel(input) {
|
|
274
256
|
await checkModelPermissions("w");
|
|
275
|
-
const
|
|
276
|
-
|
|
277
|
-
|
|
257
|
+
const result = await (0, _validation.createModelCreateValidation)().safeParseAsync(input);
|
|
258
|
+
if (!result.success) {
|
|
259
|
+
throw (0, _utils.createZodError)(result.error);
|
|
260
|
+
}
|
|
261
|
+
const data = result.data;
|
|
278
262
|
context.security.disableAuthorization();
|
|
279
|
-
const group = await context.cms.getGroup(
|
|
263
|
+
const group = await context.cms.getGroup(data.group);
|
|
280
264
|
context.security.enableAuthorization();
|
|
281
265
|
if (!group) {
|
|
282
|
-
throw new _handlerGraphql.NotFoundError(`There is no group "${
|
|
266
|
+
throw new _handlerGraphql.NotFoundError(`There is no group "${data.group}".`);
|
|
283
267
|
}
|
|
284
|
-
const fields = await (0, _createFieldModels.createFieldModels)(input.fields);
|
|
285
268
|
const identity = getIdentity();
|
|
286
269
|
const model = {
|
|
287
|
-
name:
|
|
288
|
-
description:
|
|
289
|
-
modelId:
|
|
270
|
+
name: data.name,
|
|
271
|
+
description: data.description || "",
|
|
272
|
+
modelId: data.modelId || "",
|
|
290
273
|
titleFieldId: "id",
|
|
291
274
|
locale: getLocale().code,
|
|
292
275
|
tenant: getTenant().id,
|
|
@@ -301,25 +284,36 @@ const createModelsCrud = params => {
|
|
|
301
284
|
},
|
|
302
285
|
createdOn: new Date().toISOString(),
|
|
303
286
|
savedOn: new Date().toISOString(),
|
|
304
|
-
fields,
|
|
287
|
+
fields: data.fields,
|
|
305
288
|
lockedFields: [],
|
|
306
|
-
layout:
|
|
289
|
+
layout: data.layout || [],
|
|
290
|
+
tags: [...(data.tags || [])],
|
|
307
291
|
webinyVersion: context.WEBINY_VERSION
|
|
308
292
|
};
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
293
|
+
model.tags = ensureTypeTag(model);
|
|
294
|
+
try {
|
|
295
|
+
await onModelBeforeCreate.publish({
|
|
296
|
+
input: data,
|
|
297
|
+
model
|
|
298
|
+
});
|
|
299
|
+
const createdModel = await storageOperations.models.create({
|
|
300
|
+
model
|
|
301
|
+
});
|
|
302
|
+
loaders.listModels.clearAll();
|
|
303
|
+
await updateManager(context, model);
|
|
304
|
+
await onModelAfterCreate.publish({
|
|
305
|
+
input: data,
|
|
306
|
+
model: createdModel
|
|
307
|
+
});
|
|
308
|
+
return createdModel;
|
|
309
|
+
} catch (ex) {
|
|
310
|
+
await onModelCreateError.publish({
|
|
311
|
+
input: data,
|
|
312
|
+
model,
|
|
313
|
+
error: ex
|
|
314
|
+
});
|
|
315
|
+
throw ex;
|
|
316
|
+
}
|
|
323
317
|
},
|
|
324
318
|
/**
|
|
325
319
|
* Method does not check for permissions or ownership.
|
|
@@ -335,52 +329,64 @@ const createModelsCrud = params => {
|
|
|
335
329
|
locale: initialModel.locale || getLocale().code,
|
|
336
330
|
webinyVersion: context.WEBINY_VERSION
|
|
337
331
|
});
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
332
|
+
try {
|
|
333
|
+
await onModelBeforeUpdate.publish({
|
|
334
|
+
input: {},
|
|
335
|
+
original,
|
|
336
|
+
model
|
|
337
|
+
});
|
|
338
|
+
const resultModel = await storageOperations.models.update({
|
|
339
|
+
model
|
|
340
|
+
});
|
|
341
|
+
await updateManager(context, resultModel);
|
|
342
|
+
loaders.listModels.clearAll();
|
|
343
|
+
await onModelAfterUpdate.publish({
|
|
344
|
+
input: {},
|
|
345
|
+
original,
|
|
346
|
+
model: resultModel
|
|
347
|
+
});
|
|
348
|
+
return resultModel;
|
|
349
|
+
} catch (ex) {
|
|
350
|
+
await onModelUpdateError.publish({
|
|
351
|
+
input: {},
|
|
352
|
+
original,
|
|
353
|
+
model,
|
|
354
|
+
error: ex
|
|
355
|
+
});
|
|
356
|
+
throw ex;
|
|
357
|
+
}
|
|
354
358
|
},
|
|
355
|
-
async createModelFrom(modelId,
|
|
359
|
+
async createModelFrom(modelId, userInput) {
|
|
356
360
|
await checkModelPermissions("w");
|
|
357
361
|
/**
|
|
358
362
|
* Get a model record; this will also perform ownership validation.
|
|
359
363
|
*/
|
|
360
364
|
const original = await getModel(modelId);
|
|
361
|
-
const
|
|
362
|
-
name:
|
|
363
|
-
modelId:
|
|
364
|
-
description:
|
|
365
|
-
group:
|
|
366
|
-
locale:
|
|
365
|
+
const result = await (0, _validation.createModelCreateFromValidation)().safeParseAsync({
|
|
366
|
+
name: userInput.name,
|
|
367
|
+
modelId: userInput.modelId,
|
|
368
|
+
description: userInput.description || original.description,
|
|
369
|
+
group: userInput.group,
|
|
370
|
+
locale: userInput.locale
|
|
367
371
|
});
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
372
|
+
if (!result.success) {
|
|
373
|
+
throw (0, _utils.createZodError)(result.error);
|
|
374
|
+
}
|
|
375
|
+
const data = result.data;
|
|
376
|
+
const locale = await context.i18n.getLocale(data.locale || original.locale);
|
|
371
377
|
if (!locale) {
|
|
372
|
-
throw new _handlerGraphql.NotFoundError(`There is no locale "${
|
|
378
|
+
throw new _handlerGraphql.NotFoundError(`There is no locale "${data.locale}".`);
|
|
373
379
|
}
|
|
374
380
|
/**
|
|
375
381
|
* Use storage operations directly because we cannot get group from different locale via context methods.
|
|
376
382
|
*/
|
|
377
383
|
const group = await context.cms.storageOperations.groups.get({
|
|
378
|
-
id:
|
|
384
|
+
id: data.group,
|
|
379
385
|
tenant: original.tenant,
|
|
380
386
|
locale: locale.code
|
|
381
387
|
});
|
|
382
388
|
if (!group) {
|
|
383
|
-
throw new _handlerGraphql.NotFoundError(`There is no group "${
|
|
389
|
+
throw new _handlerGraphql.NotFoundError(`There is no group "${data.group}".`);
|
|
384
390
|
}
|
|
385
391
|
const identity = getIdentity();
|
|
386
392
|
const model = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, original), {}, {
|
|
@@ -389,9 +395,9 @@ const createModelsCrud = params => {
|
|
|
389
395
|
id: group.id,
|
|
390
396
|
name: group.name
|
|
391
397
|
},
|
|
392
|
-
name:
|
|
393
|
-
modelId:
|
|
394
|
-
description:
|
|
398
|
+
name: data.name,
|
|
399
|
+
modelId: data.modelId || "",
|
|
400
|
+
description: data.description || "",
|
|
395
401
|
createdBy: {
|
|
396
402
|
id: identity.id,
|
|
397
403
|
displayName: identity.displayName,
|
|
@@ -402,34 +408,44 @@ const createModelsCrud = params => {
|
|
|
402
408
|
lockedFields: [],
|
|
403
409
|
webinyVersion: context.WEBINY_VERSION
|
|
404
410
|
});
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
411
|
+
try {
|
|
412
|
+
await onModelBeforeCreateFrom.publish({
|
|
413
|
+
input: data,
|
|
414
|
+
model,
|
|
415
|
+
original
|
|
416
|
+
});
|
|
417
|
+
const createdModel = await storageOperations.models.create({
|
|
418
|
+
model
|
|
419
|
+
});
|
|
420
|
+
loaders.listModels.clearAll();
|
|
421
|
+
await updateManager(context, model);
|
|
422
|
+
await onModelAfterCreateFrom.publish({
|
|
423
|
+
input: data,
|
|
424
|
+
original,
|
|
425
|
+
model: createdModel
|
|
426
|
+
});
|
|
427
|
+
return createdModel;
|
|
428
|
+
} catch (ex) {
|
|
429
|
+
await onModelCreateFromError.publish({
|
|
430
|
+
input: data,
|
|
431
|
+
original,
|
|
432
|
+
model,
|
|
433
|
+
error: ex
|
|
434
|
+
});
|
|
435
|
+
throw ex;
|
|
436
|
+
}
|
|
421
437
|
},
|
|
422
|
-
async updateModel(modelId,
|
|
438
|
+
async updateModel(modelId, input) {
|
|
423
439
|
await checkModelPermissions("w");
|
|
424
440
|
|
|
425
441
|
// Get a model record; this will also perform ownership validation.
|
|
426
442
|
const original = await getModel(modelId);
|
|
427
|
-
const
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
if (Object.keys(
|
|
443
|
+
const result = await (0, _validation.createModelUpdateValidation)().safeParseAsync(input);
|
|
444
|
+
if (!result.success) {
|
|
445
|
+
throw (0, _utils.createZodError)(result.error);
|
|
446
|
+
}
|
|
447
|
+
const data = result.data;
|
|
448
|
+
if (Object.keys(data).length === 0) {
|
|
433
449
|
/**
|
|
434
450
|
* We need to return the original if nothing is to be updated.
|
|
435
451
|
*/
|
|
@@ -439,65 +455,83 @@ const createModelsCrud = params => {
|
|
|
439
455
|
id: original.group.id,
|
|
440
456
|
name: original.group.name
|
|
441
457
|
};
|
|
442
|
-
if (
|
|
458
|
+
if (data.group) {
|
|
443
459
|
context.security.disableAuthorization();
|
|
444
|
-
const groupData = await context.cms.getGroup(
|
|
460
|
+
const groupData = await context.cms.getGroup(data.group);
|
|
445
461
|
context.security.enableAuthorization();
|
|
446
462
|
if (!groupData) {
|
|
447
|
-
throw new _handlerGraphql.NotFoundError(`There is no group "${
|
|
463
|
+
throw new _handlerGraphql.NotFoundError(`There is no group "${data.group}".`);
|
|
448
464
|
}
|
|
449
465
|
group = {
|
|
450
466
|
id: groupData.id,
|
|
451
467
|
name: groupData.name
|
|
452
468
|
};
|
|
453
469
|
}
|
|
454
|
-
const
|
|
455
|
-
const model = (0, _objectSpread2.default)((0, _objectSpread2.default)((0, _objectSpread2.default)({}, original), input), {}, {
|
|
470
|
+
const model = (0, _objectSpread2.default)((0, _objectSpread2.default)((0, _objectSpread2.default)({}, original), data), {}, {
|
|
456
471
|
group,
|
|
472
|
+
description: data.description || original.description,
|
|
457
473
|
tenant: original.tenant || getTenant().id,
|
|
458
474
|
locale: original.locale || getLocale().code,
|
|
459
475
|
webinyVersion: context.WEBINY_VERSION,
|
|
460
|
-
fields,
|
|
461
476
|
savedOn: new Date().toISOString()
|
|
462
477
|
});
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
+
model.tags = ensureTypeTag(model);
|
|
479
|
+
try {
|
|
480
|
+
await onModelBeforeUpdate.publish({
|
|
481
|
+
input: data,
|
|
482
|
+
original,
|
|
483
|
+
model
|
|
484
|
+
});
|
|
485
|
+
const resultModel = await storageOperations.models.update({
|
|
486
|
+
model
|
|
487
|
+
});
|
|
488
|
+
await updateManager(context, resultModel);
|
|
489
|
+
await onModelAfterUpdate.publish({
|
|
490
|
+
input: data,
|
|
491
|
+
original,
|
|
492
|
+
model: resultModel
|
|
493
|
+
});
|
|
494
|
+
return resultModel;
|
|
495
|
+
} catch (ex) {
|
|
496
|
+
await onModelUpdateError.publish({
|
|
497
|
+
input: data,
|
|
498
|
+
model,
|
|
499
|
+
original,
|
|
500
|
+
error: ex
|
|
501
|
+
});
|
|
502
|
+
throw ex;
|
|
503
|
+
}
|
|
478
504
|
},
|
|
479
505
|
async deleteModel(modelId) {
|
|
480
506
|
await checkModelPermissions("d");
|
|
481
507
|
const model = await getModel(modelId);
|
|
482
|
-
await onModelBeforeDelete.publish({
|
|
483
|
-
model
|
|
484
|
-
});
|
|
485
508
|
try {
|
|
486
|
-
await
|
|
509
|
+
await onModelBeforeDelete.publish({
|
|
487
510
|
model
|
|
488
511
|
});
|
|
512
|
+
try {
|
|
513
|
+
await storageOperations.models.delete({
|
|
514
|
+
model
|
|
515
|
+
});
|
|
516
|
+
} catch (ex) {
|
|
517
|
+
throw new _error.default(ex.message || "Could not delete the content model", ex.code || "CONTENT_MODEL_DELETE_ERROR", {
|
|
518
|
+
error: ex,
|
|
519
|
+
modelId: model.modelId
|
|
520
|
+
});
|
|
521
|
+
}
|
|
522
|
+
await onModelAfterDelete.publish({
|
|
523
|
+
model
|
|
524
|
+
});
|
|
525
|
+
managers.delete(model.modelId);
|
|
489
526
|
} catch (ex) {
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
527
|
+
await onModelDeleteError.publish({
|
|
528
|
+
model,
|
|
529
|
+
error: ex
|
|
493
530
|
});
|
|
531
|
+
throw ex;
|
|
494
532
|
}
|
|
495
|
-
await onModelAfterDelete.publish({
|
|
496
|
-
model
|
|
497
|
-
});
|
|
498
|
-
managers.delete(model.modelId);
|
|
499
533
|
},
|
|
500
|
-
async initializeModel(modelId) {
|
|
534
|
+
async initializeModel(modelId, data) {
|
|
501
535
|
/**
|
|
502
536
|
* We require that users have write permissions to initialize models.
|
|
503
537
|
* Maybe introduce another permission for it?
|
|
@@ -505,7 +539,8 @@ const createModelsCrud = params => {
|
|
|
505
539
|
await checkModelPermissions("w");
|
|
506
540
|
const model = await getModel(modelId);
|
|
507
541
|
await onModelInitialize.publish({
|
|
508
|
-
model
|
|
542
|
+
model,
|
|
543
|
+
data
|
|
509
544
|
});
|
|
510
545
|
return true;
|
|
511
546
|
},
|