@lilaquadrat/studio 10.0.0-beta.4 → 10.0.0-beta.6

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.
@@ -1,268 +0,0 @@
1
- import { Router } from 'express';
2
- import handleError from '../functions/handleError.js';
3
- export default class ControllerBase {
4
- constructor() {
5
- this.logger = console;
6
- this.router = Router({ mergeParams: true });
7
- /**
8
- * defines which fields are included or excluded if nothing is emitet
9
- *
10
- * @type {string}
11
- * @memberof ControllerBase
12
- */
13
- this.selectDefault = {};
14
- /**
15
- * defines which keys are used for regex search
16
- * if more then one entry, it will be an $or
17
- *
18
- *
19
- * For example:
20
- *
21
- * ```ts
22
- * {$or: [{ $regex: key1, $options: 'i' }, { $regex: key2, $options: 'i' }]}
23
- * ```
24
- *
25
- * @type {string[]}
26
- * @memberof ControllerBase
27
- */
28
- this.search = [];
29
- }
30
- cleanErrors(errors) {
31
- const errorObject = {};
32
- if (errors.errors) {
33
- Object.keys(errors.errors).forEach((key) => {
34
- errorObject[key] = errors.errors[key].message;
35
- });
36
- }
37
- else if (typeof errors === 'object') {
38
- if (errors.code === 11000) {
39
- const message = errors.message.match(/index: (.*)_/i);
40
- errorObject[message[1]] = `${message[1]}_duplicate`;
41
- }
42
- else {
43
- errorObject.error = errors.message;
44
- }
45
- }
46
- return errorObject;
47
- }
48
- handleError(error, res) {
49
- handleError(error, res);
50
- }
51
- response(res, data, count) {
52
- count || count === 0
53
- ? res.json({ data, count })
54
- : res.json({ data, count: data.length });
55
- }
56
- static buildResponse(data, site, limit, hardLimit = 30) {
57
- return {
58
- data: data.data,
59
- all: data.all,
60
- sites: ControllerBase.getSites(+site, ControllerBase.getRealLimit(limit, hardLimit), data.all, data.count),
61
- count: data.count,
62
- };
63
- }
64
- static getLimit(site, limit, hardLimit) {
65
- const realLimit = ControllerBase.getRealLimit(limit, hardLimit);
66
- return {
67
- skip: site * realLimit || 0,
68
- limit: realLimit,
69
- };
70
- }
71
- static getRealLimit(limit, hardLimit) {
72
- let realLimit;
73
- if (hardLimit) {
74
- realLimit = limit > hardLimit ? hardLimit : limit;
75
- }
76
- else {
77
- realLimit = limit;
78
- }
79
- return realLimit;
80
- }
81
- getSort(sort, order) {
82
- const sortObject = {};
83
- if (sort && order) {
84
- sortObject[sort] = order === '1' ? 1 : -1;
85
- return sortObject;
86
- }
87
- return { _id: 1 };
88
- }
89
- /**
90
- *
91
- *
92
- * @param {number} site
93
- * @param {number} limit
94
- * @param {number} count all data count regardless of site
95
- * @param {number} current current count of documents
96
- * @returns {DatabaseQuerySites}
97
- * @memberof ControllerBase
98
- */
99
- static getSites(site, limit, count, current) {
100
- const realSite = site - 1;
101
- if (count === 0) {
102
- return {
103
- first: 0,
104
- current: 0,
105
- last: 0,
106
- range: [0, 0],
107
- };
108
- }
109
- return {
110
- first: 1,
111
- current: site || 1,
112
- last: count ? Math.ceil(count / limit) : 1,
113
- range: [
114
- (realSite * limit) + 1 || 1,
115
- realSite * limit + current || current,
116
- ],
117
- };
118
- }
119
- exec() {
120
- }
121
- /**
122
- *
123
- *
124
- * @param {DatabaseQuery} query
125
- * @param {string} [company]
126
- * @param {string} [project]
127
- * @param {DatabaseQueryOptions} [options]
128
- * @returns
129
- * @memberof ControllerBase
130
- */
131
- buildQuery(query, company, project, options) {
132
- const realQuery = { ...query };
133
- const orArray = [];
134
- let tags;
135
- let category;
136
- let keepTags = false;
137
- let keepSearch = false;
138
- let keepSort = false;
139
- if (company)
140
- realQuery.company = company;
141
- if (project)
142
- realQuery.project = project;
143
- if (project === false)
144
- realQuery.project = { $exists: false };
145
- if (options) {
146
- if (options.keepTags)
147
- keepTags = true;
148
- if (options.keepSearch)
149
- keepSearch = true;
150
- if (options.keepSort)
151
- keepSort = true;
152
- }
153
- if (!keepSort) {
154
- delete realQuery.sort;
155
- delete realQuery.order;
156
- }
157
- if (query.partial !== undefined) {
158
- realQuery.partial = query.partial
159
- ? true
160
- : { $exists: false };
161
- }
162
- if (query.layout !== undefined) {
163
- realQuery.layout = query.layout
164
- ? true
165
- : { $exists: false };
166
- }
167
- if (query.available) {
168
- realQuery.available = query.available === true || (query.available === 'true');
169
- }
170
- /**
171
- * make sure tags are an array
172
- */
173
- if (query.tags && !keepTags) {
174
- if (!Array.isArray(query.tags)) {
175
- tags = [query.tags];
176
- }
177
- else {
178
- tags = query.tags;
179
- }
180
- realQuery.tags = { $in: tags };
181
- }
182
- if (query.category) {
183
- if (!Array.isArray(query.category)) {
184
- category = [query.category];
185
- }
186
- else {
187
- category = query.category;
188
- }
189
- realQuery.category = { $in: category };
190
- }
191
- if (query.search && !keepSearch) {
192
- if (this.search.length > 1) {
193
- this.search.forEach((single) => {
194
- orArray.push({ [single]: { $regex: query.search.toString().toLowerCase().trim(), $options: 'i' } });
195
- });
196
- realQuery.$or = orArray;
197
- }
198
- else {
199
- realQuery[this.search[0]] = { $regex: query.search.toString().toLowerCase().trim(), $options: 'i' };
200
- }
201
- delete realQuery.search;
202
- }
203
- return realQuery;
204
- }
205
- /**
206
- *
207
- *
208
- * @param {DatabaseQuery} query
209
- * @param {string} select
210
- * @param {number} site start counting at 1 instead of zero. no site / zero will be the same as 1
211
- * @param {number} limit
212
- * @param {Model<Document>} model
213
- * @param {string} [sort]
214
- * @param {string} [order]
215
- * @returns
216
- * @memberof ControllerBase
217
- */
218
- async list(query, select, site, limit, model, sort, order) {
219
- let realSelect;
220
- const skipLimitSort = ControllerBase.getSkipLimitSort(site, limit, sort, order);
221
- realSelect = this.selectDefault;
222
- if (select) {
223
- realSelect = { ...select, ...realSelect };
224
- }
225
- const all = await model.db.countDocuments(query);
226
- const data = await model.db.find(query, { projection: realSelect })
227
- .limit(skipLimitSort.limit)
228
- .skip(skipLimitSort.skip)
229
- .sort(skipLimitSort.sort)
230
- .toArray();
231
- return { data, all, count: data.length };
232
- }
233
- async listCustomQuery(queries, model) {
234
- const all = await model.db.countDocuments(queries.countQuery);
235
- const data = await model.db.aggregate(queries.aggregation)
236
- .toArray();
237
- return { all, data, count: data.length };
238
- }
239
- static getSkipLimitSort(site, limit, sort, order) {
240
- let realSite = 0;
241
- let realSort = {};
242
- let sortKey;
243
- /**
244
- * see comment from this function
245
- */
246
- if (site)
247
- realSite = site - 1;
248
- const skipLimit = ControllerBase.getLimit(realSite, limit, limit);
249
- if (sort && order) {
250
- if (sort === 'updated') {
251
- sortKey = 'history.updated';
252
- }
253
- else if (sort === 'created') {
254
- sortKey = 'history.created';
255
- }
256
- else
257
- sortKey = sort;
258
- realSort[sortKey] = +order;
259
- }
260
- else {
261
- realSort = { _id: 1 };
262
- }
263
- return {
264
- sort: realSort, ...skipLimit,
265
- };
266
- }
267
- }
268
- //# sourceMappingURL=ControllerBase.class.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ControllerBase.class.js","sourceRoot":"","sources":["../../../src/classes/ControllerBase.class.ts"],"names":[],"mappings":"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"}