@knovator/pagecreator-node 1.1.8 → 1.2.0

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.
Files changed (128) hide show
  1. package/package.json +3 -6
  2. package/src/constants/index.ts +30 -0
  3. package/src/controllers/PageController.ts +88 -0
  4. package/src/controllers/TabController.ts +47 -0
  5. package/src/controllers/UserController.ts +69 -0
  6. package/src/controllers/WidgetController.ts +420 -0
  7. package/src/index.ts +59 -0
  8. package/src/models/Item.ts +53 -0
  9. package/src/models/Page.ts +22 -0
  10. package/src/models/SrcSet.ts +16 -0
  11. package/src/models/Tab.ts +28 -0
  12. package/src/models/Widget.ts +65 -0
  13. package/src/models/{index.d.ts → index.ts} +13 -1
  14. package/src/plugins/softDelete.ts +84 -0
  15. package/src/routes/PageRoute.ts +30 -0
  16. package/src/routes/UserRoute.ts +32 -0
  17. package/src/routes/WidgetRoute.ts +77 -0
  18. package/src/services/dataService.ts +475 -0
  19. package/src/services/dbService.ts +102 -0
  20. package/src/types/{IRequest.d.ts → IRequest.ts} +4 -3
  21. package/src/types/{IResponse.d.ts → IResponse.ts} +4 -3
  22. package/src/types/{Router.d.ts → Router.ts} +2 -1
  23. package/src/types/common.ts +172 -0
  24. package/src/types/enums.ts +16 -0
  25. package/src/utils/defaults.ts +41 -0
  26. package/src/utils/helper.ts +285 -0
  27. package/src/utils/redis.ts +57 -0
  28. package/src/utils/responseHandlers.ts +60 -0
  29. package/src/utils/validate.ts +22 -0
  30. package/src/utils/validations/page.ts +52 -0
  31. package/src/utils/validations/tab.ts +26 -0
  32. package/src/utils/validations/user.ts +10 -0
  33. package/src/utils/validations/widget.ts +169 -0
  34. package/src/constants/index.d.ts +0 -20
  35. package/src/constants/index.js +0 -34
  36. package/src/constants/index.js.map +0 -1
  37. package/src/controllers/PageController.d.ts +0 -4
  38. package/src/controllers/PageController.js +0 -84
  39. package/src/controllers/PageController.js.map +0 -1
  40. package/src/controllers/TabController.d.ts +0 -4
  41. package/src/controllers/TabController.js +0 -46
  42. package/src/controllers/TabController.js.map +0 -1
  43. package/src/controllers/UserController.d.ts +0 -2
  44. package/src/controllers/UserController.js +0 -65
  45. package/src/controllers/UserController.js.map +0 -1
  46. package/src/controllers/WidgetController.d.ts +0 -10
  47. package/src/controllers/WidgetController.js +0 -329
  48. package/src/controllers/WidgetController.js.map +0 -1
  49. package/src/index.d.ts +0 -8
  50. package/src/index.js +0 -48
  51. package/src/index.js.map +0 -1
  52. package/src/models/Item.d.ts +0 -30
  53. package/src/models/Item.js +0 -50
  54. package/src/models/Item.js.map +0 -1
  55. package/src/models/Page.d.ts +0 -30
  56. package/src/models/Page.js +0 -19
  57. package/src/models/Page.js.map +0 -1
  58. package/src/models/SrcSet.d.ts +0 -30
  59. package/src/models/SrcSet.js +0 -17
  60. package/src/models/SrcSet.js.map +0 -1
  61. package/src/models/Tab.d.ts +0 -30
  62. package/src/models/Tab.js +0 -28
  63. package/src/models/Tab.js.map +0 -1
  64. package/src/models/Widget.d.ts +0 -30
  65. package/src/models/Widget.js +0 -58
  66. package/src/models/Widget.js.map +0 -1
  67. package/src/models/index.js +0 -19
  68. package/src/models/index.js.map +0 -1
  69. package/src/plugins/softDelete.d.ts +0 -7
  70. package/src/plugins/softDelete.js +0 -64
  71. package/src/plugins/softDelete.js.map +0 -1
  72. package/src/routes/PageRoute.d.ts +0 -3
  73. package/src/routes/PageRoute.js +0 -30
  74. package/src/routes/PageRoute.js.map +0 -1
  75. package/src/routes/UserRoute.d.ts +0 -3
  76. package/src/routes/UserRoute.js +0 -23
  77. package/src/routes/UserRoute.js.map +0 -1
  78. package/src/routes/WidgetRoute.d.ts +0 -3
  79. package/src/routes/WidgetRoute.js +0 -68
  80. package/src/routes/WidgetRoute.js.map +0 -1
  81. package/src/services/dataService.d.ts +0 -9
  82. package/src/services/dataService.js +0 -403
  83. package/src/services/dataService.js.map +0 -1
  84. package/src/services/dbService.d.ts +0 -16
  85. package/src/services/dbService.js +0 -88
  86. package/src/services/dbService.js.map +0 -1
  87. package/src/types/IRequest.js +0 -3
  88. package/src/types/IRequest.js.map +0 -1
  89. package/src/types/IResponse.js +0 -3
  90. package/src/types/IResponse.js.map +0 -1
  91. package/src/types/Router.js +0 -3
  92. package/src/types/Router.js.map +0 -1
  93. package/src/types/common.d.ts +0 -138
  94. package/src/types/common.js +0 -3
  95. package/src/types/common.js.map +0 -1
  96. package/src/types/enums.d.ts +0 -13
  97. package/src/types/enums.js +0 -20
  98. package/src/types/enums.js.map +0 -1
  99. package/src/types/index.js +0 -9
  100. package/src/types/index.js.map +0 -1
  101. package/src/utils/defaults.d.ts +0 -7
  102. package/src/utils/defaults.js +0 -41
  103. package/src/utils/defaults.js.map +0 -1
  104. package/src/utils/helper.d.ts +0 -7
  105. package/src/utils/helper.js +0 -225
  106. package/src/utils/helper.js.map +0 -1
  107. package/src/utils/redis.d.ts +0 -3
  108. package/src/utils/redis.js +0 -59
  109. package/src/utils/redis.js.map +0 -1
  110. package/src/utils/responseHandlers.d.ts +0 -6
  111. package/src/utils/responseHandlers.js +0 -57
  112. package/src/utils/responseHandlers.js.map +0 -1
  113. package/src/utils/validate.d.ts +0 -4
  114. package/src/utils/validate.js +0 -24
  115. package/src/utils/validate.js.map +0 -1
  116. package/src/utils/validations/page.d.ts +0 -7
  117. package/src/utils/validations/page.js +0 -51
  118. package/src/utils/validations/page.js.map +0 -1
  119. package/src/utils/validations/tab.d.ts +0 -6
  120. package/src/utils/validations/tab.js +0 -26
  121. package/src/utils/validations/tab.js.map +0 -1
  122. package/src/utils/validations/user.d.ts +0 -3
  123. package/src/utils/validations/user.js +0 -13
  124. package/src/utils/validations/user.js.map +0 -1
  125. package/src/utils/validations/widget.d.ts +0 -9
  126. package/src/utils/validations/widget.js +0 -151
  127. package/src/utils/validations/widget.js.map +0 -1
  128. /package/src/types/{index.d.ts → index.ts} +0 -0
