@webiny/api-headless-cms 0.0.0-unstable.40876133bb → 0.0.0-unstable.60e968001a
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 +63 -4
- package/context.js.map +1 -1
- package/crud/contentEntry/markLockedFields.js +5 -2
- package/crud/contentEntry/markLockedFields.js.map +1 -1
- package/crud/contentEntry/referenceFieldsMapping.js +9 -5
- package/crud/contentEntry/referenceFieldsMapping.js.map +1 -1
- package/crud/contentEntry/searchableFields.d.ts +9 -0
- package/crud/contentEntry/searchableFields.js +83 -0
- package/crud/contentEntry/searchableFields.js.map +1 -0
- package/crud/contentEntry.crud.js +65 -40
- package/crud/contentEntry.crud.js.map +1 -1
- package/crud/contentModel/createFieldStorageId.js +5 -1
- package/crud/contentModel/createFieldStorageId.js.map +1 -1
- package/crud/contentModel/models.js +12 -0
- package/crud/contentModel/models.js.map +1 -1
- package/crud/contentModel/validateModelFields.js +46 -37
- package/crud/contentModel/validateModelFields.js.map +1 -1
- package/crud/contentModel/validation.d.ts +477 -0
- package/crud/contentModel/validation.js +109 -0
- package/crud/contentModel/validation.js.map +1 -0
- package/crud/contentModel.crud.js +227 -175
- package/crud/contentModel.crud.js.map +1 -1
- package/crud/contentModelGroup/validation.d.ts +30 -0
- package/crud/contentModelGroup/validation.js +43 -0
- package/crud/contentModelGroup/validation.js.map +1 -0
- package/crud/contentModelGroup.crud.js +54 -54
- package/crud/contentModelGroup.crud.js.map +1 -1
- package/fieldConverters/CmsModelDynamicZoneFieldConverterPlugin.d.ts +11 -0
- package/fieldConverters/CmsModelDynamicZoneFieldConverterPlugin.js +239 -0
- package/fieldConverters/CmsModelDynamicZoneFieldConverterPlugin.js.map +1 -0
- package/fieldConverters/index.d.ts +2 -1
- package/fieldConverters/index.js +3 -1
- package/fieldConverters/index.js.map +1 -1
- package/graphql/buildSchemaPlugins.d.ts +2 -2
- package/graphql/buildSchemaPlugins.js.map +1 -1
- package/graphql/graphQLHandlerFactory.js +58 -28
- package/graphql/graphQLHandlerFactory.js.map +1 -1
- package/graphql/index.d.ts +2 -2
- package/graphql/index.js +49 -38
- package/graphql/index.js.map +1 -1
- package/graphql/schema/baseContentSchema.d.ts +2 -2
- package/graphql/schema/baseContentSchema.js +3 -3
- package/graphql/schema/baseContentSchema.js.map +1 -1
- package/graphql/schema/contentEntries.d.ts +2 -2
- package/graphql/schema/contentEntries.js +5 -5
- package/graphql/schema/contentEntries.js.map +1 -1
- package/graphql/schema/contentModelGroups.d.ts +2 -2
- package/graphql/schema/contentModelGroups.js +3 -3
- package/graphql/schema/contentModelGroups.js.map +1 -1
- package/graphql/schema/contentModels.d.ts +2 -2
- package/graphql/schema/contentModels.js +26 -7
- package/graphql/schema/contentModels.js.map +1 -1
- package/graphql/schema/createFieldResolvers.d.ts +1 -1
- package/graphql/schema/createFieldResolvers.js +23 -7
- package/graphql/schema/createFieldResolvers.js.map +1 -1
- package/graphql/schema/createManageSDL.d.ts +2 -0
- package/graphql/schema/createManageSDL.js +9 -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 +2 -2
- package/graphql/schema/schemaPlugins.js +11 -8
- package/graphql/schema/schemaPlugins.js.map +1 -1
- package/graphql/system.js +79 -82
- package/graphql/system.js.map +1 -1
- package/graphqlFields/dynamicZone/dynamicZoneField.d.ts +2 -0
- package/graphqlFields/dynamicZone/dynamicZoneField.js +234 -0
- package/graphqlFields/dynamicZone/dynamicZoneField.js.map +1 -0
- package/graphqlFields/dynamicZone/dynamicZoneStorage.d.ts +3 -0
- package/graphqlFields/dynamicZone/dynamicZoneStorage.js +79 -0
- package/graphqlFields/dynamicZone/dynamicZoneStorage.js.map +1 -0
- package/graphqlFields/dynamicZone/index.d.ts +2 -0
- package/graphqlFields/dynamicZone/index.js +21 -0
- package/graphqlFields/dynamicZone/index.js.map +1 -0
- package/graphqlFields/index.d.ts +1 -1
- package/graphqlFields/index.js +3 -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 +122 -72
- package/graphqlFields/object.js.map +1 -1
- package/graphqlFields/ref.js +34 -48
- package/graphqlFields/ref.js.map +1 -1
- package/index.d.ts +3 -3
- package/index.js +4 -8
- package/index.js.map +1 -1
- package/package.json +26 -26
- package/plugins/CmsGraphQLSchemaPlugin.d.ts +5 -0
- package/plugins/CmsGraphQLSchemaPlugin.js +17 -0
- package/plugins/CmsGraphQLSchemaPlugin.js.map +1 -0
- package/plugins/CmsGraphQLSchemaSorterPlugin.d.ts +20 -0
- package/plugins/CmsGraphQLSchemaSorterPlugin.js +38 -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 +26 -0
- package/plugins/index.js.map +1 -1
- package/storage/object.js +5 -2
- package/storage/object.js.map +1 -1
- package/types.d.ts +203 -55
- package/types.js +55 -7
- package/types.js.map +1 -1
- package/utils/converters/ConverterCollection.js +6 -2
- package/utils/converters/ConverterCollection.js.map +1 -1
- package/utils/createTypeFromFields.d.ts +15 -0
- package/utils/createTypeFromFields.js +75 -0
- package/utils/createTypeFromFields.js.map +1 -0
- package/utils/createTypeName.js +3 -1
- package/utils/createTypeName.js.map +1 -1
- package/utils/entryStorage.js +15 -12
- package/utils/entryStorage.js.map +1 -1
- package/utils/getBaseFieldType.d.ts +4 -0
- package/utils/getBaseFieldType.js +12 -0
- package/utils/getBaseFieldType.js.map +1 -0
- package/utils/renderFields.js +3 -1
- package/utils/renderFields.js.map +1 -1
- package/utils/renderGetFilterFields.js +8 -3
- package/utils/renderGetFilterFields.js.map +1 -1
- package/utils/renderInputFields.js +3 -1
- package/utils/renderInputFields.js.map +1 -1
- package/utils/renderListFilterFields.js +5 -2
- package/utils/renderListFilterFields.js.map +1 -1
- package/utils/renderSortEnum.d.ts +7 -4
- package/utils/renderSortEnum.js +23 -4
- package/utils/renderSortEnum.js.map +1 -1
- package/validators/dynamicZone.d.ts +2 -0
- package/validators/dynamicZone.js +24 -0
- package/validators/dynamicZone.js.map +1 -0
- package/validators/index.js +3 -1
- package/validators/index.js.map +1 -1
- package/crud/index.d.ts +0 -6
- package/crud/index.js +0 -85
- 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
|
@@ -11,16 +11,12 @@ var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/obje
|
|
|
11
11
|
|
|
12
12
|
var _dataloader = _interopRequireDefault(require("dataloader"));
|
|
13
13
|
|
|
14
|
+
var _error = _interopRequireDefault(require("@webiny/error"));
|
|
15
|
+
|
|
14
16
|
var _handlerGraphql = require("@webiny/handler-graphql");
|
|
15
17
|
|
|
16
18
|
var _contentModelManagerFactory = require("./contentModel/contentModelManagerFactory");
|
|
17
19
|
|
|
18
|
-
var _models = require("./contentModel/models");
|
|
19
|
-
|
|
20
|
-
var _createFieldModels = require("./contentModel/createFieldModels");
|
|
21
|
-
|
|
22
|
-
var _error = _interopRequireDefault(require("@webiny/error"));
|
|
23
|
-
|
|
24
20
|
var _pubsub = require("@webiny/pubsub");
|
|
25
21
|
|
|
26
22
|
var _beforeCreate = require("./contentModel/beforeCreate");
|
|
@@ -49,56 +45,23 @@ var _access = require("../utils/access");
|
|
|
49
45
|
|
|
50
46
|
var _validateModelFields = require("./contentModel/validateModelFields");
|
|
51
47
|
|
|
52
|
-
var
|
|
48
|
+
var _validation = require("./contentModel/validation");
|
|
49
|
+
|
|
50
|
+
var _utils = require("@webiny/utils");
|
|
53
51
|
|
|
54
52
|
/**
|
|
55
|
-
*
|
|
56
|
-
* Required because of the 5.33.0 upgrade.
|
|
57
|
-
* Until the upgrade is done, API will break because there is no storageId assigned.
|
|
53
|
+
* Given a model, return an array of tags ensuring the `type` tag is set.
|
|
58
54
|
*/
|
|
59
|
-
const
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
var _field$settings;
|
|
64
|
-
|
|
65
|
-
if ((_field$settings = field.settings) !== null && _field$settings !== void 0 && _field$settings.fields) {
|
|
66
|
-
field.settings.fields = attachStorageIdToFields(field.settings.fields);
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
if (!field.storageId) {
|
|
70
|
-
field.storageId = field.fieldId;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
return field;
|
|
74
|
-
});
|
|
75
|
-
};
|
|
76
|
-
|
|
77
|
-
const attachStorageIdToModelFields = model => {
|
|
78
|
-
if (!model.webinyVersion) {
|
|
79
|
-
return model.fields;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
const version = _semver.default.coerce(model.webinyVersion);
|
|
83
|
-
|
|
84
|
-
if (!version) {
|
|
85
|
-
return model.fields;
|
|
86
|
-
}
|
|
87
|
-
/**
|
|
88
|
-
* Unfortunately we need to check for beta and next.
|
|
89
|
-
* TODO remove after 5.33.0
|
|
90
|
-
*/
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
if (model.webinyVersion.match(/beta|next/)) {
|
|
94
|
-
return attachStorageIdToFields(model.fields);
|
|
95
|
-
}
|
|
55
|
+
const ensureTypeTag = model => {
|
|
56
|
+
// Let's make sure we have a `type` tag assigned.
|
|
57
|
+
// If `type` tag is not set, set it to a default one (`model`).
|
|
58
|
+
const tags = model.tags || [];
|
|
96
59
|
|
|
97
|
-
if (
|
|
98
|
-
|
|
60
|
+
if (!tags.some(tag => tag.startsWith("type:"))) {
|
|
61
|
+
tags.push("type:model");
|
|
99
62
|
}
|
|
100
63
|
|
|
101
|
-
return
|
|
64
|
+
return tags;
|
|
102
65
|
};
|
|
103
66
|
|
|
104
67
|
const createModelsCrud = params => {
|
|
@@ -119,7 +82,7 @@ const createModelsCrud = params => {
|
|
|
119
82
|
});
|
|
120
83
|
return [models.map(model => {
|
|
121
84
|
return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, model), {}, {
|
|
122
|
-
|
|
85
|
+
tags: ensureTypeTag(model),
|
|
123
86
|
tenant: model.tenant || getTenant().id,
|
|
124
87
|
locale: model.locale || getLocale().code
|
|
125
88
|
});
|
|
@@ -157,19 +120,20 @@ const createModelsCrud = params => {
|
|
|
157
120
|
*/
|
|
158
121
|
.filter(plugin => {
|
|
159
122
|
const {
|
|
160
|
-
tenant:
|
|
161
|
-
locale:
|
|
123
|
+
tenant: modelTenant,
|
|
124
|
+
locale: modelLocale
|
|
162
125
|
} = plugin.contentModel;
|
|
163
126
|
|
|
164
|
-
if (
|
|
127
|
+
if (modelTenant && modelTenant !== tenant) {
|
|
165
128
|
return false;
|
|
166
|
-
} else if (
|
|
129
|
+
} else if (modelLocale && modelLocale !== locale) {
|
|
167
130
|
return false;
|
|
168
131
|
}
|
|
169
132
|
|
|
170
133
|
return true;
|
|
171
134
|
}).map(plugin => {
|
|
172
135
|
return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, plugin.contentModel), {}, {
|
|
136
|
+
tags: ensureTypeTag(plugin.contentModel),
|
|
173
137
|
tenant,
|
|
174
138
|
locale,
|
|
175
139
|
webinyVersion: context.WEBINY_VERSION
|
|
@@ -207,6 +171,7 @@ const createModelsCrud = params => {
|
|
|
207
171
|
}
|
|
208
172
|
|
|
209
173
|
return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, model), {}, {
|
|
174
|
+
tags: ensureTypeTag(model),
|
|
210
175
|
tenant: model.tenant || getTenant().id,
|
|
211
176
|
locale: model.locale || getLocale().code
|
|
212
177
|
});
|
|
@@ -253,20 +218,40 @@ const createModelsCrud = params => {
|
|
|
253
218
|
}
|
|
254
219
|
|
|
255
220
|
return await updateManager(context, model);
|
|
256
|
-
};
|
|
221
|
+
};
|
|
222
|
+
/**
|
|
223
|
+
* Create
|
|
224
|
+
*/
|
|
257
225
|
|
|
258
226
|
|
|
259
227
|
const onModelBeforeCreate = (0, _pubsub.createTopic)("cms.onModelBeforeCreate");
|
|
260
|
-
const onModelAfterCreate = (0, _pubsub.createTopic)("cms.onModelAfterCreate");
|
|
228
|
+
const onModelAfterCreate = (0, _pubsub.createTopic)("cms.onModelAfterCreate");
|
|
229
|
+
const onModelCreateError = (0, _pubsub.createTopic)("cms.onModelCreateError");
|
|
230
|
+
/**
|
|
231
|
+
* Create from / clone
|
|
232
|
+
*/
|
|
261
233
|
|
|
262
234
|
const onModelBeforeCreateFrom = (0, _pubsub.createTopic)("cms.onModelBeforeCreateFrom");
|
|
263
|
-
const onModelAfterCreateFrom = (0, _pubsub.createTopic)("cms.onModelAfterCreateFrom");
|
|
235
|
+
const onModelAfterCreateFrom = (0, _pubsub.createTopic)("cms.onModelAfterCreateFrom");
|
|
236
|
+
const onModelCreateFromError = (0, _pubsub.createTopic)("cms.onModelCreateFromError");
|
|
237
|
+
/**
|
|
238
|
+
* Update
|
|
239
|
+
*/
|
|
264
240
|
|
|
265
241
|
const onModelBeforeUpdate = (0, _pubsub.createTopic)("cms.onModelBeforeUpdate");
|
|
266
|
-
const onModelAfterUpdate = (0, _pubsub.createTopic)("cms.onModelAfterUpdate");
|
|
242
|
+
const onModelAfterUpdate = (0, _pubsub.createTopic)("cms.onModelAfterUpdate");
|
|
243
|
+
const onModelUpdateError = (0, _pubsub.createTopic)("cms.onModelUpdateError");
|
|
244
|
+
/**
|
|
245
|
+
* Delete
|
|
246
|
+
*/
|
|
267
247
|
|
|
268
248
|
const onModelBeforeDelete = (0, _pubsub.createTopic)("cms.onModelBeforeDelete");
|
|
269
249
|
const onModelAfterDelete = (0, _pubsub.createTopic)("cms.onModelAfterDelete");
|
|
250
|
+
const onModelDeleteError = (0, _pubsub.createTopic)("cms.onModelDeleteError");
|
|
251
|
+
/**
|
|
252
|
+
* Initialize
|
|
253
|
+
*/
|
|
254
|
+
|
|
270
255
|
const onModelInitialize = (0, _pubsub.createTopic)("cms.onModelInitialize");
|
|
271
256
|
/**
|
|
272
257
|
* We need to assign some default behaviors.
|
|
@@ -322,36 +307,43 @@ const createModelsCrud = params => {
|
|
|
322
307
|
*/
|
|
323
308
|
onModelBeforeCreate,
|
|
324
309
|
onModelAfterCreate,
|
|
310
|
+
onModelCreateError,
|
|
325
311
|
onModelBeforeCreateFrom,
|
|
326
312
|
onModelAfterCreateFrom,
|
|
313
|
+
onModelCreateFromError,
|
|
327
314
|
onModelBeforeUpdate,
|
|
328
315
|
onModelAfterUpdate,
|
|
316
|
+
onModelUpdateError,
|
|
329
317
|
onModelBeforeDelete,
|
|
330
318
|
onModelAfterDelete,
|
|
319
|
+
onModelDeleteError,
|
|
331
320
|
onModelInitialize,
|
|
332
321
|
clearModelsCache,
|
|
333
322
|
getModel,
|
|
334
323
|
listModels,
|
|
335
324
|
|
|
336
|
-
async createModel(
|
|
325
|
+
async createModel(input) {
|
|
337
326
|
await checkModelPermissions("w");
|
|
338
|
-
const
|
|
339
|
-
|
|
340
|
-
|
|
327
|
+
const result = await (0, _validation.createModelCreateValidation)().safeParseAsync(input);
|
|
328
|
+
|
|
329
|
+
if (!result.success) {
|
|
330
|
+
throw (0, _utils.createZodError)(result.error);
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
const data = result.data;
|
|
341
334
|
context.security.disableAuthorization();
|
|
342
|
-
const group = await context.cms.getGroup(
|
|
335
|
+
const group = await context.cms.getGroup(data.group);
|
|
343
336
|
context.security.enableAuthorization();
|
|
344
337
|
|
|
345
338
|
if (!group) {
|
|
346
|
-
throw new _handlerGraphql.NotFoundError(`There is no group "${
|
|
339
|
+
throw new _handlerGraphql.NotFoundError(`There is no group "${data.group}".`);
|
|
347
340
|
}
|
|
348
341
|
|
|
349
|
-
const fields = await (0, _createFieldModels.createFieldModels)(input.fields);
|
|
350
342
|
const identity = getIdentity();
|
|
351
343
|
const model = {
|
|
352
|
-
name:
|
|
353
|
-
description:
|
|
354
|
-
modelId:
|
|
344
|
+
name: data.name,
|
|
345
|
+
description: data.description || "",
|
|
346
|
+
modelId: data.modelId || "",
|
|
355
347
|
titleFieldId: "id",
|
|
356
348
|
locale: getLocale().code,
|
|
357
349
|
tenant: getTenant().id,
|
|
@@ -366,25 +358,37 @@ const createModelsCrud = params => {
|
|
|
366
358
|
},
|
|
367
359
|
createdOn: new Date().toISOString(),
|
|
368
360
|
savedOn: new Date().toISOString(),
|
|
369
|
-
fields,
|
|
361
|
+
fields: data.fields,
|
|
370
362
|
lockedFields: [],
|
|
371
|
-
layout:
|
|
363
|
+
layout: data.layout || [],
|
|
364
|
+
tags: [...(data.tags || [])],
|
|
372
365
|
webinyVersion: context.WEBINY_VERSION
|
|
373
366
|
};
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
model
|
|
386
|
-
|
|
387
|
-
|
|
367
|
+
model.tags = ensureTypeTag(model);
|
|
368
|
+
|
|
369
|
+
try {
|
|
370
|
+
await onModelBeforeCreate.publish({
|
|
371
|
+
input: data,
|
|
372
|
+
model
|
|
373
|
+
});
|
|
374
|
+
const createdModel = await storageOperations.models.create({
|
|
375
|
+
model
|
|
376
|
+
});
|
|
377
|
+
loaders.listModels.clearAll();
|
|
378
|
+
await updateManager(context, model);
|
|
379
|
+
await onModelAfterCreate.publish({
|
|
380
|
+
input: data,
|
|
381
|
+
model: createdModel
|
|
382
|
+
});
|
|
383
|
+
return createdModel;
|
|
384
|
+
} catch (ex) {
|
|
385
|
+
await onModelCreateError.publish({
|
|
386
|
+
input: data,
|
|
387
|
+
model,
|
|
388
|
+
error: ex
|
|
389
|
+
});
|
|
390
|
+
throw ex;
|
|
391
|
+
}
|
|
388
392
|
},
|
|
389
393
|
|
|
390
394
|
/**
|
|
@@ -401,44 +405,59 @@ const createModelsCrud = params => {
|
|
|
401
405
|
locale: initialModel.locale || getLocale().code,
|
|
402
406
|
webinyVersion: context.WEBINY_VERSION
|
|
403
407
|
});
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
408
|
+
|
|
409
|
+
try {
|
|
410
|
+
await onModelBeforeUpdate.publish({
|
|
411
|
+
input: {},
|
|
412
|
+
original,
|
|
413
|
+
model
|
|
414
|
+
});
|
|
415
|
+
const resultModel = await storageOperations.models.update({
|
|
416
|
+
model
|
|
417
|
+
});
|
|
418
|
+
await updateManager(context, resultModel);
|
|
419
|
+
loaders.listModels.clearAll();
|
|
420
|
+
await onModelAfterUpdate.publish({
|
|
421
|
+
input: {},
|
|
422
|
+
original,
|
|
423
|
+
model: resultModel
|
|
424
|
+
});
|
|
425
|
+
return resultModel;
|
|
426
|
+
} catch (ex) {
|
|
427
|
+
await onModelUpdateError.publish({
|
|
428
|
+
input: {},
|
|
429
|
+
original,
|
|
430
|
+
model,
|
|
431
|
+
error: ex
|
|
432
|
+
});
|
|
433
|
+
throw ex;
|
|
434
|
+
}
|
|
420
435
|
},
|
|
421
436
|
|
|
422
|
-
async createModelFrom(modelId,
|
|
437
|
+
async createModelFrom(modelId, userInput) {
|
|
423
438
|
await checkModelPermissions("w");
|
|
424
439
|
/**
|
|
425
440
|
* Get a model record; this will also perform ownership validation.
|
|
426
441
|
*/
|
|
427
442
|
|
|
428
443
|
const original = await getModel(modelId);
|
|
429
|
-
const
|
|
430
|
-
name:
|
|
431
|
-
modelId:
|
|
432
|
-
description:
|
|
433
|
-
group:
|
|
434
|
-
locale:
|
|
444
|
+
const result = await (0, _validation.createModelCreateFromValidation)().safeParseAsync({
|
|
445
|
+
name: userInput.name,
|
|
446
|
+
modelId: userInput.modelId,
|
|
447
|
+
description: userInput.description || original.description,
|
|
448
|
+
group: userInput.group,
|
|
449
|
+
locale: userInput.locale
|
|
435
450
|
});
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
451
|
+
|
|
452
|
+
if (!result.success) {
|
|
453
|
+
throw (0, _utils.createZodError)(result.error);
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
const data = result.data;
|
|
457
|
+
const locale = await context.i18n.getLocale(data.locale || original.locale);
|
|
439
458
|
|
|
440
459
|
if (!locale) {
|
|
441
|
-
throw new _handlerGraphql.NotFoundError(`There is no locale "${
|
|
460
|
+
throw new _handlerGraphql.NotFoundError(`There is no locale "${data.locale}".`);
|
|
442
461
|
}
|
|
443
462
|
/**
|
|
444
463
|
* Use storage operations directly because we cannot get group from different locale via context methods.
|
|
@@ -446,13 +465,13 @@ const createModelsCrud = params => {
|
|
|
446
465
|
|
|
447
466
|
|
|
448
467
|
const group = await context.cms.storageOperations.groups.get({
|
|
449
|
-
id:
|
|
468
|
+
id: data.group,
|
|
450
469
|
tenant: original.tenant,
|
|
451
470
|
locale: locale.code
|
|
452
471
|
});
|
|
453
472
|
|
|
454
473
|
if (!group) {
|
|
455
|
-
throw new _handlerGraphql.NotFoundError(`There is no group "${
|
|
474
|
+
throw new _handlerGraphql.NotFoundError(`There is no group "${data.group}".`);
|
|
456
475
|
}
|
|
457
476
|
|
|
458
477
|
const identity = getIdentity();
|
|
@@ -462,9 +481,9 @@ const createModelsCrud = params => {
|
|
|
462
481
|
id: group.id,
|
|
463
482
|
name: group.name
|
|
464
483
|
},
|
|
465
|
-
name:
|
|
466
|
-
modelId:
|
|
467
|
-
description:
|
|
484
|
+
name: data.name,
|
|
485
|
+
modelId: data.modelId || "",
|
|
486
|
+
description: data.description || "",
|
|
468
487
|
createdBy: {
|
|
469
488
|
id: identity.id,
|
|
470
489
|
displayName: identity.displayName,
|
|
@@ -475,35 +494,48 @@ const createModelsCrud = params => {
|
|
|
475
494
|
lockedFields: [],
|
|
476
495
|
webinyVersion: context.WEBINY_VERSION
|
|
477
496
|
});
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
497
|
+
|
|
498
|
+
try {
|
|
499
|
+
await onModelBeforeCreateFrom.publish({
|
|
500
|
+
input: data,
|
|
501
|
+
model,
|
|
502
|
+
original
|
|
503
|
+
});
|
|
504
|
+
const createdModel = await storageOperations.models.create({
|
|
505
|
+
model
|
|
506
|
+
});
|
|
507
|
+
loaders.listModels.clearAll();
|
|
508
|
+
await updateManager(context, model);
|
|
509
|
+
await onModelAfterCreateFrom.publish({
|
|
510
|
+
input: data,
|
|
511
|
+
original,
|
|
512
|
+
model: createdModel
|
|
513
|
+
});
|
|
514
|
+
return createdModel;
|
|
515
|
+
} catch (ex) {
|
|
516
|
+
await onModelCreateFromError.publish({
|
|
517
|
+
input: data,
|
|
518
|
+
original,
|
|
519
|
+
model,
|
|
520
|
+
error: ex
|
|
521
|
+
});
|
|
522
|
+
throw ex;
|
|
523
|
+
}
|
|
494
524
|
},
|
|
495
525
|
|
|
496
|
-
async updateModel(modelId,
|
|
526
|
+
async updateModel(modelId, input) {
|
|
497
527
|
await checkModelPermissions("w"); // Get a model record; this will also perform ownership validation.
|
|
498
528
|
|
|
499
529
|
const original = await getModel(modelId);
|
|
500
|
-
const
|
|
501
|
-
await updatedData.validate();
|
|
502
|
-
const input = await updatedData.toJSON({
|
|
503
|
-
onlyDirty: true
|
|
504
|
-
});
|
|
530
|
+
const result = await (0, _validation.createModelUpdateValidation)().safeParseAsync(input);
|
|
505
531
|
|
|
506
|
-
if (
|
|
532
|
+
if (!result.success) {
|
|
533
|
+
throw (0, _utils.createZodError)(result.error);
|
|
534
|
+
}
|
|
535
|
+
|
|
536
|
+
const data = result.data;
|
|
537
|
+
|
|
538
|
+
if (Object.keys(data).length === 0) {
|
|
507
539
|
/**
|
|
508
540
|
* We need to return the original if nothing is to be updated.
|
|
509
541
|
*/
|
|
@@ -515,13 +547,13 @@ const createModelsCrud = params => {
|
|
|
515
547
|
name: original.group.name
|
|
516
548
|
};
|
|
517
549
|
|
|
518
|
-
if (
|
|
550
|
+
if (data.group) {
|
|
519
551
|
context.security.disableAuthorization();
|
|
520
|
-
const groupData = await context.cms.getGroup(
|
|
552
|
+
const groupData = await context.cms.getGroup(data.group);
|
|
521
553
|
context.security.enableAuthorization();
|
|
522
554
|
|
|
523
555
|
if (!groupData) {
|
|
524
|
-
throw new _handlerGraphql.NotFoundError(`There is no group "${
|
|
556
|
+
throw new _handlerGraphql.NotFoundError(`There is no group "${data.group}".`);
|
|
525
557
|
}
|
|
526
558
|
|
|
527
559
|
group = {
|
|
@@ -530,57 +562,76 @@ const createModelsCrud = params => {
|
|
|
530
562
|
};
|
|
531
563
|
}
|
|
532
564
|
|
|
533
|
-
const
|
|
534
|
-
const model = (0, _objectSpread2.default)((0, _objectSpread2.default)((0, _objectSpread2.default)({}, original), input), {}, {
|
|
565
|
+
const model = (0, _objectSpread2.default)((0, _objectSpread2.default)((0, _objectSpread2.default)({}, original), data), {}, {
|
|
535
566
|
group,
|
|
536
567
|
tenant: original.tenant || getTenant().id,
|
|
537
568
|
locale: original.locale || getLocale().code,
|
|
538
569
|
webinyVersion: context.WEBINY_VERSION,
|
|
539
|
-
fields,
|
|
540
570
|
savedOn: new Date().toISOString()
|
|
541
571
|
});
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
572
|
+
model.tags = ensureTypeTag(model);
|
|
573
|
+
|
|
574
|
+
try {
|
|
575
|
+
await onModelBeforeUpdate.publish({
|
|
576
|
+
input: data,
|
|
577
|
+
original,
|
|
578
|
+
model
|
|
579
|
+
});
|
|
580
|
+
const resultModel = await storageOperations.models.update({
|
|
581
|
+
model
|
|
582
|
+
});
|
|
583
|
+
await updateManager(context, resultModel);
|
|
584
|
+
await onModelAfterUpdate.publish({
|
|
585
|
+
input: data,
|
|
586
|
+
original,
|
|
587
|
+
model: resultModel
|
|
588
|
+
});
|
|
589
|
+
return resultModel;
|
|
590
|
+
} catch (ex) {
|
|
591
|
+
await onModelUpdateError.publish({
|
|
592
|
+
input: data,
|
|
593
|
+
model,
|
|
594
|
+
original,
|
|
595
|
+
error: ex
|
|
596
|
+
});
|
|
597
|
+
throw ex;
|
|
598
|
+
}
|
|
557
599
|
},
|
|
558
600
|
|
|
559
601
|
async deleteModel(modelId) {
|
|
560
602
|
await checkModelPermissions("d");
|
|
561
603
|
const model = await getModel(modelId);
|
|
562
|
-
await onModelBeforeDelete.publish({
|
|
563
|
-
model
|
|
564
|
-
});
|
|
565
604
|
|
|
566
605
|
try {
|
|
567
|
-
await
|
|
606
|
+
await onModelBeforeDelete.publish({
|
|
607
|
+
model
|
|
608
|
+
});
|
|
609
|
+
|
|
610
|
+
try {
|
|
611
|
+
await storageOperations.models.delete({
|
|
612
|
+
model
|
|
613
|
+
});
|
|
614
|
+
} catch (ex) {
|
|
615
|
+
throw new _error.default(ex.message || "Could not delete the content model", ex.code || "CONTENT_MODEL_DELETE_ERROR", {
|
|
616
|
+
error: ex,
|
|
617
|
+
modelId: model.modelId
|
|
618
|
+
});
|
|
619
|
+
}
|
|
620
|
+
|
|
621
|
+
await onModelAfterDelete.publish({
|
|
568
622
|
model
|
|
569
623
|
});
|
|
624
|
+
managers.delete(model.modelId);
|
|
570
625
|
} catch (ex) {
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
626
|
+
await onModelDeleteError.publish({
|
|
627
|
+
model,
|
|
628
|
+
error: ex
|
|
574
629
|
});
|
|
630
|
+
throw ex;
|
|
575
631
|
}
|
|
576
|
-
|
|
577
|
-
await onModelAfterDelete.publish({
|
|
578
|
-
model
|
|
579
|
-
});
|
|
580
|
-
managers.delete(model.modelId);
|
|
581
632
|
},
|
|
582
633
|
|
|
583
|
-
async initializeModel(modelId) {
|
|
634
|
+
async initializeModel(modelId, data) {
|
|
584
635
|
/**
|
|
585
636
|
* We require that users have write permissions to initialize models.
|
|
586
637
|
* Maybe introduce another permission for it?
|
|
@@ -588,7 +639,8 @@ const createModelsCrud = params => {
|
|
|
588
639
|
await checkModelPermissions("w");
|
|
589
640
|
const model = await getModel(modelId);
|
|
590
641
|
await onModelInitialize.publish({
|
|
591
|
-
model
|
|
642
|
+
model,
|
|
643
|
+
data
|
|
592
644
|
});
|
|
593
645
|
return true;
|
|
594
646
|
},
|