@knovator/pagecreator-node 1.2.0 → 1.2.2
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/package.json +4 -2
- package/src/constants/index.d.ts +20 -0
- package/src/constants/index.js +34 -0
- package/src/constants/index.js.map +1 -0
- package/src/controllers/PageController.d.ts +4 -0
- package/src/controllers/PageController.js +84 -0
- package/src/controllers/PageController.js.map +1 -0
- package/src/controllers/TabController.d.ts +4 -0
- package/src/controllers/TabController.js +46 -0
- package/src/controllers/TabController.js.map +1 -0
- package/src/controllers/UserController.d.ts +2 -0
- package/src/controllers/UserController.js +65 -0
- package/src/controllers/UserController.js.map +1 -0
- package/src/controllers/WidgetController.d.ts +10 -0
- package/src/controllers/WidgetController.js +329 -0
- package/src/controllers/WidgetController.js.map +1 -0
- package/src/index.d.ts +8 -0
- package/src/index.js +48 -0
- package/src/index.js.map +1 -0
- package/src/models/Item.d.ts +30 -0
- package/src/models/Item.js +50 -0
- package/src/models/Item.js.map +1 -0
- package/src/models/Page.d.ts +30 -0
- package/src/models/Page.js +23 -0
- package/src/models/Page.js.map +1 -0
- package/src/models/SrcSet.d.ts +30 -0
- package/src/models/SrcSet.js +17 -0
- package/src/models/SrcSet.js.map +1 -0
- package/src/models/Tab.d.ts +30 -0
- package/src/models/Tab.js +28 -0
- package/src/models/Tab.js.map +1 -0
- package/src/models/Widget.d.ts +30 -0
- package/src/models/Widget.js +63 -0
- package/src/models/Widget.js.map +1 -0
- package/src/models/{index.ts → index.d.ts} +1 -13
- package/src/models/index.js +19 -0
- package/src/models/index.js.map +1 -0
- package/src/plugins/softDelete.d.ts +7 -0
- package/src/plugins/softDelete.js +64 -0
- package/src/plugins/softDelete.js.map +1 -0
- package/src/routes/PageRoute.d.ts +3 -0
- package/src/routes/PageRoute.js +30 -0
- package/src/routes/PageRoute.js.map +1 -0
- package/src/routes/UserRoute.d.ts +3 -0
- package/src/routes/UserRoute.js +23 -0
- package/src/routes/UserRoute.js.map +1 -0
- package/src/routes/WidgetRoute.d.ts +3 -0
- package/src/routes/WidgetRoute.js +68 -0
- package/src/routes/WidgetRoute.js.map +1 -0
- package/src/services/dataService.d.ts +9 -0
- package/src/services/dataService.js +403 -0
- package/src/services/dataService.js.map +1 -0
- package/src/services/dbService.d.ts +16 -0
- package/src/services/dbService.js +88 -0
- package/src/services/dbService.js.map +1 -0
- package/src/types/{IRequest.ts → IRequest.d.ts} +3 -4
- package/src/types/IRequest.js +3 -0
- package/src/types/IRequest.js.map +1 -0
- package/src/types/{IResponse.ts → IResponse.d.ts} +3 -4
- package/src/types/IResponse.js +3 -0
- package/src/types/IResponse.js.map +1 -0
- package/src/types/{Router.ts → Router.d.ts} +1 -2
- package/src/types/Router.js +3 -0
- package/src/types/Router.js.map +1 -0
- package/src/types/common.d.ts +142 -0
- package/src/types/common.js +3 -0
- package/src/types/common.js.map +1 -0
- package/src/types/enums.d.ts +14 -0
- package/src/types/enums.js +21 -0
- package/src/types/enums.js.map +1 -0
- package/src/types/index.js +9 -0
- package/src/types/index.js.map +1 -0
- package/src/utils/defaults.d.ts +7 -0
- package/src/utils/defaults.js +41 -0
- package/src/utils/defaults.js.map +1 -0
- package/src/utils/helper.d.ts +7 -0
- package/src/utils/helper.js +225 -0
- package/src/utils/helper.js.map +1 -0
- package/src/utils/redis.d.ts +3 -0
- package/src/utils/redis.js +59 -0
- package/src/utils/redis.js.map +1 -0
- package/src/utils/responseHandlers.d.ts +6 -0
- package/src/utils/responseHandlers.js +57 -0
- package/src/utils/responseHandlers.js.map +1 -0
- package/src/utils/validate.d.ts +4 -0
- package/src/utils/validate.js +24 -0
- package/src/utils/validate.js.map +1 -0
- package/src/utils/validations/page.d.ts +7 -0
- package/src/utils/validations/page.js +51 -0
- package/src/utils/validations/page.js.map +1 -0
- package/src/utils/validations/tab.d.ts +6 -0
- package/src/utils/validations/tab.js +26 -0
- package/src/utils/validations/tab.js.map +1 -0
- package/src/utils/validations/user.d.ts +3 -0
- package/src/utils/validations/user.js +13 -0
- package/src/utils/validations/user.js.map +1 -0
- package/src/utils/validations/widget.d.ts +9 -0
- package/src/utils/validations/widget.js +153 -0
- package/src/utils/validations/widget.js.map +1 -0
- package/src/constants/index.ts +0 -30
- package/src/controllers/PageController.ts +0 -88
- package/src/controllers/TabController.ts +0 -47
- package/src/controllers/UserController.ts +0 -69
- package/src/controllers/WidgetController.ts +0 -420
- package/src/index.ts +0 -59
- package/src/models/Item.ts +0 -53
- package/src/models/Page.ts +0 -22
- package/src/models/SrcSet.ts +0 -16
- package/src/models/Tab.ts +0 -28
- package/src/models/Widget.ts +0 -65
- package/src/plugins/softDelete.ts +0 -84
- package/src/routes/PageRoute.ts +0 -30
- package/src/routes/UserRoute.ts +0 -32
- package/src/routes/WidgetRoute.ts +0 -77
- package/src/services/dataService.ts +0 -475
- package/src/services/dbService.ts +0 -102
- package/src/types/common.ts +0 -172
- package/src/types/enums.ts +0 -16
- package/src/utils/defaults.ts +0 -41
- package/src/utils/helper.ts +0 -285
- package/src/utils/redis.ts +0 -57
- package/src/utils/responseHandlers.ts +0 -60
- package/src/utils/validate.ts +0 -22
- package/src/utils/validations/page.ts +0 -52
- package/src/utils/validations/tab.ts +0 -26
- package/src/utils/validations/user.ts +0 -10
- package/src/utils/validations/widget.ts +0 -169
- /package/src/types/{index.ts → index.d.ts} +0 -0
|
@@ -1,420 +0,0 @@
|
|
|
1
|
-
import { Models, Types } from 'mongoose';
|
|
2
|
-
import {
|
|
3
|
-
create,
|
|
4
|
-
remove,
|
|
5
|
-
update,
|
|
6
|
-
list,
|
|
7
|
-
bulkInsert,
|
|
8
|
-
deleteAll,
|
|
9
|
-
getOne,
|
|
10
|
-
checkUnique,
|
|
11
|
-
} from '../services/dbService';
|
|
12
|
-
import { VALIDATION } from '../constants';
|
|
13
|
-
import {
|
|
14
|
-
successResponse,
|
|
15
|
-
createdDocumentResponse,
|
|
16
|
-
} from './../utils/responseHandlers';
|
|
17
|
-
|
|
18
|
-
import { commonExcludedFields, defaults } from '../utils/defaults';
|
|
19
|
-
import { formatCollectionItems, getCollectionModal } from '../utils/helper';
|
|
20
|
-
import {
|
|
21
|
-
CollectionItem,
|
|
22
|
-
IRequest,
|
|
23
|
-
IResponse,
|
|
24
|
-
WidgetTypes,
|
|
25
|
-
TypesType,
|
|
26
|
-
ItemsType,
|
|
27
|
-
} from '../types';
|
|
28
|
-
import {
|
|
29
|
-
updateRedisWidget,
|
|
30
|
-
updateWidgetPagesData,
|
|
31
|
-
} from '../services/dataService';
|
|
32
|
-
|
|
33
|
-
const catchAsync = (fn: any) => {
|
|
34
|
-
return defaults.catchAsync(fn, 'Widget');
|
|
35
|
-
};
|
|
36
|
-
|
|
37
|
-
const getModals = (req: IRequest) => defaults.getModals(req);
|
|
38
|
-
|
|
39
|
-
const deleteItems = async (widgetId: string, models: Models) => {
|
|
40
|
-
const { Item } = models;
|
|
41
|
-
await deleteAll(Item, { widgetId: new Types.ObjectId(widgetId) });
|
|
42
|
-
};
|
|
43
|
-
const createItems = async (
|
|
44
|
-
itemsData: any[],
|
|
45
|
-
widgetId: string,
|
|
46
|
-
models: Models
|
|
47
|
-
) => {
|
|
48
|
-
const { Item, SrcSet } = models;
|
|
49
|
-
itemsData = itemsData.map((item: any) => ({
|
|
50
|
-
...item,
|
|
51
|
-
_id: new Types.ObjectId(),
|
|
52
|
-
widgetId,
|
|
53
|
-
}));
|
|
54
|
-
const srcSetItems = itemsData.reduce((acc: any[], item: any) => {
|
|
55
|
-
if (Array.isArray(item.srcset)) {
|
|
56
|
-
acc.push(
|
|
57
|
-
...item.srcset.map((srcSetItem: any) => ({
|
|
58
|
-
...srcSetItem,
|
|
59
|
-
itemId: item._id,
|
|
60
|
-
}))
|
|
61
|
-
);
|
|
62
|
-
delete item.srcset;
|
|
63
|
-
}
|
|
64
|
-
return acc;
|
|
65
|
-
}, []);
|
|
66
|
-
await bulkInsert(Item, itemsData);
|
|
67
|
-
await bulkInsert(SrcSet, srcSetItems);
|
|
68
|
-
};
|
|
69
|
-
|
|
70
|
-
export const createWidget = catchAsync(
|
|
71
|
-
async (req: IRequest, res: IResponse) => {
|
|
72
|
-
const models = getModals(req);
|
|
73
|
-
const data = req.body;
|
|
74
|
-
let items = [];
|
|
75
|
-
|
|
76
|
-
await checkUnique({
|
|
77
|
-
Modal: models['Widget'],
|
|
78
|
-
uniqueField: 'code',
|
|
79
|
-
value: data.code,
|
|
80
|
-
errorMessage: VALIDATION.WIDGET_EXISTS
|
|
81
|
-
});
|
|
82
|
-
|
|
83
|
-
if ('items' in data) {
|
|
84
|
-
items = JSON.parse(JSON.stringify(data.items));
|
|
85
|
-
delete data.items;
|
|
86
|
-
}
|
|
87
|
-
const widget = await create(models['Widget'], data);
|
|
88
|
-
if (items.length > 0) {
|
|
89
|
-
await createItems(items, widget._id, models);
|
|
90
|
-
}
|
|
91
|
-
res.message = req?.i18n?.t('widget.create');
|
|
92
|
-
return createdDocumentResponse(widget, res);
|
|
93
|
-
}
|
|
94
|
-
);
|
|
95
|
-
|
|
96
|
-
export const updateWidget = catchAsync(
|
|
97
|
-
async (req: IRequest, res: IResponse) => {
|
|
98
|
-
const models = getModals(req);
|
|
99
|
-
const data = req.body;
|
|
100
|
-
const _id = req.params['id'];
|
|
101
|
-
let items = [];
|
|
102
|
-
if ('items' in data) {
|
|
103
|
-
items = JSON.parse(JSON.stringify(data.items));
|
|
104
|
-
delete data.items;
|
|
105
|
-
}
|
|
106
|
-
const updatedWidget = await update(models['Widget'], { _id }, data);
|
|
107
|
-
if (items.length > 0 && updatedWidget) {
|
|
108
|
-
await deleteItems(_id, models);
|
|
109
|
-
await createItems(items, updatedWidget._id, models);
|
|
110
|
-
}
|
|
111
|
-
if (updatedWidget) {
|
|
112
|
-
updateRedisWidget(updatedWidget.code, models);
|
|
113
|
-
updateWidgetPagesData([updatedWidget.id], models);
|
|
114
|
-
}
|
|
115
|
-
res.message = req?.i18n?.t('widget.update');
|
|
116
|
-
return successResponse(updatedWidget, res);
|
|
117
|
-
}
|
|
118
|
-
);
|
|
119
|
-
|
|
120
|
-
export const deleteWidget = catchAsync(
|
|
121
|
-
async (req: IRequest, res: IResponse) => {
|
|
122
|
-
const models = getModals(req);
|
|
123
|
-
await deleteItems(req.params['id'], models);
|
|
124
|
-
const _id = new Types.ObjectId(req.params['id']);
|
|
125
|
-
const deletedWidget = await remove(models['Widget'], { _id });
|
|
126
|
-
if (deletedWidget) {
|
|
127
|
-
updateRedisWidget(deletedWidget.code, models);
|
|
128
|
-
updateWidgetPagesData([deletedWidget.id], models);
|
|
129
|
-
}
|
|
130
|
-
res.message = req?.i18n?.t('widget.delete');
|
|
131
|
-
return successResponse(deletedWidget, res);
|
|
132
|
-
}
|
|
133
|
-
);
|
|
134
|
-
|
|
135
|
-
export const getWidgets = catchAsync(async (req: IRequest, res: IResponse) => {
|
|
136
|
-
const { Widget } = getModals(req);
|
|
137
|
-
const search = req.body.search || '';
|
|
138
|
-
const { collectionItems } = req.body;
|
|
139
|
-
const { page, limit, sort } = req.body.options;
|
|
140
|
-
const all =
|
|
141
|
-
(typeof req.body.all !== 'undefined' && req.body.all === true) || false;
|
|
142
|
-
const isActive =
|
|
143
|
-
typeof req.body.isActive !== 'undefined'
|
|
144
|
-
? req.body.isActive || false
|
|
145
|
-
: null;
|
|
146
|
-
const customOptions = {
|
|
147
|
-
pagination: !all,
|
|
148
|
-
sort,
|
|
149
|
-
select: 'name code isActive canDel',
|
|
150
|
-
...(page && limit ? { page, limit } : {}),
|
|
151
|
-
};
|
|
152
|
-
const orOptions: any = [];
|
|
153
|
-
if (search) {
|
|
154
|
-
orOptions.push({ name: { $regex: search, $options: 'i' } });
|
|
155
|
-
orOptions.push({ code: { $regex: search, $options: 'i' } });
|
|
156
|
-
} else {
|
|
157
|
-
orOptions.push({});
|
|
158
|
-
}
|
|
159
|
-
if (Array.isArray(collectionItems) && collectionItems.length) {
|
|
160
|
-
orOptions.push({ _id: { $in: collectionItems } });
|
|
161
|
-
}
|
|
162
|
-
const query = {
|
|
163
|
-
isDeleted: false,
|
|
164
|
-
isActive: { $in: isActive === null ? [true, false] : [isActive] },
|
|
165
|
-
$or: orOptions,
|
|
166
|
-
};
|
|
167
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
168
|
-
// @ts-ignore
|
|
169
|
-
const notifications = await list(Widget, query, customOptions);
|
|
170
|
-
res.message = req?.i18n?.t('widget.getAll');
|
|
171
|
-
return successResponse(notifications, res);
|
|
172
|
-
});
|
|
173
|
-
|
|
174
|
-
export const getSingleWidget = catchAsync(
|
|
175
|
-
async (req: IRequest, res: IResponse) => {
|
|
176
|
-
const { Widget, Item } = getModals(req);
|
|
177
|
-
const _id = req.params['id'];
|
|
178
|
-
const widget = await (
|
|
179
|
-
await getOne(Widget, { _id, isDeleted: true })
|
|
180
|
-
).toJSON();
|
|
181
|
-
widget['items'] = await Item.aggregate([
|
|
182
|
-
{
|
|
183
|
-
$match: {
|
|
184
|
-
widgetId: new Types.ObjectId(_id),
|
|
185
|
-
isDeleted: false,
|
|
186
|
-
},
|
|
187
|
-
},
|
|
188
|
-
{
|
|
189
|
-
$project: {
|
|
190
|
-
...commonExcludedFields,
|
|
191
|
-
},
|
|
192
|
-
},
|
|
193
|
-
...(defaults.languages && defaults.languages?.length > 0
|
|
194
|
-
? defaults.languages.reduce((arr: any[], lng) => {
|
|
195
|
-
arr.push(
|
|
196
|
-
{
|
|
197
|
-
$lookup: {
|
|
198
|
-
from: 'file',
|
|
199
|
-
let: { imgsId: { $toObjectId: `$imgs.${lng.code}` } },
|
|
200
|
-
as: `imgs.${lng.code}`,
|
|
201
|
-
pipeline: [
|
|
202
|
-
{
|
|
203
|
-
$match: {
|
|
204
|
-
$expr: {
|
|
205
|
-
$eq: ['$_id', '$$imgsId'],
|
|
206
|
-
},
|
|
207
|
-
},
|
|
208
|
-
},
|
|
209
|
-
{
|
|
210
|
-
$project: {
|
|
211
|
-
...commonExcludedFields,
|
|
212
|
-
width: 0,
|
|
213
|
-
module: 0,
|
|
214
|
-
height: 0,
|
|
215
|
-
},
|
|
216
|
-
},
|
|
217
|
-
],
|
|
218
|
-
},
|
|
219
|
-
},
|
|
220
|
-
{
|
|
221
|
-
$unwind: {
|
|
222
|
-
path: `$imgs.${lng.code}`,
|
|
223
|
-
preserveNullAndEmptyArrays: true,
|
|
224
|
-
},
|
|
225
|
-
}
|
|
226
|
-
);
|
|
227
|
-
return arr;
|
|
228
|
-
}, [])
|
|
229
|
-
: [
|
|
230
|
-
{
|
|
231
|
-
$lookup: {
|
|
232
|
-
from: 'file',
|
|
233
|
-
let: { imgId: '$img' },
|
|
234
|
-
as: 'img',
|
|
235
|
-
pipeline: [
|
|
236
|
-
{
|
|
237
|
-
$match: {
|
|
238
|
-
$expr: {
|
|
239
|
-
$eq: ['$_id', '$$imgId'],
|
|
240
|
-
},
|
|
241
|
-
},
|
|
242
|
-
},
|
|
243
|
-
{
|
|
244
|
-
$project: {
|
|
245
|
-
...commonExcludedFields,
|
|
246
|
-
width: 0,
|
|
247
|
-
module: 0,
|
|
248
|
-
height: 0,
|
|
249
|
-
},
|
|
250
|
-
},
|
|
251
|
-
],
|
|
252
|
-
},
|
|
253
|
-
},
|
|
254
|
-
{
|
|
255
|
-
$unwind: {
|
|
256
|
-
path: '$img',
|
|
257
|
-
preserveNullAndEmptyArrays: true,
|
|
258
|
-
},
|
|
259
|
-
},
|
|
260
|
-
]),
|
|
261
|
-
{
|
|
262
|
-
$lookup: {
|
|
263
|
-
from: 'srcsets',
|
|
264
|
-
let: { item: '$_id' },
|
|
265
|
-
as: 'srcset',
|
|
266
|
-
pipeline: [
|
|
267
|
-
{
|
|
268
|
-
$match: {
|
|
269
|
-
$expr: {
|
|
270
|
-
$eq: ['$itemId', '$$item'],
|
|
271
|
-
},
|
|
272
|
-
},
|
|
273
|
-
},
|
|
274
|
-
{
|
|
275
|
-
$project: {
|
|
276
|
-
...commonExcludedFields,
|
|
277
|
-
_id: 0,
|
|
278
|
-
itemId: 0,
|
|
279
|
-
},
|
|
280
|
-
},
|
|
281
|
-
],
|
|
282
|
-
},
|
|
283
|
-
},
|
|
284
|
-
]);
|
|
285
|
-
res.message = req?.i18n?.t('widget.getOne');
|
|
286
|
-
return successResponse(widget, res);
|
|
287
|
-
}
|
|
288
|
-
);
|
|
289
|
-
|
|
290
|
-
export const partialUpdateWidget = catchAsync(
|
|
291
|
-
async (req: IRequest, res: IResponse) => {
|
|
292
|
-
const models = getModals(req);
|
|
293
|
-
const data = req.body;
|
|
294
|
-
const _id = req.params['id'];
|
|
295
|
-
const updatedWidget = await update(models['Widget'], { _id }, data);
|
|
296
|
-
if (updatedWidget) {
|
|
297
|
-
updateRedisWidget(updatedWidget.code, models);
|
|
298
|
-
updateWidgetPagesData([updatedWidget.id], models);
|
|
299
|
-
}
|
|
300
|
-
res.message = req?.i18n?.t('widget.partialUpdate');
|
|
301
|
-
return successResponse(updatedWidget, res);
|
|
302
|
-
}
|
|
303
|
-
);
|
|
304
|
-
|
|
305
|
-
export const getItemsTypes = catchAsync(
|
|
306
|
-
async (req: IRequest, res: IResponse) => {
|
|
307
|
-
const itemsTypes: TypesType[] = [
|
|
308
|
-
{
|
|
309
|
-
value: Object.keys(ItemsType)[0],
|
|
310
|
-
label: Object.values(ItemsType)[0],
|
|
311
|
-
},
|
|
312
|
-
];
|
|
313
|
-
defaults.collections.forEach((item: CollectionItem) => {
|
|
314
|
-
itemsTypes.push({
|
|
315
|
-
value: item.collectionName,
|
|
316
|
-
label: item.title,
|
|
317
|
-
});
|
|
318
|
-
});
|
|
319
|
-
res.message = req?.i18n?.t('widget.getItemsTypes');
|
|
320
|
-
return successResponse(itemsTypes, res);
|
|
321
|
-
}
|
|
322
|
-
);
|
|
323
|
-
|
|
324
|
-
export const getWidgetTypes = catchAsync(
|
|
325
|
-
async (req: IRequest, res: IResponse) => {
|
|
326
|
-
const widgetTypes: any[] = Object.entries(WidgetTypes).map((e) => ({
|
|
327
|
-
label: e[1],
|
|
328
|
-
value: e[0],
|
|
329
|
-
}));
|
|
330
|
-
if (
|
|
331
|
-
Array.isArray(defaults.customWidgetTypes) &&
|
|
332
|
-
defaults.customWidgetTypes.length > 0
|
|
333
|
-
) {
|
|
334
|
-
widgetTypes.push(...defaults.customWidgetTypes);
|
|
335
|
-
}
|
|
336
|
-
res.message = req?.i18n?.t('widget.getWidgetTypes');
|
|
337
|
-
return successResponse(widgetTypes, res);
|
|
338
|
-
}
|
|
339
|
-
);
|
|
340
|
-
|
|
341
|
-
export const getCollectionData = catchAsync(async (req: IRequest, res: IResponse) => {
|
|
342
|
-
const models = getModals(req);
|
|
343
|
-
const { search, collectionName, collectionItems } = req.body;
|
|
344
|
-
const collectionItem: CollectionItem | undefined = defaults.collections.find(
|
|
345
|
-
(collection) => collection.collectionName === collectionName
|
|
346
|
-
);
|
|
347
|
-
if (!collectionItem) {
|
|
348
|
-
throw new Error(`No collection is specified with ${collectionName}`);
|
|
349
|
-
}
|
|
350
|
-
let limit = collectionItem.searchLimit || 10;
|
|
351
|
-
if (Array.isArray(collectionItems))
|
|
352
|
-
limit = Math.max(collectionItems.length, limit);
|
|
353
|
-
// setting up mongoose model
|
|
354
|
-
const TempModel = getCollectionModal(collectionName, models);
|
|
355
|
-
// fetching data
|
|
356
|
-
let query: any = collectionItem.filters || {};
|
|
357
|
-
const orOptions: any = [];
|
|
358
|
-
let addFieldOptions: any = {};
|
|
359
|
-
if (
|
|
360
|
-
search &&
|
|
361
|
-
Array.isArray(collectionItem.searchColumns) &&
|
|
362
|
-
collectionItem.searchColumns.length
|
|
363
|
-
) {
|
|
364
|
-
collectionItem.searchColumns.forEach((column) =>
|
|
365
|
-
orOptions.push({
|
|
366
|
-
[column]: {
|
|
367
|
-
$regex: search,
|
|
368
|
-
$options: 'i',
|
|
369
|
-
},
|
|
370
|
-
})
|
|
371
|
-
);
|
|
372
|
-
} else {
|
|
373
|
-
orOptions.push({});
|
|
374
|
-
}
|
|
375
|
-
if (Array.isArray(collectionItems) && collectionItems.length) {
|
|
376
|
-
addFieldOptions = {
|
|
377
|
-
__order: {
|
|
378
|
-
$indexOfArray: [
|
|
379
|
-
collectionItems,
|
|
380
|
-
{
|
|
381
|
-
$toString: '$_id',
|
|
382
|
-
},
|
|
383
|
-
],
|
|
384
|
-
},
|
|
385
|
-
};
|
|
386
|
-
orOptions.push({ _id: { $in: formatCollectionItems(collectionItems) } });
|
|
387
|
-
}
|
|
388
|
-
if (orOptions.length > 0) {
|
|
389
|
-
query = {
|
|
390
|
-
...query,
|
|
391
|
-
$or: orOptions,
|
|
392
|
-
};
|
|
393
|
-
}
|
|
394
|
-
const collectionData = await TempModel.aggregate([
|
|
395
|
-
...(Array.isArray(collectionItem.aggregations)
|
|
396
|
-
? collectionItem.aggregations
|
|
397
|
-
: []),
|
|
398
|
-
{
|
|
399
|
-
$match: query,
|
|
400
|
-
},
|
|
401
|
-
{ $addFields: addFieldOptions },
|
|
402
|
-
{
|
|
403
|
-
$sort: {
|
|
404
|
-
__order: -1,
|
|
405
|
-
},
|
|
406
|
-
},
|
|
407
|
-
{
|
|
408
|
-
$limit: limit,
|
|
409
|
-
},
|
|
410
|
-
]);
|
|
411
|
-
res.message = req?.i18n?.t('widget.getCollectionData');
|
|
412
|
-
return successResponse({ docs: collectionData }, res);
|
|
413
|
-
});
|
|
414
|
-
|
|
415
|
-
export const getLanguages = catchAsync(async (req: any, res: any) => {
|
|
416
|
-
return successResponse(
|
|
417
|
-
Array.isArray(defaults.languages) ? defaults.languages : [],
|
|
418
|
-
res
|
|
419
|
-
);
|
|
420
|
-
});
|
package/src/index.ts
DELETED
|
@@ -1,59 +0,0 @@
|
|
|
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
|
-
};
|
package/src/models/Item.ts
DELETED
|
@@ -1,53 +0,0 @@
|
|
|
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 };
|
package/src/models/Page.ts
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
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 };
|
package/src/models/SrcSet.ts
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
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 };
|
package/src/models/Tab.ts
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
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 };
|
package/src/models/Widget.ts
DELETED
|
@@ -1,65 +0,0 @@
|
|
|
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 };
|