package/src/index.ts ADDED
@@ -0,0 +1,59 @@
1
+ import { defaults } from './utils/defaults';
2
+ import WidgetRoutes from './routes/WidgetRoute';
3
+ import PageRoutes from './routes/PageRoute';
4
+ import UserRoutes from './routes/UserRoute';
5
+ import {
6
+ Widget,
7
+ Item,
8
+ Page,
9
+ Tab,
10
+ SrcSet,
11
+ WidgetSchema,
12
+ ItemSchema,
13
+ PageSchema,
14
+ SrcSetSchema,
15
+ TabSchema,
16
+ } from './models';
17
+ import { IConfig } from './types';
18
+ import { handleUpdateData, handleResetData } from './services/dataService';
19
+
20
+ function setConfig(config: Partial<IConfig>) {
21
+ if (config.logger) {
22
+ defaults.logger = config.logger;
23
+ }
24
+ if (typeof config.catchAsync === 'function')
25
+ defaults.catchAsync = config.catchAsync;
26
+ if (typeof config.getModals === 'function')
27
+ defaults.getModals = config.getModals;
28
+ if (Array.isArray(config.collections)) {
29
+ defaults.collections = config.collections;
30
+ }
31
+ if (Array.isArray(config.customWidgetTypes)) {
32
+ defaults.customWidgetTypes = config.customWidgetTypes;
33
+ }
34
+ if (typeof config.redis === 'string' || typeof config.redis === 'object') {
35
+ defaults.redis = config.redis;
36
+ }
37
+ if (Array.isArray(config.languages) && config.languages.length > 0) {
38
+ defaults.languages = config.languages;
39
+ }
40
+ }
41
+
42
+ export {
43
+ WidgetRoutes,
44
+ PageRoutes,
45
+ UserRoutes,
46
+ Widget,
47
+ Item,
48
+ Page,
49
+ Tab,
50
+ SrcSet,
51
+ WidgetSchema,
52
+ ItemSchema,
53
+ PageSchema,
54
+ SrcSetSchema,
55
+ TabSchema,
56
+ setConfig,
57
+ handleResetData,
58
+ handleUpdateData,
59
+ };
@@ -0,0 +1,53 @@
1
+ import { Schema, Types, model } from 'mongoose';
2
+ import mongoosePaginate from 'mongoose-paginate-v2';
3
+ import { softDeletePlugin } from '../plugins/softDelete';
4
+ import { IModel, IItemSchema, ItemTypes } from '../types';
5
+ import { defaults } from '../utils/defaults';
6
+
7
+ const titlesSchema =
8
+ defaults.languages?.reduce((acc: any, lang) => {
9
+ acc[lang.code] = { type: String, required: true };
10
+ return acc;
11
+ }, {}) || {};
12
+
13
+ const imagesSchema =
14
+ defaults.languages?.reduce((acc: any, lang) => {
15
+ acc[lang.code] = { type: Schema.Types.ObjectId, ref: 'file' };
16
+ return acc;
17
+ }, {}) || {};
18
+
19
+ const altTextsSchema =
20
+ defaults.languages?.reduce((acc: any, lang) => {
21
+ acc[lang.code] = { type: String };
22
+ return acc;
23
+ }, {}) || {};
24
+
25
+ const ItemSchema = new Schema<IItemSchema>({
26
+ widgetId: {
27
+ type: Types.ObjectId,
28
+ ref: 'Widget',
29
+ },
30
+ title: String,
31
+ titles: titlesSchema,
32
+ subtitle: String,
33
+ subtitles: titlesSchema,
34
+ altText: String,
35
+ altTexts: altTextsSchema,
36
+ link: String,
37
+ sequence: Number,
38
+ img: { type: Schema.Types.ObjectId, ref: 'file' },
39
+ imgs: imagesSchema,
40
+ itemType: {
41
+ type: String,
42
+ enum: Object.values(ItemTypes),
43
+ default: ItemTypes.Web,
44
+ required: true,
45
+ },
46
+ });
47
+
48
+ ItemSchema.plugin(softDeletePlugin);
49
+ ItemSchema.plugin(mongoosePaginate);
50
+
51
+ const Item = model('Item', ItemSchema) as unknown as IModel<IItemSchema>;
52
+
53
+ export { Item, ItemSchema };
@@ -0,0 +1,22 @@
1
+ import { Schema, model, Types } from 'mongoose';
2
+ import mongoosePaginate from 'mongoose-paginate-v2';
3
+ import { softDeletePlugin } from '../plugins/softDelete';
4
+ import { IModel, IPageSchema } from '../types';
5
+
6
+ const PageSchema = new Schema<IPageSchema>({
7
+ name: String,
8
+ code: String,
9
+ slug: String,
10
+ canDel: {
11
+ type: Boolean,
12
+ default: true,
13
+ },
14
+ widgets: [{ type: Types.ObjectId, ref: 'Widget' }],
15
+ });
16
+
17
+ PageSchema.plugin(softDeletePlugin);
18
+ PageSchema.plugin(mongoosePaginate);
19
+
20
+ const Page = model('Page', PageSchema) as unknown as IModel<IPageSchema>;
21
+
22
+ export { Page, PageSchema };
@@ -0,0 +1,16 @@
1
+ import { Schema, model, Types, Model } from 'mongoose';
2
+ import { ISrcSetSchema } from '../types';
3
+
4
+ const SrcSetSchema = new Schema<ISrcSetSchema>({
5
+ width: Number,
6
+ height: Number,
7
+ screenSize: Number,
8
+ itemId: {
9
+ type: Types.ObjectId,
10
+ ref: 'Item',
11
+ },
12
+ });
13
+
14
+ const SrcSet: Model<ISrcSetSchema> = model('SrcSet', SrcSetSchema);
15
+
16
+ export { SrcSet, SrcSetSchema };
@@ -0,0 +1,28 @@
1
+ import { Schema, model, Types } from 'mongoose';
2
+ import mongoosePaginate from 'mongoose-paginate-v2';
3
+ import { softDeletePlugin } from '../plugins/softDelete';
4
+ import { IModel, ITabSchema } from '../types';
5
+ import { defaults } from '../utils/defaults';
6
+
7
+ const namesSchema =
8
+ defaults.languages?.reduce((acc: any, lang) => {
9
+ acc[lang.code] = { type: String, required: true };
10
+ return acc;
11
+ }, {}) || {};
12
+
13
+ const TabSchema = new Schema<ITabSchema>({
14
+ name: String,
15
+ names: namesSchema,
16
+ widgetId: {
17
+ type: Types.ObjectId,
18
+ ref: 'Widget',
19
+ },
20
+ collectionItems: [{ type: Types.ObjectId }],
21
+ });
22
+
23
+ TabSchema.plugin(softDeletePlugin);
24
+ TabSchema.plugin(mongoosePaginate);
25
+
26
+ const Tab = model('Tab', TabSchema) as unknown as IModel<ITabSchema>;
27
+
28
+ export { Tab, TabSchema };
@@ -0,0 +1,65 @@
1
+ import { Schema, model, Types } from 'mongoose';
2
+ import mongoosePaginate from 'mongoose-paginate-v2';
3
+ import { softDeletePlugin } from '../plugins/softDelete';
4
+ import { IModel, IWidgetSchema, WidgetTypes, ItemsType } from '../types';
5
+ import { defaults } from '../utils/defaults';
6
+
7
+ const languageTitlesSchema =
8
+ defaults.languages?.reduce((acc: any, lang) => {
9
+ acc[lang.code] = { type: String, required: true };
10
+ return acc;
11
+ }, {}) || {};
12
+
13
+ const WidgetSchema = new Schema<IWidgetSchema>({
14
+ name: String,
15
+ code: String,
16
+ autoPlay: {
17
+ type: Boolean,
18
+ default: false,
19
+ },
20
+ isActive: {
21
+ type: Boolean,
22
+ default: true,
23
+ },
24
+ widgetTitle: String,
25
+ widgetTitles: languageTitlesSchema,
26
+ webPerRow: Number,
27
+ mobilePerRow: Number,
28
+ tabletPerRow: Number,
29
+ collectionName: String,
30
+ backgroundColor: String,
31
+ collectionItems: [{ type: Types.ObjectId, refPath: 'collectionName' }],
32
+ itemsType: {
33
+ type: String,
34
+ default: ItemsType.Image,
35
+ required: true,
36
+ },
37
+ widgetType: {
38
+ type: String,
39
+ default: WidgetTypes.FixedCard,
40
+ required: true,
41
+ },
42
+ tabs: [
43
+ {
44
+ name: String,
45
+ names: languageTitlesSchema,
46
+ collectionItems: [{ type: Types.ObjectId, refPath: 'collectionName' }],
47
+ },
48
+ ],
49
+ canDel: {
50
+ type: Boolean,
51
+ default: true,
52
+ },
53
+ textContent: {type: String},
54
+ htmlContent: {type: String}
55
+ });
56
+
57
+ WidgetSchema.plugin(softDeletePlugin);
58
+ WidgetSchema.plugin(mongoosePaginate);
59
+
60
+ const Widget = model(
61
+ 'Widget',
62
+ WidgetSchema
63
+ ) as unknown as IModel<IWidgetSchema>;
64
+
65
+ export { Widget, WidgetSchema };
@@ -3,4 +3,16 @@ import { Item, ItemSchema } from './Item';
3
3
  import { Page, PageSchema } from './Page';
