not-node 5.0.22 → 5.1.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/.eslintrc.json +1 -1
- package/bin/not-deploy.js +52 -0
- package/index.js +21 -19
- package/package.json +1 -1
- package/src/app.js +61 -58
- package/src/auth/abstract.js +17 -19
- package/src/auth/const.js +8 -12
- package/src/auth/fields.js +143 -124
- package/src/auth/index.js +14 -14
- package/src/auth/roles.js +64 -63
- package/src/auth/routes.js +89 -54
- package/src/auth/rules.js +63 -63
- package/src/auth/session.js +60 -62
- package/src/bootstrap/form.js +13 -13
- package/src/bootstrap/logic.js +45 -41
- package/src/bootstrap/model.js +14 -17
- package/src/bootstrap/route.js +132 -53
- package/src/common.js +86 -79
- package/src/core/fields/ID.js +6 -6
- package/src/core/fields/__closed.js +3 -3
- package/src/core/fields/__latest.js +3 -3
- package/src/core/fields/__version.js +3 -3
- package/src/core/fields/__versions.js +3 -3
- package/src/core/fields/_id.js +6 -6
- package/src/core/fields/active.js +9 -9
- package/src/core/fields/codeName.js +9 -9
- package/src/core/fields/createdAt.js +17 -17
- package/src/core/fields/default.js +9 -9
- package/src/core/fields/description.js +11 -11
- package/src/core/fields/email.js +9 -9
- package/src/core/fields/enabled.js +9 -9
- package/src/core/fields/expiredAt.js +16 -16
- package/src/core/fields/height.js +11 -11
- package/src/core/fields/ip.js +10 -10
- package/src/core/fields/objectId.js +10 -10
- package/src/core/fields/owner.js +13 -13
- package/src/core/fields/ownerModel.js +11 -11
- package/src/core/fields/price.js +11 -11
- package/src/core/fields/requiredObject.js +10 -10
- package/src/core/fields/session.js +10 -10
- package/src/core/fields/size.js +11 -11
- package/src/core/fields/telephone.js +9 -9
- package/src/core/fields/title.js +15 -15
- package/src/core/fields/updatedAt.js +17 -17
- package/src/core/fields/userId.js +11 -12
- package/src/core/fields/uuid.js +11 -11
- package/src/core/fields/validators/email.js +6 -4
- package/src/core/fields/validators/owner.js +6 -4
- package/src/core/fields/width.js +11 -11
- package/src/domain.js +435 -431
- package/src/env.js +23 -23
- package/src/error.js +20 -23
- package/src/exceptions/db.js +23 -0
- package/src/exceptions/http.js +43 -0
- package/src/fields/index.js +106 -111
- package/src/form/fabric.js +19 -24
- package/src/form/form.js +195 -186
- package/src/form/index.js +2 -2
- package/src/generic/index.js +2 -0
- package/src/generic/logic.js +595 -0
- package/src/generic/route.js +76 -0
- package/src/init/additional.js +7 -7
- package/src/init/app.js +75 -68
- package/src/init/bodyparser.js +14 -14
- package/src/init/compression.js +6 -7
- package/src/init/core.js +12 -12
- package/src/init/cors.js +22 -24
- package/src/init/db/index.js +41 -43
- package/src/init/db/ioredis.js +28 -20
- package/src/init/db/mongoose.js +42 -32
- package/src/init/db/redis.js +59 -48
- package/src/init/env.js +44 -36
- package/src/init/express.js +18 -21
- package/src/init/fileupload.js +8 -10
- package/src/init/http.js +65 -47
- package/src/init/index.js +141 -148
- package/src/init/informer.js +7 -9
- package/src/init/methodoverride.js +4 -6
- package/src/init/middleware.js +23 -26
- package/src/init/modules.js +4 -4
- package/src/init/monitoring.js +8 -8
- package/src/init/rateLimiter.js +53 -45
- package/src/init/routes.js +67 -69
- package/src/init/security.js +37 -33
- package/src/init/sequence.js +111 -107
- package/src/init/sequence.standart.js +54 -56
- package/src/init/sessions/index.js +21 -21
- package/src/init/sessions/mongoose.js +49 -36
- package/src/init/sessions/redis.js +28 -27
- package/src/init/static.js +53 -40
- package/src/init/template.js +17 -17
- package/src/lib.js +230 -200
- package/src/manifest/batchRunner.js +26 -25
- package/src/manifest/initializator/forms.js +24 -24
- package/src/manifest/initializator/index.js +8 -10
- package/src/manifest/initializator/manifests.js +45 -42
- package/src/manifest/initializator/models.js +37 -34
- package/src/manifest/manifest.filter.js +130 -97
- package/src/manifest/manifest.js +103 -77
- package/src/manifest/module.js +350 -360
- package/src/manifest/registrator/fields.js +90 -85
- package/src/manifest/registrator/forms.js +47 -47
- package/src/manifest/registrator/index.js +14 -16
- package/src/manifest/registrator/locales.js +17 -16
- package/src/manifest/registrator/logics.js +66 -64
- package/src/manifest/registrator/models.js +64 -62
- package/src/manifest/registrator/routes.js +171 -132
- package/src/manifest/registrator/routes.ws.js +109 -103
- package/src/manifest/route.js +216 -161
- package/src/model/buildValidator.js +53 -42
- package/src/model/default.js +304 -286
- package/src/model/enrich.js +69 -61
- package/src/model/increment.js +124 -137
- package/src/model/proto.js +179 -148
- package/src/model/routine.js +85 -76
- package/src/model/utils.js +33 -0
- package/src/model/versioning.js +148 -130
- package/src/obsolete.js +12 -8
- package/src/parser.js +29 -22
- package/src/repos.js +29 -31
- package/src/rollup.js +75 -65
- package/src/shell.helpers.js +28 -28
- package/static.js +31 -0
- package/src/generic/router.js +0 -16
- package/src/manifest/module.models.js +0 -0
- package/src/manifest/module.status.js +0 -0
package/src/model/proto.js
CHANGED
|
@@ -1,173 +1,204 @@
|
|
|
1
1
|
/** @module Model/Proto */
|
|
2
2
|
|
|
3
|
-
const enrich = require(
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
static isIgnored(targetModule){
|
|
13
|
-
return targetModule.IGNORE;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
static initOptions(options, targetModule){
|
|
17
|
-
if (!options) {
|
|
18
|
-
options = {
|
|
19
|
-
schemaOptions: {}
|
|
20
|
-
};
|
|
21
|
-
} else {
|
|
22
|
-
if (!options.schemaOptions) {
|
|
23
|
-
options.schemaOptions = {};
|
|
24
|
-
}
|
|
3
|
+
const enrich = require("./enrich"),
|
|
4
|
+
saveVersion = require("./versioning").version,
|
|
5
|
+
{ Schema } = require("mongoose"),
|
|
6
|
+
defaultModel = require("./default"),
|
|
7
|
+
log = require("not-log")(module, "ModelProto");
|
|
8
|
+
|
|
9
|
+
module.exports = class ModelFabricate {
|
|
10
|
+
static isIgnored(targetModule) {
|
|
11
|
+
return targetModule.IGNORE;
|
|
25
12
|
}
|
|
26
|
-
if (targetModule.schemaOptions) {
|
|
27
|
-
options.schemaOptions = targetModule.schemaOptions;
|
|
28
|
-
}
|
|
29
|
-
return options;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
13
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
if (src) {
|
|
39
|
-
for (let j in src) {
|
|
40
|
-
if (typeof src[j].get === 'function' && typeof src[j].set === 'function') {
|
|
41
|
-
dest(j).get(src[j].get).set(src[j].set);
|
|
14
|
+
static initOptions(options, targetModule) {
|
|
15
|
+
if (!options) {
|
|
16
|
+
options = {
|
|
17
|
+
schemaOptions: {},
|
|
18
|
+
};
|
|
42
19
|
} else {
|
|
43
|
-
|
|
20
|
+
if (!options.schemaOptions) {
|
|
21
|
+
options.schemaOptions = {};
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
if (targetModule.schemaOptions) {
|
|
25
|
+
options.schemaOptions = targetModule.schemaOptions;
|
|
44
26
|
}
|
|
45
|
-
|
|
27
|
+
return options;
|
|
46
28
|
}
|
|
47
|
-
}
|
|
48
29
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
Object.assign(schema.methods, targetModule.thisMethods);
|
|
30
|
+
static isNotExtendable(targetModule) {
|
|
31
|
+
return targetModule.keepNotExtended;
|
|
52
32
|
}
|
|
53
33
|
|
|
54
|
-
|
|
55
|
-
|
|
34
|
+
static extendSchemaFrom(src, dest) {
|
|
35
|
+
if (src) {
|
|
36
|
+
for (let j in src) {
|
|
37
|
+
if (
|
|
38
|
+
typeof src[j].get === "function" &&
|
|
39
|
+
typeof src[j].set === "function"
|
|
40
|
+
) {
|
|
41
|
+
dest(j).get(src[j].get).set(src[j].set);
|
|
42
|
+
} else {
|
|
43
|
+
dest(j, src[j]);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
56
47
|
}
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
}
|
|
48
|
+
|
|
49
|
+
static extendBySource(schema, targetModule) {
|
|
50
|
+
if (targetModule.thisMethods) {
|
|
51
|
+
Object.assign(schema.methods, targetModule.thisMethods);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
if (targetModule.thisStatics) {
|
|
55
|
+
Object.assign(schema.statics, targetModule.thisStatics);
|
|
56
|
+
}
|
|
57
|
+
this.extendSchemaFrom(
|
|
58
|
+
targetModule.thisVirtuals,
|
|
59
|
+
schema.virtual.bind(schema)
|
|
60
|
+
);
|
|
61
|
+
this.extendSchemaFrom(targetModule.thisPre, schema.pre.bind(schema));
|
|
62
|
+
this.extendSchemaFrom(targetModule.thisPost, schema.post.bind(schema));
|
|
73
63
|
}
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
64
|
+
|
|
65
|
+
static enrichByFields(targetModule, options) {
|
|
66
|
+
if (targetModule.enrich) {
|
|
67
|
+
if (targetModule.enrich.validators) {
|
|
68
|
+
targetModule.thisSchema = enrich.byFieldsValidators(
|
|
69
|
+
targetModule.thisSchema,
|
|
70
|
+
options
|
|
71
|
+
);
|
|
72
|
+
}
|
|
73
|
+
if (targetModule.enrich.versioning) {
|
|
74
|
+
targetModule.thisSchema = enrich.byFieldsForVersioning(
|
|
75
|
+
targetModule.thisSchema,
|
|
76
|
+
targetModule.thisModelName
|
|
77
|
+
);
|
|
78
|
+
}
|
|
79
|
+
if (targetModule.enrich.increment) {
|
|
80
|
+
targetModule.thisSchema = enrich.byFieldsForIncrement(
|
|
81
|
+
targetModule.thisSchema,
|
|
82
|
+
targetModule.thisModelName
|
|
83
|
+
);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
84
86
|
}
|
|
85
|
-
return fieldsForIndexes;
|
|
86
|
-
}
|
|
87
87
|
|
|
88
|
+
static collectFieldsForIndexes(targetModule) {
|
|
89
|
+
let fieldsForIndexes = [];
|
|
90
|
+
for (let fieldName in targetModule.thisSchema) {
|
|
91
|
+
let field = targetModule.thisSchema[fieldName];
|
|
92
|
+
if (field.unique) {
|
|
93
|
+
fieldsForIndexes.push(fieldName);
|
|
94
|
+
field.unique = false;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return fieldsForIndexes;
|
|
98
|
+
}
|
|
88
99
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
100
|
+
static createIndexesForFields(schema, fieldsForIndexes) {
|
|
101
|
+
for (let fieldName of fieldsForIndexes) {
|
|
102
|
+
let rule = { __closed: 1, __latest: 1, _id: 1 };
|
|
103
|
+
rule[fieldName] = 1;
|
|
104
|
+
schema.index(rule, { unique: true });
|
|
105
|
+
}
|
|
94
106
|
}
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
{
|
|
102
|
-
name: Object.keys(targetModule.enrich.textIndex).join('__')
|
|
107
|
+
|
|
108
|
+
static createIndexesForText(schema, targetModule) {
|
|
109
|
+
if (targetModule.enrich.textIndex) {
|
|
110
|
+
schema.index(targetModule.enrich.textIndex, {
|
|
111
|
+
name: Object.keys(targetModule.enrich.textIndex).join("__"),
|
|
112
|
+
});
|
|
103
113
|
}
|
|
104
|
-
);
|
|
105
114
|
}
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
+
|
|
116
|
+
static markFor(schema, targetModule) {
|
|
117
|
+
if (targetModule.enrich) {
|
|
118
|
+
if (targetModule.enrich.increment) {
|
|
119
|
+
if (
|
|
120
|
+
Object.prototype.hasOwnProperty.call(
|
|
121
|
+
targetModule.enrich,
|
|
122
|
+
"incrementOptions"
|
|
123
|
+
)
|
|
124
|
+
) {
|
|
125
|
+
enrich.markForIncrement(
|
|
126
|
+
schema,
|
|
127
|
+
targetModule.thisModelName,
|
|
128
|
+
targetModule.enrich.incrementOptions
|
|
129
|
+
);
|
|
130
|
+
} else {
|
|
131
|
+
enrich.markForIncrement(schema, targetModule.thisModelName);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
if (targetModule.enrich.versioning) {
|
|
135
|
+
enrich.markForVersioning(schema);
|
|
136
|
+
schema.statics.saveVersion = saveVersion;
|
|
137
|
+
}
|
|
115
138
|
}
|
|
116
|
-
}
|
|
117
|
-
if (targetModule.enrich.versioning) {
|
|
118
|
-
enrich.markForVersioning(schema);
|
|
119
|
-
schema.statics.saveVersion = saveVersion;
|
|
120
|
-
}
|
|
121
139
|
}
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
140
|
+
|
|
141
|
+
static extendSchema(targetModule, options) {
|
|
142
|
+
if (ModelFabricate.isNotExtendable(targetModule)) {
|
|
143
|
+
return new Schema(targetModule.thisSchema, options.schemaOptions);
|
|
144
|
+
} else {
|
|
145
|
+
ModelFabricate.enrichByFields(targetModule, options);
|
|
146
|
+
//collecting information of unique fields, removing unique flag from schema
|
|
147
|
+
let fieldsForIndexes =
|
|
148
|
+
ModelFabricate.collectFieldsForIndexes(targetModule);
|
|
149
|
+
//creating schema for model
|
|
150
|
+
let schema = new Schema(
|
|
151
|
+
targetModule.thisSchema,
|
|
152
|
+
options.schemaOptions
|
|
153
|
+
);
|
|
154
|
+
if (schema) {
|
|
155
|
+
//creating unique indexes
|
|
156
|
+
ModelFabricate.createIndexesForFields(schema, fieldsForIndexes);
|
|
157
|
+
ModelFabricate.createIndexesForText(schema, targetModule);
|
|
158
|
+
//adding specific fields and indetificators
|
|
159
|
+
ModelFabricate.markFor(schema, targetModule);
|
|
160
|
+
//extending schema methods, statics, virtuals by user defined and default content
|
|
161
|
+
ModelFabricate.extendBySource(schema, targetModule);
|
|
162
|
+
ModelFabricate.extendBySource(schema, defaultModel);
|
|
163
|
+
return schema;
|
|
164
|
+
} else {
|
|
165
|
+
return false;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
146
168
|
}
|
|
147
|
-
}
|
|
148
169
|
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
170
|
+
static initMongooseModel(targetModule, schema, mongoose) {
|
|
171
|
+
if (mongoose.modelNames().indexOf(targetModule.thisModelName) === -1) {
|
|
172
|
+
targetModule[targetModule.thisModelName] = mongoose.model(
|
|
173
|
+
targetModule.thisModelName,
|
|
174
|
+
schema
|
|
175
|
+
);
|
|
176
|
+
} else {
|
|
177
|
+
targetModule[targetModule.thisModelName] =
|
|
178
|
+
mongoose.connection.model(targetModule.thisModelName);
|
|
179
|
+
}
|
|
180
|
+
targetModule[targetModule.thisModelName].createIndexes();
|
|
154
181
|
}
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
182
|
+
|
|
183
|
+
static fabricate(targetModule, options, mongoose) {
|
|
184
|
+
if (ModelFabricate.isIgnored(targetModule)) {
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
options = ModelFabricate.initOptions(options, targetModule);
|
|
189
|
+
|
|
190
|
+
const schema = ModelFabricate.extendSchema(targetModule, options);
|
|
191
|
+
if (schema) {
|
|
192
|
+
targetModule.mongooseSchema = schema;
|
|
193
|
+
try {
|
|
194
|
+
ModelFabricate.initMongooseModel(
|
|
195
|
+
targetModule,
|
|
196
|
+
schema,
|
|
197
|
+
mongoose
|
|
198
|
+
);
|
|
199
|
+
} catch (error) {
|
|
200
|
+
log.error(error);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
171
203
|
}
|
|
172
|
-
}
|
|
173
204
|
};
|
package/src/model/routine.js
CHANGED
|
@@ -1,95 +1,104 @@
|
|
|
1
1
|
/** @module Model/Routine */
|
|
2
2
|
|
|
3
|
-
const incrementNext = require(
|
|
3
|
+
const incrementNext = require("./increment");
|
|
4
4
|
|
|
5
|
-
class ModelRoutine{
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
static versioning(model){
|
|
12
|
-
return model.schema.statics.__versioning;
|
|
13
|
-
}
|
|
5
|
+
class ModelRoutine {
|
|
6
|
+
static incremental(model) {
|
|
7
|
+
return model.schema.statics.__incField;
|
|
8
|
+
}
|
|
14
9
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
10
|
+
static versioning(model) {
|
|
11
|
+
return model.schema.statics.__versioning;
|
|
12
|
+
}
|
|
18
13
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
return await model.saveVersion(item._id);
|
|
23
|
-
}
|
|
14
|
+
static addWithoutVersion(model, data) {
|
|
15
|
+
return new model(data).save();
|
|
16
|
+
}
|
|
24
17
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
if (ModelRoutine.versioning(model)) {
|
|
30
|
-
return await ModelRoutine.addWithVersion(model, data);
|
|
31
|
-
} else {
|
|
32
|
-
return await ModelRoutine.addWithoutVersion(model, data);
|
|
33
|
-
}
|
|
34
|
-
} else {
|
|
35
|
-
if (ModelRoutine.versioning(model)) {
|
|
36
|
-
return await ModelRoutine.addWithVersion(model, data);
|
|
37
|
-
} else {
|
|
38
|
-
return await ModelRoutine.addWithoutVersion(model, data);
|
|
39
|
-
}
|
|
18
|
+
static async addWithVersion(model, data) {
|
|
19
|
+
data.__latest = true;
|
|
20
|
+
const item = await new model(data).save();
|
|
21
|
+
return await model.saveVersion(item._id);
|
|
40
22
|
}
|
|
41
|
-
}
|
|
42
23
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
24
|
+
static async add(model, data) {
|
|
25
|
+
if (ModelRoutine.incremental(model)) {
|
|
26
|
+
const modelID = await incrementNext.next(
|
|
27
|
+
model.__incModel,
|
|
28
|
+
model.__incFilter,
|
|
29
|
+
data
|
|
30
|
+
);
|
|
31
|
+
data[model.__incField] = modelID;
|
|
32
|
+
if (ModelRoutine.versioning(model)) {
|
|
33
|
+
return await ModelRoutine.addWithVersion(model, data);
|
|
34
|
+
} else {
|
|
35
|
+
return await ModelRoutine.addWithoutVersion(model, data);
|
|
36
|
+
}
|
|
37
|
+
} else {
|
|
38
|
+
if (ModelRoutine.versioning(model)) {
|
|
39
|
+
return await ModelRoutine.addWithVersion(model, data);
|
|
40
|
+
} else {
|
|
41
|
+
return await ModelRoutine.addWithoutVersion(model, data);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
48
44
|
}
|
|
49
|
-
}
|
|
50
45
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
46
|
+
static async update(model, filter, data) {
|
|
47
|
+
if (ModelRoutine.versioning(model)) {
|
|
48
|
+
return ModelRoutine.updateWithVersion(model, filter, data);
|
|
49
|
+
} else {
|
|
50
|
+
return ModelRoutine.updateWithoutVersion(model, filter, data);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
58
53
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
54
|
+
static updateWithoutVersion(model, filter, data) {
|
|
55
|
+
return model
|
|
56
|
+
.findOneAndUpdate(filter, data, {
|
|
57
|
+
returnOriginal: false,
|
|
58
|
+
new: true,
|
|
59
|
+
})
|
|
60
|
+
.exec();
|
|
61
|
+
}
|
|
65
62
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
63
|
+
static async updateWithVersion(model, filter, data) {
|
|
64
|
+
filter.__latest = true;
|
|
65
|
+
filter.__closed = false;
|
|
66
|
+
const item = await model
|
|
67
|
+
.findOneAndUpdate(filter, data, { returnOriginal: false })
|
|
68
|
+
.exec();
|
|
69
|
+
return model.saveVersion(item._id);
|
|
71
70
|
}
|
|
72
|
-
}
|
|
73
71
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
72
|
+
static async updateMany(model, filter, data) {
|
|
73
|
+
if (ModelRoutine.versioning(model)) {
|
|
74
|
+
return ModelRoutine.updateManyWithVersion(model, filter, data);
|
|
75
|
+
} else {
|
|
76
|
+
return ModelRoutine.updateManyWithoutVersion(model, filter, data);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
80
79
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
__latest: true,
|
|
85
|
-
...filter
|
|
86
|
-
}).exec();
|
|
87
|
-
return await Promise.allSettled(list.map((item) => {
|
|
88
|
-
return ModelRoutine.updateWithVersion(model, {_id: item._id }, data);
|
|
89
|
-
}));
|
|
90
|
-
}
|
|
80
|
+
static updateManyWithoutVersion(model, filter, data) {
|
|
81
|
+
return model.updateMany(filter, data);
|
|
82
|
+
}
|
|
91
83
|
|
|
84
|
+
static async updateManyWithVersion(model, filter, data) {
|
|
85
|
+
const list = await model
|
|
86
|
+
.find({
|
|
87
|
+
__closed: false,
|
|
88
|
+
__latest: true,
|
|
89
|
+
...filter,
|
|
90
|
+
})
|
|
91
|
+
.exec();
|
|
92
|
+
return await Promise.allSettled(
|
|
93
|
+
list.map((item) => {
|
|
94
|
+
return ModelRoutine.updateWithVersion(
|
|
95
|
+
model,
|
|
96
|
+
{ _id: item._id },
|
|
97
|
+
data
|
|
98
|
+
);
|
|
99
|
+
})
|
|
100
|
+
);
|
|
101
|
+
}
|
|
92
102
|
}
|
|
93
103
|
|
|
94
|
-
|
|
95
104
|
module.exports = ModelRoutine;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* checking result of modification queries to ensure that changes were made
|
|
3
|
+
*/
|
|
4
|
+
function updateResponseSuccess(res, count = 1) {
|
|
5
|
+
if (res) {
|
|
6
|
+
const responseList = Object.keys(res);
|
|
7
|
+
if (responseList.includes("ok")) {
|
|
8
|
+
return res.ok === 1 && res.n === count;
|
|
9
|
+
} else {
|
|
10
|
+
return res.matchedCount === count && res.modifiedCount === count;
|
|
11
|
+
}
|
|
12
|
+
} else {
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
module.exports.updateResponseSuccess = updateResponseSuccess;
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* checking result of modification queries to ensure that changes were made
|
|
20
|
+
*/
|
|
21
|
+
function deleteResponseSuccess(res, count = 1) {
|
|
22
|
+
if (res) {
|
|
23
|
+
const responseList = Object.keys(res);
|
|
24
|
+
if (responseList.includes("ok")) {
|
|
25
|
+
return res.ok === 1 && res.n === count;
|
|
26
|
+
} else {
|
|
27
|
+
return res.deletedCount === count;
|
|
28
|
+
}
|
|
29
|
+
} else {
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
module.exports.deleteResponseSuccess = deleteResponseSuccess;
|