4
4
  import { SrcSet, SrcSetSchema } from './SrcSet';
5
5
  import { Tab, TabSchema } from './Tab';
6
- export { Widget, Item, Page, SrcSet, Tab, WidgetSchema, ItemSchema, PageSchema, SrcSetSchema, TabSchema, };
6
+
7
+ export {
8
+ Widget,
9
+ Item,
10
+ Page,
11
+ SrcSet,
12
+ Tab,
13
+ WidgetSchema,
14
+ ItemSchema,
15
+ PageSchema,
16
+ SrcSetSchema,
17
+ TabSchema,
18
+ };
@@ -0,0 +1,84 @@
1
+ import mongoose from 'mongoose';
2
+
3
+ export type TWithSoftDeleted = {
4
+ isDeleted?: boolean;
5
+ deletedAt?: Date | null;
6
+ };
7
+
8
+ type TDocument = TWithSoftDeleted & mongoose.Document;
9
+
10
+ const softDeletePlugin = (schema: mongoose.Schema) => {
11
+ schema.add({
12
+ isDeleted: {
13
+ type: Boolean,
14
+ required: true,
15
+ default: false,
16
+ },
17
+ deletedAt: {
18
+ type: Date,
19
+ default: null,
20
+ },
21
+ });
22
+
23
+ const typesFindQueryMiddleware = [
24
+ 'count',
25
+ 'find',
26
+ 'findOne',
27
+ 'findOneAndDelete',
28
+ 'findOneAndRemove',
29
+ 'findOneAndUpdate',
30
+ 'update',
31
+ 'updateOne',
32
+ 'updateMany',
33
+ ];
34
+
35
+ const setDocumentIsDeleted = async (doc: TDocument) => {
36
+ doc.isDeleted = true;
37
+ doc.deletedAt = new Date();
38
+ doc.$isDeleted(true);
39
+ await doc.save();
40
+ };
41
+
42
+ const excludeInFindQueriesIsDeleted = async function (
43
+ this: mongoose.FilterQuery<TDocument>,
44
+ next: mongoose.CallbackWithoutResultAndOptionalError
45
+ ) {
46
+ this['where']({ isDeleted: false });
47
+ next();
48
+ };
49
+
50
+ const excludeInDeletedInAggregateMiddleware = async function (
51
+ this: mongoose.Aggregate<any>,
52
+ next: mongoose.CallbackWithoutResultAndOptionalError
53
+ ) {
54
+ this.pipeline().unshift({ $match: { isDeleted: false } });
55
+ next();
56
+ };
57
+
58
+ schema.pre(
59
+ 'remove',
60
+ async function (
61
+ this: TDocument,
62
+ next: mongoose.CallbackWithoutResultAndOptionalError
63
+ ) {
64
+ await setDocumentIsDeleted(this);
65
+ next();
66
+ }
67
+ );
68
+
69
+ typesFindQueryMiddleware.forEach((type: any) => {
70
+ schema.pre(type, excludeInFindQueriesIsDeleted);
71
+ });
72
+
73
+ schema.pre('aggregate', excludeInDeletedInAggregateMiddleware);
74
+
75
+ schema.method('toJSON', function () {
76
+ const obj: TDocument = this.toObject();
77
+ delete obj.isDeleted;
78
+ delete obj.deletedAt;
79
+
80
+ return obj;
81
+ });
82
+ };
83
+
84
+ export { softDeletePlugin };
@@ -0,0 +1,30 @@
1
+ import express from 'express';
2
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
3
+ require('express-list-endpoints-descriptor')(express);
4
+ import { IRouter } from '../types';
5
+
6
+ import validate from '../utils/validate';
7
+ import * as pageValidation from '../utils/validations/page';
8
+ import * as pageController from '../controllers/PageController';
9
+
10
+ const descriptorPrefix = process.env['PAGECREATOR_DESCRIPTOR_PREFIX'] || '';
11
+ const routes = express.Router() as IRouter;
12
+ routes.use(express.json());
13
+
14
+ // Get all pages
15
+ routes
16
+ .post(`/list`, validate(pageValidation.list), pageController.getPages)
17
+ .descriptor(`${descriptorPrefix}page.getAll`);
18
+ // Create a page
19
+ routes
20
+ .post(`/`, validate(pageValidation.create), pageController.createPage)
21
+ .descriptor(`${descriptorPrefix}page.create`);
22
+ // Update a page
23
+ routes
24
+ .put(`/:id`, validate(pageValidation.update), pageController.updatePage)
25
+ .descriptor(`${descriptorPrefix}page.update`);
26
+ // Delete a page
27
+ routes
28
+ .delete(`/:id`, pageController.deletePage)
29
+ .descriptor(`${descriptorPrefix}page.delete`);
30
+ export default routes;
@@ -0,0 +1,32 @@
1
+ import express from 'express';
2
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
3
+ require('express-list-endpoints-descriptor')(express);
4
+ import { IRouter } from '../types';
5
+
6
+ import validate from '../utils/validate';
7
+ import * as userValidation from '../utils/validations/user';
8
+ import * as userController from '../controllers/UserController';
9
+
10
+ const descriptorPrefix = process.env['PAGECREATOR_DESCRIPTOR_PREFIX'] || '';
11
+ const routes = express.Router() as IRouter;
12
+ routes.use(express.json());
13
+
14
+ // Item Routes
15
+ // Get Widget Data
16
+ routes
17
+ .post(
18
+ `/widget-data`,
19
+ validate(userValidation.getWidgetData),
20
+ userController.getWidgetData
21
+ )
22
+ .descriptor(`${descriptorPrefix}user.getWidgetData`);
23
+ // Get Page Data
24
+ routes
25
+ .post(
26
+ '/page-data',
27
+ validate(userValidation.getPageData),
28
+ userController.getPageData
29
+ )
30
+ .descriptor(`${descriptorPrefix}user.getPageData`);
31
+
32
+ export default routes;
@@ -0,0 +1,77 @@
1
+ import express from 'express';
2
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
3
+ require('express-list-endpoints-descriptor')(express);
4
+ import { IRouter } from '../types';
5
+
6
+ import validate from '../utils/validate';
7
+ import * as tabValidation from '../utils/validations/tab';
8
+ import * as widgetValidation from '../utils/validations/widget';
9
+ import * as widgetController from '../controllers/WidgetController';
10
+ import * as tabController from '../controllers/TabController';
11
+
12
+ const descriptorPrefix = process.env['PAGECREATOR_DESCRIPTOR_PREFIX'] || '';
13
+ const routes = express.Router() as IRouter;
14
+ routes.use(express.json());
15
+
16
+ // Widget Routes
17
+ // Get widget types
18
+ routes
19
+ .get('/widget-types', widgetController.getItemsTypes)
20
+ .descriptor(`${descriptorPrefix}widget.getItemsTypes`);
21
+ // Get widget selection types
22
+ routes
23
+ .get('/selection-types', widgetController.getWidgetTypes)
24
+ .descriptor(`${descriptorPrefix}widget.getWidgetTypes`);
25
+ // Get all widgets
26
+ routes
27
+ .post(`/list`, validate(widgetValidation.list), widgetController.getWidgets)
28
+ .descriptor(`${descriptorPrefix}widget.getAll`);
29
+ // Create a widget
30
+ routes
31
+ .post(`/`, validate(widgetValidation.create), widgetController.createWidget)
32
+ .descriptor(`${descriptorPrefix}widget.create`);
33
+ // Update a widget
34
+ routes
35
+ .put(`/:id`, validate(widgetValidation.update), widgetController.updateWidget)
36
+ .descriptor(`${descriptorPrefix}widget.update`);
37
+ // Partial Update a widget
38
+ routes
39
+ .patch(
40
+ `/:id`,
41
+ validate(widgetValidation.partialUpdate),
42
+ widgetController.partialUpdateWidget
43
+ )
44
+ .descriptor(`${descriptorPrefix}widget.partialUpdate`);
45
+ // Delete a widget
46
+ routes
47
+ .delete(`/:id`, widgetController.deleteWidget)
48
+ .descriptor(`${descriptorPrefix}widget.delete`);
49
+ // Get dynamic collection data
50
+ routes
51
+ .post(
52
+ '/collection-data',
53
+ validate(widgetValidation.getCollectionData),
54
+ widgetController.getCollectionData
55
+ )
56
+ .descriptor(`${descriptorPrefix}widget.getCollectionData`);
57
+ // Tabs
58
+ routes
59
+ .post('/tabs', validate(tabValidation.create), tabController.createTab)
60
+ .descriptor(`${descriptorPrefix}tab.create`);
61
+ routes
62
+ .put('/tabs/:tabId', validate(tabValidation.update), tabController.updateTab)
63
+ .descriptor(`${descriptorPrefix}tab.update`);
64
+ routes
65
+ .delete('/tabs/:tabId', tabController.deleteTab)
66
+ .descriptor(`${descriptorPrefix}tab.delete`);
67
+ routes
68
+ .get('/tabs/:widgetId', tabController.getTabs)
69
+ .descriptor(`${descriptorPrefix}tab.getAll`);
70
+ // Get all languages
71
+ routes.get(`/languages`, widgetController.getLanguages);
72
+ // Get single widget
73
+ routes
74
+ .get(`/:id`, widgetController.getSingleWidget)
75
+ .descriptor(`${descriptorPrefix}widget.getOne`);
76
+
77
+ export default routes;