@nextage/nx-frame-be 1.0.1

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 (119) hide show
  1. package/README.md +1 -0
  2. package/README.md.old +45 -0
  3. package/build/app.d.ts +0 -0
  4. package/build/app.js +1 -0
  5. package/build/aws/aws-cluster-manager.d.ts +28 -0
  6. package/build/aws/aws-cluster-manager.js +105 -0
  7. package/build/aws/aws-email-manager.d.ts +24 -0
  8. package/build/aws/aws-email-manager.js +57 -0
  9. package/build/aws/aws-queue-manager.d.ts +37 -0
  10. package/build/aws/aws-queue-manager.js +100 -0
  11. package/build/aws/aws.interfaces.d.ts +39 -0
  12. package/build/aws/aws.interfaces.js +2 -0
  13. package/build/aws/index.d.ts +4 -0
  14. package/build/aws/index.js +20 -0
  15. package/build/common/base/__test__/base.model.test.d.ts +1 -0
  16. package/build/common/base/__test__/base.model.test.js +283 -0
  17. package/build/common/base/base.controller.d.ts +124 -0
  18. package/build/common/base/base.controller.js +134 -0
  19. package/build/common/base/base.interfaces.d.ts +81 -0
  20. package/build/common/base/base.interfaces.js +2 -0
  21. package/build/common/base/base.model.d.ts +384 -0
  22. package/build/common/base/base.model.js +730 -0
  23. package/build/common/base/folded.model.d.ts +41 -0
  24. package/build/common/base/folded.model.js +215 -0
  25. package/build/common/base/mongo-utils.d.ts +122 -0
  26. package/build/common/base/mongo-utils.js +242 -0
  27. package/build/common/base/mongo.types.d.ts +20 -0
  28. package/build/common/base/mongo.types.js +2 -0
  29. package/build/common/base/sql-utils.d.ts +20 -0
  30. package/build/common/base/sql-utils.js +69 -0
  31. package/build/common/constants.d.ts +27 -0
  32. package/build/common/constants.js +70 -0
  33. package/build/common/crypto/crypto.classes.d.ts +100 -0
  34. package/build/common/crypto/crypto.classes.js +146 -0
  35. package/build/common/crypto/crypto.constants.d.ts +68 -0
  36. package/build/common/crypto/crypto.constants.js +57 -0
  37. package/build/common/crypto/crypto.error.d.ts +4 -0
  38. package/build/common/crypto/crypto.error.js +10 -0
  39. package/build/common/crypto/crypto.interfaces.d.ts +46 -0
  40. package/build/common/crypto/crypto.interfaces.js +2 -0
  41. package/build/common/crypto/crypto.utils.d.ts +139 -0
  42. package/build/common/crypto/crypto.utils.js +380 -0
  43. package/build/common/crypto/index.d.ts +3 -0
  44. package/build/common/crypto/index.js +19 -0
  45. package/build/common/enums.d.ts +61 -0
  46. package/build/common/enums.js +75 -0
  47. package/build/common/errors.d.ts +13 -0
  48. package/build/common/errors.js +24 -0
  49. package/build/common/express/express.interfaces.d.ts +20 -0
  50. package/build/common/express/express.interfaces.js +2 -0
  51. package/build/common/express/express.utils.d.ts +31 -0
  52. package/build/common/express/express.utils.js +85 -0
  53. package/build/common/express/index.d.ts +2 -0
  54. package/build/common/express/index.js +18 -0
  55. package/build/common/graphql/__test__/generator.schema.test.d.ts +1 -0
  56. package/build/common/graphql/__test__/generator.schema.test.js +391 -0
  57. package/build/common/graphql/directives.d.ts +18 -0
  58. package/build/common/graphql/directives.js +56 -0
  59. package/build/common/graphql/generator copy.d.ts +41 -0
  60. package/build/common/graphql/generator copy.js +385 -0
  61. package/build/common/graphql/generator.d.ts +42 -0
  62. package/build/common/graphql/generator.js +385 -0
  63. package/build/common/graphql/index.d.ts +4 -0
  64. package/build/common/graphql/index.js +21 -0
  65. package/build/common/graphql/interfaces.d.ts +67 -0
  66. package/build/common/graphql/interfaces.js +2 -0
  67. package/build/common/graphql/loader.d.ts +22 -0
  68. package/build/common/graphql/loader.js +186 -0
  69. package/build/common/graphql/scalars/index.d.ts +10 -0
  70. package/build/common/graphql/scalars/index.js +6 -0
  71. package/build/common/graphql/scalars/resolvers.d.ts +8 -0
  72. package/build/common/graphql/scalars/resolvers.js +71 -0
  73. package/build/common/graphql/scalars/schema.d.ts +1 -0
  74. package/build/common/graphql/scalars/schema.js +12 -0
  75. package/build/common/graphql/types/index.d.ts +3 -0
  76. package/build/common/graphql/types/index.js +6 -0
  77. package/build/common/graphql/types/schema.d.ts +1 -0
  78. package/build/common/graphql/types/schema.js +98 -0
  79. package/build/common/graphql/utils.d.ts +18 -0
  80. package/build/common/graphql/utils.js +40 -0
  81. package/build/common/grid-fs/gridfs-base.model.d.ts +53 -0
  82. package/build/common/grid-fs/gridfs-base.model.js +95 -0
  83. package/build/common/grid-fs/gridfs.interfaces.d.ts +41 -0
  84. package/build/common/grid-fs/gridfs.interfaces.js +2 -0
  85. package/build/common/index.d.ts +10 -0
  86. package/build/common/index.js +32 -0
  87. package/build/common/interfaces.d.ts +26 -0
  88. package/build/common/interfaces.js +10 -0
  89. package/build/common/manager/bulk-manager.d.ts +59 -0
  90. package/build/common/manager/bulk-manager.js +103 -0
  91. package/build/common/manager/crypto-manager.d.ts +88 -0
  92. package/build/common/manager/crypto-manager.js +200 -0
  93. package/build/common/manager/index.d.ts +5 -0
  94. package/build/common/manager/index.js +21 -0
  95. package/build/common/manager/pubsub-manager.d.ts +20 -0
  96. package/build/common/manager/pubsub-manager.js +38 -0
  97. package/build/common/manager/shutdown-manager.d.ts +27 -0
  98. package/build/common/manager/shutdown-manager.js +118 -0
  99. package/build/common/manager/socket-io-cli-manager.d.ts +53 -0
  100. package/build/common/manager/socket-io-cli-manager.js +91 -0
  101. package/build/common/manager/tunnel-manager.d.ts +28 -0
  102. package/build/common/manager/tunnel-manager.js +49 -0
  103. package/build/common/models/coded-entity.controller.d.ts +5 -0
  104. package/build/common/models/coded-entity.controller.js +9 -0
  105. package/build/common/models/coded-entity.model.d.ts +25 -0
  106. package/build/common/models/coded-entity.model.js +51 -0
  107. package/build/common/models/user.model.d.ts +56 -0
  108. package/build/common/models/user.model.js +72 -0
  109. package/build/common/types.d.ts +136 -0
  110. package/build/common/types.js +16 -0
  111. package/build/common/utils.d.ts +552 -0
  112. package/build/common/utils.js +1100 -0
  113. package/build/index.d.ts +2 -0
  114. package/build/index.js +18 -0
  115. package/build/test/env.d.ts +0 -0
  116. package/build/test/env.js +5 -0
  117. package/build/test/setup.d.ts +6 -0
  118. package/build/test/setup.js +59 -0
  119. package/package.json +90 -0
@@ -0,0 +1,283 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ const utils_1 = require("../../utils");
13
+ const coded_entity_model_1 = require("../../models/coded-entity.model");
14
+ // interface CodedEntityAttrs {
15
+ // id? : string;
16
+ // code? : string;
17
+ // name? : string;
18
+ // data? : { items: NxObject[] };
19
+ // version?: number;
20
+ // }
21
+ // interface CodedEntityDoc extends BaseMongoDoc {
22
+ // code : string;
23
+ // name : string;
24
+ // data : { items: NxObject[] };
25
+ // version: number;
26
+ // }
27
+ // interface CodedEntityModel extends BaseMongoModel<CodedEntityAttrs, CodedEntityDoc> {}
28
+ // class CodedEntity extends BaseModel<CodedEntityAttrs, CodedEntityDoc, CodedEntityModel> {}
29
+ // mock spy function
30
+ jest.spyOn(coded_entity_model_1.CodedEntity.prototype, 'beforeCreate').mockImplementation((item, {}) => Promise.resolve(item));
31
+ jest.spyOn(coded_entity_model_1.CodedEntity.prototype, 'afterCreate').mockImplementation((ceItem, {}) => Promise.resolve(ceItem));
32
+ jest.spyOn(coded_entity_model_1.CodedEntity.prototype, 'beforeUpdate').mockImplementation((item, {}) => Promise.resolve(item));
33
+ jest.spyOn(coded_entity_model_1.CodedEntity.prototype, 'afterUpdate').mockImplementation((ceItem, {}) => Promise.resolve(ceItem));
34
+ jest.spyOn(coded_entity_model_1.CodedEntity.prototype, 'beforeCopy').mockImplementation((item, {}) => Promise.resolve(item));
35
+ jest.spyOn(coded_entity_model_1.CodedEntity.prototype, 'afterCopy').mockImplementation((item, {}) => Promise.resolve(item));
36
+ jest.spyOn(coded_entity_model_1.CodedEntity.prototype, 'beforeRemove').mockImplementation((id, {}) => Promise.resolve(id));
37
+ jest.spyOn(coded_entity_model_1.CodedEntity.prototype, 'afterRemove').mockImplementation((id, {}) => Promise.resolve(id));
38
+ jest.spyOn(coded_entity_model_1.CodedEntity.prototype, 'publishCRUDEvent').mockImplementation((evt) => { });
39
+ // let ceModel: CodedEntity | null;
40
+ // beforeAll(async () => {
41
+ // const schema = {
42
+ // code: {
43
+ // type: String,
44
+ // required: true,
45
+ // },
46
+ // name: {
47
+ // type: String,
48
+ // required: true,
49
+ // },
50
+ // data: {
51
+ // type: mongoose.SchemaTypes.Mixed,
52
+ // required: true,
53
+ // }
54
+ // };
55
+ // const params = {
56
+ // name : 'CodedEntity',
57
+ // modelName : 'CodedEntity',
58
+ // collection: 'codedEntity',
59
+ // classDef : CodedEntity,
60
+ // mergeSchema: false,
61
+ // modelParams: { sort: { name: 1 }, CRUDEvents: true },
62
+ // schema
63
+ // };
64
+ // ceModel = createModel<CodedEntityAttrs, CodedEntityDoc, CodedEntityModel, CodedEntity>(params, false);
65
+ // });
66
+ const createItem = () => __awaiter(void 0, void 0, void 0, function* () {
67
+ const item = {
68
+ code: (0, utils_1.uuid)(),
69
+ name: 'Test',
70
+ data: {
71
+ items: [
72
+ { id: (0, utils_1.uuid)(), value: Math.random() },
73
+ { id: (0, utils_1.uuid)(), value: Math.random() },
74
+ { id: (0, utils_1.uuid)(), value: Math.random() }
75
+ ]
76
+ }
77
+ };
78
+ const ceItem = yield (coded_entity_model_1.ceModel === null || coded_entity_model_1.ceModel === void 0 ? void 0 : coded_entity_model_1.ceModel.create(item, {}));
79
+ return { ceItem, item };
80
+ });
81
+ it('list collection Items', () => __awaiter(void 0, void 0, void 0, function* () {
82
+ const { ceItem: ce1 } = yield createItem();
83
+ const { ceItem: ce2 } = yield createItem();
84
+ const { ceItem: ce3 } = yield createItem();
85
+ const items = (yield (coded_entity_model_1.ceModel === null || coded_entity_model_1.ceModel === void 0 ? void 0 : coded_entity_model_1.ceModel.list())) || [];
86
+ expect(items.length).toEqual(3);
87
+ expect(items[0].code).toEqual(ce1 === null || ce1 === void 0 ? void 0 : ce1.code);
88
+ expect(items[1].code).toEqual(ce2 === null || ce2 === void 0 ? void 0 : ce2.code);
89
+ expect(items[2].code).toEqual(ce3 === null || ce3 === void 0 ? void 0 : ce3.code);
90
+ }));
91
+ it('counts collection Items', () => __awaiter(void 0, void 0, void 0, function* () {
92
+ yield createItem();
93
+ yield createItem();
94
+ yield createItem();
95
+ yield createItem();
96
+ const count = yield (coded_entity_model_1.ceModel === null || coded_entity_model_1.ceModel === void 0 ? void 0 : coded_entity_model_1.ceModel.count());
97
+ expect(count).toEqual(4);
98
+ }));
99
+ it('gets collection item by id', () => __awaiter(void 0, void 0, void 0, function* () {
100
+ const { ceItem: ce1 } = yield createItem();
101
+ const { ceItem: ce2 } = yield createItem();
102
+ const { ceItem: ce3 } = yield createItem();
103
+ const foundItem = yield (coded_entity_model_1.ceModel === null || coded_entity_model_1.ceModel === void 0 ? void 0 : coded_entity_model_1.ceModel.get(ce2 === null || ce2 === void 0 ? void 0 : ce2.id));
104
+ expect(foundItem.code).toEqual(ce2 === null || ce2 === void 0 ? void 0 : ce2.code);
105
+ }));
106
+ it('finds collection item by code', () => __awaiter(void 0, void 0, void 0, function* () {
107
+ const { ceItem: ce1 } = yield createItem();
108
+ const { ceItem: ce2 } = yield createItem();
109
+ const { ceItem: ce3 } = yield createItem();
110
+ const foundItem = yield (coded_entity_model_1.ceModel === null || coded_entity_model_1.ceModel === void 0 ? void 0 : coded_entity_model_1.ceModel.findOne({ code: ce2 === null || ce2 === void 0 ? void 0 : ce2.code }));
111
+ expect(foundItem.code).toEqual(ce2 === null || ce2 === void 0 ? void 0 : ce2.code);
112
+ }));
113
+ it('creates a new item', () => __awaiter(void 0, void 0, void 0, function* () {
114
+ const { ceItem, item } = yield createItem();
115
+ expect(coded_entity_model_1.ceModel === null || coded_entity_model_1.ceModel === void 0 ? void 0 : coded_entity_model_1.ceModel.beforeCreate).toHaveBeenCalled();
116
+ expect(coded_entity_model_1.ceModel === null || coded_entity_model_1.ceModel === void 0 ? void 0 : coded_entity_model_1.ceModel.afterCreate).toHaveBeenCalled();
117
+ expect(coded_entity_model_1.ceModel === null || coded_entity_model_1.ceModel === void 0 ? void 0 : coded_entity_model_1.ceModel.publishCRUDEvent).toHaveBeenCalled();
118
+ expect(ceItem.code).toEqual(item.code);
119
+ expect(ceItem.name).toEqual(item.name);
120
+ }));
121
+ it('updates item attribute', () => __awaiter(void 0, void 0, void 0, function* () {
122
+ const { ceItem } = yield createItem();
123
+ const newAttrs = { name: 'UPDATED' };
124
+ const savedItem = yield (coded_entity_model_1.ceModel === null || coded_entity_model_1.ceModel === void 0 ? void 0 : coded_entity_model_1.ceModel.update(ceItem.id, newAttrs, {}));
125
+ expect(coded_entity_model_1.ceModel === null || coded_entity_model_1.ceModel === void 0 ? void 0 : coded_entity_model_1.ceModel.beforeUpdate).toHaveBeenCalled();
126
+ expect(coded_entity_model_1.ceModel === null || coded_entity_model_1.ceModel === void 0 ? void 0 : coded_entity_model_1.ceModel.afterUpdate).toHaveBeenCalled();
127
+ expect(coded_entity_model_1.ceModel === null || coded_entity_model_1.ceModel === void 0 ? void 0 : coded_entity_model_1.ceModel.publishCRUDEvent).toHaveBeenCalled();
128
+ expect(savedItem.code).toEqual(ceItem.code);
129
+ expect(savedItem.version).toEqual(ceItem.version + 1);
130
+ expect(savedItem.name).toEqual(newAttrs.name);
131
+ }));
132
+ it('copies an item', () => __awaiter(void 0, void 0, void 0, function* () {
133
+ const { ceItem } = yield createItem();
134
+ const newAttrs = { name: `${ceItem.name}_updated` };
135
+ const savedItem = yield (coded_entity_model_1.ceModel === null || coded_entity_model_1.ceModel === void 0 ? void 0 : coded_entity_model_1.ceModel.copy(ceItem.id, newAttrs, {}));
136
+ expect(coded_entity_model_1.ceModel === null || coded_entity_model_1.ceModel === void 0 ? void 0 : coded_entity_model_1.ceModel.beforeCopy).toHaveBeenCalled();
137
+ expect(coded_entity_model_1.ceModel === null || coded_entity_model_1.ceModel === void 0 ? void 0 : coded_entity_model_1.ceModel.afterCopy).toHaveBeenCalled();
138
+ expect(coded_entity_model_1.ceModel === null || coded_entity_model_1.ceModel === void 0 ? void 0 : coded_entity_model_1.ceModel.publishCRUDEvent).toHaveBeenCalled();
139
+ expect(savedItem.id).not.toEqual(ceItem.id);
140
+ expect(savedItem.code).toEqual(ceItem.code);
141
+ expect(savedItem.name).not.toEqual(ceItem.name);
142
+ expect(savedItem.name).toEqual(newAttrs.name);
143
+ expect(savedItem.version).toEqual(ceItem.version);
144
+ const ceList = yield coded_entity_model_1.ceModel.list();
145
+ expect(ceList.length).toEqual(2);
146
+ expect(ceList[0].id).toEqual(ceItem.id);
147
+ expect(ceList[1].id).toContain(savedItem === null || savedItem === void 0 ? void 0 : savedItem.id);
148
+ }));
149
+ it('removes item', () => __awaiter(void 0, void 0, void 0, function* () {
150
+ const { ceItem: ce1 } = yield createItem();
151
+ const { ceItem: ce2 } = yield createItem();
152
+ const { ceItem: ce3 } = yield createItem();
153
+ let foundItem = yield (coded_entity_model_1.ceModel === null || coded_entity_model_1.ceModel === void 0 ? void 0 : coded_entity_model_1.ceModel.get(ce2 === null || ce2 === void 0 ? void 0 : ce2.id));
154
+ expect(foundItem.code).toEqual(ce2 === null || ce2 === void 0 ? void 0 : ce2.code);
155
+ yield (coded_entity_model_1.ceModel === null || coded_entity_model_1.ceModel === void 0 ? void 0 : coded_entity_model_1.ceModel.remove(ce2 === null || ce2 === void 0 ? void 0 : ce2.id, {}));
156
+ expect(coded_entity_model_1.ceModel === null || coded_entity_model_1.ceModel === void 0 ? void 0 : coded_entity_model_1.ceModel.beforeRemove).toHaveBeenCalled();
157
+ expect(coded_entity_model_1.ceModel === null || coded_entity_model_1.ceModel === void 0 ? void 0 : coded_entity_model_1.ceModel.afterRemove).toHaveBeenCalled();
158
+ expect(coded_entity_model_1.ceModel === null || coded_entity_model_1.ceModel === void 0 ? void 0 : coded_entity_model_1.ceModel.publishCRUDEvent).toHaveBeenCalled();
159
+ foundItem = yield (coded_entity_model_1.ceModel === null || coded_entity_model_1.ceModel === void 0 ? void 0 : coded_entity_model_1.ceModel.get(ce2 === null || ce2 === void 0 ? void 0 : ce2.id));
160
+ const items = (yield (coded_entity_model_1.ceModel === null || coded_entity_model_1.ceModel === void 0 ? void 0 : coded_entity_model_1.ceModel.list())) || [];
161
+ expect(foundItem).toBeNull();
162
+ expect(items.length).toEqual(2);
163
+ expect(items.map(i => i.code)).not.toContainEqual(ce2.code);
164
+ }));
165
+ it('inserts bulk items', () => __awaiter(void 0, void 0, void 0, function* () {
166
+ var _a, _b, _c, _d, _e, _f;
167
+ const items = [
168
+ { code: (0, utils_1.uuid)(), name: 'Test 1', data: { items: [] } },
169
+ { code: (0, utils_1.uuid)(), name: 'Test 2', data: { items: [] } },
170
+ { code: (0, utils_1.uuid)(), name: 'Test 3', data: { items: [] } }
171
+ ];
172
+ const createdItems = (yield (coded_entity_model_1.ceModel === null || coded_entity_model_1.ceModel === void 0 ? void 0 : coded_entity_model_1.ceModel.bulkCreate(items, {}))) || [];
173
+ const foundtems = (yield (coded_entity_model_1.ceModel === null || coded_entity_model_1.ceModel === void 0 ? void 0 : coded_entity_model_1.ceModel.list())) || [];
174
+ expect(createdItems.length).toEqual(3);
175
+ expect(foundtems.length).toEqual(3);
176
+ expect((_a = items[0]) === null || _a === void 0 ? void 0 : _a.code).toEqual(foundtems[0].code);
177
+ expect((_b = items[1]) === null || _b === void 0 ? void 0 : _b.code).toEqual(foundtems[1].code);
178
+ expect((_c = items[2]) === null || _c === void 0 ? void 0 : _c.code).toEqual(foundtems[2].code);
179
+ expect((_d = createdItems[0]) === null || _d === void 0 ? void 0 : _d.id).toEqual(foundtems[0].id);
180
+ expect((_e = createdItems[1]) === null || _e === void 0 ? void 0 : _e.id).toEqual(foundtems[1].id);
181
+ expect((_f = createdItems[2]) === null || _f === void 0 ? void 0 : _f.id).toEqual(foundtems[2].id);
182
+ }));
183
+ it('updates bulk items', () => __awaiter(void 0, void 0, void 0, function* () {
184
+ const { ceItem: ce1 } = yield createItem();
185
+ const { ceItem: ce2 } = yield createItem();
186
+ const { ceItem: ce3 } = yield createItem();
187
+ const updatedName1 = `${ce1 === null || ce1 === void 0 ? void 0 : ce1.name} updated`;
188
+ const updatedName2 = `${ce2 === null || ce2 === void 0 ? void 0 : ce2.name} updated`;
189
+ const updatedName3 = `${ce3 === null || ce3 === void 0 ? void 0 : ce3.name} updated`;
190
+ const updatedItems = (yield (coded_entity_model_1.ceModel === null || coded_entity_model_1.ceModel === void 0 ? void 0 : coded_entity_model_1.ceModel.bulkUpdate([ce1 === null || ce1 === void 0 ? void 0 : ce1.id, ce3 === null || ce3 === void 0 ? void 0 : ce3.id], [{ name: updatedName1 }, { name: updatedName3 }], {}))) || [];
191
+ const foundtems = (yield (coded_entity_model_1.ceModel === null || coded_entity_model_1.ceModel === void 0 ? void 0 : coded_entity_model_1.ceModel.list({}, {}, { sort: { _id: 1 } }))) || [];
192
+ expect(updatedItems.length).toEqual(2);
193
+ expect(foundtems.length).toEqual(3);
194
+ expect(ce1 === null || ce1 === void 0 ? void 0 : ce1.code).toEqual(foundtems[0].code);
195
+ expect(ce2 === null || ce2 === void 0 ? void 0 : ce2.code).toEqual(foundtems[1].code);
196
+ expect(ce3 === null || ce3 === void 0 ? void 0 : ce3.code).toEqual(foundtems[2].code);
197
+ expect(foundtems[0].name).toEqual(updatedName1);
198
+ expect(foundtems[1].name).toEqual(ce2 === null || ce2 === void 0 ? void 0 : ce2.name);
199
+ expect(foundtems[2].name).toEqual(updatedName3);
200
+ expect(foundtems[0].version).toEqual(ce1.version + 1);
201
+ expect(foundtems[1].version).toEqual(ce2.version);
202
+ expect(foundtems[2].version).toEqual(ce3.version + 1);
203
+ }));
204
+ it('adds an array item', () => __awaiter(void 0, void 0, void 0, function* () {
205
+ var _g, _h, _j, _k;
206
+ const { ceItem: ce1 } = yield createItem();
207
+ const updateData = {
208
+ arrayPath: 'data.items',
209
+ item: { id: (0, utils_1.uuid)(), value: 100 }
210
+ };
211
+ const updatedItem = yield (coded_entity_model_1.ceModel === null || coded_entity_model_1.ceModel === void 0 ? void 0 : coded_entity_model_1.ceModel.addArrayItem(ce1 === null || ce1 === void 0 ? void 0 : ce1.id, updateData, {}, {}));
212
+ const itemsLength = ((_h = (_g = updatedItem === null || updatedItem === void 0 ? void 0 : updatedItem.data) === null || _g === void 0 ? void 0 : _g.items) === null || _h === void 0 ? void 0 : _h.length) || 0;
213
+ expect(itemsLength).toEqual(((ce1 === null || ce1 === void 0 ? void 0 : ce1.data.items) || []).length + 1);
214
+ expect((_j = updatedItem === null || updatedItem === void 0 ? void 0 : updatedItem.data) === null || _j === void 0 ? void 0 : _j.items[itemsLength - 1].id).toEqual(updateData.item.id);
215
+ expect((_k = updatedItem === null || updatedItem === void 0 ? void 0 : updatedItem.data) === null || _k === void 0 ? void 0 : _k.items[itemsLength - 1].value).toEqual(updateData.item.value);
216
+ }));
217
+ it('updates an array item', () => __awaiter(void 0, void 0, void 0, function* () {
218
+ var _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1;
219
+ const { ceItem: ce1 } = yield createItem();
220
+ const updateData = {
221
+ arrayPath: 'data.items',
222
+ arrayFilter: { id: ce1 === null || ce1 === void 0 ? void 0 : ce1.data.items[1].id },
223
+ item: { id: ce1 === null || ce1 === void 0 ? void 0 : ce1.data.items[1].id, value: 50, newattr: 'AAA' }
224
+ };
225
+ let updatedItem = yield (coded_entity_model_1.ceModel === null || coded_entity_model_1.ceModel === void 0 ? void 0 : coded_entity_model_1.ceModel.updateArrayItem(ce1 === null || ce1 === void 0 ? void 0 : ce1.id, updateData, {}, {}));
226
+ let itemsLength = ((_m = (_l = updatedItem === null || updatedItem === void 0 ? void 0 : updatedItem.data) === null || _l === void 0 ? void 0 : _l.items) === null || _m === void 0 ? void 0 : _m.length) || 0;
227
+ expect(itemsLength).toEqual(((ce1 === null || ce1 === void 0 ? void 0 : ce1.data.items) || []).length);
228
+ expect((_o = updatedItem === null || updatedItem === void 0 ? void 0 : updatedItem.data) === null || _o === void 0 ? void 0 : _o.items[1].id).toEqual(ce1 === null || ce1 === void 0 ? void 0 : ce1.data.items[1].id);
229
+ expect((_p = updatedItem === null || updatedItem === void 0 ? void 0 : updatedItem.data) === null || _p === void 0 ? void 0 : _p.items[1].id).toEqual(updateData.item.id);
230
+ expect((_q = updatedItem === null || updatedItem === void 0 ? void 0 : updatedItem.data) === null || _q === void 0 ? void 0 : _q.items[1].value).toEqual(updateData.item.value);
231
+ expect((_r = updatedItem === null || updatedItem === void 0 ? void 0 : updatedItem.data) === null || _r === void 0 ? void 0 : _r.items[1].newattr).toEqual(updateData.item.newattr);
232
+ const updateData2 = {
233
+ arrayPath: 'data.items',
234
+ partial: true,
235
+ arrayFilter: { id: ce1 === null || ce1 === void 0 ? void 0 : ce1.data.items[1].id },
236
+ item: { value: 51, newattr: 'AAA' }
237
+ };
238
+ updatedItem = yield (coded_entity_model_1.ceModel === null || coded_entity_model_1.ceModel === void 0 ? void 0 : coded_entity_model_1.ceModel.updateArrayItem(ce1 === null || ce1 === void 0 ? void 0 : ce1.id, updateData2, {}, {}));
239
+ itemsLength = ((_t = (_s = updatedItem === null || updatedItem === void 0 ? void 0 : updatedItem.data) === null || _s === void 0 ? void 0 : _s.items) === null || _t === void 0 ? void 0 : _t.length) || 0;
240
+ expect(itemsLength).toEqual(((ce1 === null || ce1 === void 0 ? void 0 : ce1.data.items) || []).length);
241
+ expect((_u = updatedItem === null || updatedItem === void 0 ? void 0 : updatedItem.data) === null || _u === void 0 ? void 0 : _u.items[1].id).toEqual(ce1 === null || ce1 === void 0 ? void 0 : ce1.data.items[1].id);
242
+ expect((_v = updatedItem === null || updatedItem === void 0 ? void 0 : updatedItem.data) === null || _v === void 0 ? void 0 : _v.items[1].value).toEqual(updateData2.item.value);
243
+ expect((_w = updatedItem === null || updatedItem === void 0 ? void 0 : updatedItem.data) === null || _w === void 0 ? void 0 : _w.items[1].newattr).toEqual(updateData2.item.newattr);
244
+ const updateData3 = {
245
+ arrayPath: 'data.items',
246
+ updateAttr: 'newattr',
247
+ arrayFilter: { id: ce1 === null || ce1 === void 0 ? void 0 : ce1.data.items[1].id },
248
+ item: { value: 55, newattr: 'BBB' }
249
+ };
250
+ updatedItem = yield (coded_entity_model_1.ceModel === null || coded_entity_model_1.ceModel === void 0 ? void 0 : coded_entity_model_1.ceModel.updateArrayItem(ce1 === null || ce1 === void 0 ? void 0 : ce1.id, updateData3, {}, {}));
251
+ itemsLength = ((_y = (_x = updatedItem === null || updatedItem === void 0 ? void 0 : updatedItem.data) === null || _x === void 0 ? void 0 : _x.items) === null || _y === void 0 ? void 0 : _y.length) || 0;
252
+ expect(itemsLength).toEqual(((ce1 === null || ce1 === void 0 ? void 0 : ce1.data.items) || []).length);
253
+ expect((_z = updatedItem === null || updatedItem === void 0 ? void 0 : updatedItem.data) === null || _z === void 0 ? void 0 : _z.items[1].id).toEqual(ce1 === null || ce1 === void 0 ? void 0 : ce1.data.items[1].id);
254
+ expect((_0 = updatedItem === null || updatedItem === void 0 ? void 0 : updatedItem.data) === null || _0 === void 0 ? void 0 : _0.items[1].value).toEqual(updateData2.item.value);
255
+ expect((_1 = updatedItem === null || updatedItem === void 0 ? void 0 : updatedItem.data) === null || _1 === void 0 ? void 0 : _1.items[1].newattr).toEqual(updateData3.item.newattr);
256
+ }));
257
+ it('removes an array item', () => __awaiter(void 0, void 0, void 0, function* () {
258
+ var _2, _3, _4, _5, _6;
259
+ const { ceItem: ce1 } = yield createItem();
260
+ const updateData = {
261
+ arrayPath: 'data.items',
262
+ item: (0, utils_1.clone)(ce1 === null || ce1 === void 0 ? void 0 : ce1.data.items[1])
263
+ };
264
+ let updatedItem = yield (coded_entity_model_1.ceModel === null || coded_entity_model_1.ceModel === void 0 ? void 0 : coded_entity_model_1.ceModel.removeArrayItem(ce1 === null || ce1 === void 0 ? void 0 : ce1.id, updateData, {}, {}));
265
+ let itemsLength = ((_3 = (_2 = updatedItem === null || updatedItem === void 0 ? void 0 : updatedItem.data) === null || _2 === void 0 ? void 0 : _2.items) === null || _3 === void 0 ? void 0 : _3.length) || 0;
266
+ expect(itemsLength).toEqual(((ce1 === null || ce1 === void 0 ? void 0 : ce1.data.items) || []).length - 1);
267
+ expect((_4 = updatedItem === null || updatedItem === void 0 ? void 0 : updatedItem.data) === null || _4 === void 0 ? void 0 : _4.items[1].id).not.toEqual(ce1 === null || ce1 === void 0 ? void 0 : ce1.data.items[1].id);
268
+ expect((_5 = updatedItem === null || updatedItem === void 0 ? void 0 : updatedItem.data) === null || _5 === void 0 ? void 0 : _5.items[1].id).toEqual(ce1 === null || ce1 === void 0 ? void 0 : ce1.data.items[2].id);
269
+ (_6 = updatedItem === null || updatedItem === void 0 ? void 0 : updatedItem.data) === null || _6 === void 0 ? void 0 : _6.items.forEach(di => {
270
+ expect(di.id).not.toEqual(ce1 === null || ce1 === void 0 ? void 0 : ce1.data.items[1].id);
271
+ });
272
+ }));
273
+ it('runs aggregation', () => __awaiter(void 0, void 0, void 0, function* () {
274
+ const count = 4;
275
+ for (let i = 0; i < count; i++)
276
+ yield createItem();
277
+ const pipeline = [
278
+ { $group: { _id: null, count: { $sum: 1 } } }
279
+ ];
280
+ const data = (yield (coded_entity_model_1.ceModel === null || coded_entity_model_1.ceModel === void 0 ? void 0 : coded_entity_model_1.ceModel.aggregate(pipeline))) || [];
281
+ expect(data.length).toEqual(1);
282
+ expect(data[0].count).toEqual(count);
283
+ }));
@@ -0,0 +1,124 @@
1
+ /// <reference types="mongoose/types/aggregate" />
2
+ /// <reference types="mongoose/types/callback" />
3
+ /// <reference types="mongoose/types/collection" />
4
+ /// <reference types="mongoose/types/connection" />
5
+ /// <reference types="mongoose/types/cursor" />
6
+ /// <reference types="mongoose/types/document" />
7
+ /// <reference types="mongoose/types/error" />
8
+ /// <reference types="mongoose/types/expressions" />
9
+ /// <reference types="mongoose/types/helpers" />
10
+ /// <reference types="mongoose/types/middlewares" />
11
+ /// <reference types="mongoose/types/indexes" />
12
+ /// <reference types="mongoose/types/models" />
13
+ /// <reference types="mongoose/types/mongooseoptions" />
14
+ /// <reference types="mongoose/types/pipelinestage" />
15
+ /// <reference types="mongoose/types/populate" />
16
+ /// <reference types="mongoose/types/query" />
17
+ /// <reference types="mongoose/types/schemaoptions" />
18
+ /// <reference types="mongoose/types/schematypes" />
19
+ /// <reference types="mongoose/types/session" />
20
+ /// <reference types="mongoose/types/types" />
21
+ /// <reference types="mongoose/types/utility" />
22
+ /// <reference types="mongoose/types/validation" />
23
+ /// <reference types="mongoose/types/virtuals" />
24
+ /// <reference types="mongoose/types/inferschematype" />
25
+ /// <reference types="mongoose/types/inferrawdoctype" />
26
+ import mongoose from 'mongoose';
27
+ import { NxContext, NxObject } from '../interfaces';
28
+ import { BaseModel } from './base.model';
29
+ import { ArrayItemParams, BaseMongoDoc } from './base.interfaces';
30
+ import { FilterParams, QueryPagination } from './base.interfaces';
31
+ export declare abstract class BaseController<TAttrs, TDoc extends BaseMongoDoc, T extends BaseModel<TAttrs, TDoc, any>> {
32
+ model: T;
33
+ constructor({ model }: {
34
+ model: T;
35
+ });
36
+ get collectionName(): string | null;
37
+ /**
38
+ *
39
+ * @param params
40
+ * @param context
41
+ * @returns
42
+ */
43
+ count(params: FilterParams, context?: NxContext): Promise<number>;
44
+ /**
45
+ *
46
+ * @param params
47
+ * @param fields
48
+ * @param pagination
49
+ * @param context
50
+ * @returns
51
+ */
52
+ list(params?: FilterParams, fields?: NxObject, pagination?: QueryPagination, context?: NxContext): Promise<TDoc[]>;
53
+ /**
54
+ *
55
+ * @param id
56
+ * @param context
57
+ * @returns
58
+ */
59
+ get(id: string, context?: NxContext): Promise<TDoc | null>;
60
+ /**
61
+ *
62
+ * @param params
63
+ * @param context
64
+ * @returns
65
+ */
66
+ findOne(params: FilterParams, context?: NxContext): Promise<TDoc | null>;
67
+ /**
68
+ *
69
+ * @param item
70
+ * @param context
71
+ * @returns
72
+ */
73
+ create(item: TAttrs, context: NxContext): Promise<TDoc>;
74
+ /**
75
+ *
76
+ * @param id
77
+ * @param item
78
+ * @param context
79
+ * @returns
80
+ */
81
+ update(id: string, item: TAttrs, context: NxContext): Promise<TDoc>;
82
+ /**
83
+ *
84
+ * @param id
85
+ * @param context
86
+ * @returns
87
+ */
88
+ remove(id: string, context: NxContext): Promise<TDoc>;
89
+ /**
90
+ *
91
+ * @param id
92
+ * @param item
93
+ * @param context
94
+ * @returns
95
+ */
96
+ copy(id: string, item: TAttrs, context: NxContext): Promise<TDoc | null>;
97
+ /**
98
+ *
99
+ * @param id
100
+ * @param params
101
+ * @param options
102
+ * @param context
103
+ * @returns
104
+ */
105
+ addArrayItem(id: string, params: ArrayItemParams, options: mongoose.QueryOptions<Document> | undefined, context: NxContext): Promise<TDoc | null>;
106
+ /**
107
+ *
108
+ * @param id
109
+ * @param params
110
+ * @param options
111
+ * @param context
112
+ * @returns
113
+ */
114
+ updateArrayItem(id: string, params: ArrayItemParams, options: mongoose.QueryOptions<Document>, context: NxContext): Promise<TDoc | null>;
115
+ /**
116
+ *
117
+ * @param id
118
+ * @param params
119
+ * @param options
120
+ * @param context
121
+ * @returns
122
+ */
123
+ removeArrayItem(id: string, params: ArrayItemParams, options: mongoose.QueryOptions<Document> | undefined, context: NxContext): Promise<TDoc | null>;
124
+ }
@@ -0,0 +1,134 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.BaseController = void 0;
13
+ class BaseController {
14
+ constructor({ model }) {
15
+ this.model = model;
16
+ }
17
+ get collectionName() {
18
+ return this.model.collectionName;
19
+ }
20
+ /**
21
+ *
22
+ * @param params
23
+ * @param context
24
+ * @returns
25
+ */
26
+ count(params, context) {
27
+ return this.model.count(params, context);
28
+ }
29
+ /**
30
+ *
31
+ * @param params
32
+ * @param fields
33
+ * @param pagination
34
+ * @param context
35
+ * @returns
36
+ */
37
+ list(params, fields, pagination, context) {
38
+ return __awaiter(this, void 0, void 0, function* () {
39
+ return (yield this.model.list(params, fields, pagination, context));
40
+ });
41
+ }
42
+ /**
43
+ *
44
+ * @param id
45
+ * @param context
46
+ * @returns
47
+ */
48
+ get(id, context) {
49
+ return __awaiter(this, void 0, void 0, function* () {
50
+ return this.model.get(id, context);
51
+ });
52
+ }
53
+ /**
54
+ *
55
+ * @param params
56
+ * @param context
57
+ * @returns
58
+ */
59
+ findOne(params, context) {
60
+ return this.model.findOne(params, context);
61
+ }
62
+ /**
63
+ *
64
+ * @param item
65
+ * @param context
66
+ * @returns
67
+ */
68
+ create(item, context) {
69
+ return this.model.create(item, context);
70
+ }
71
+ /**
72
+ *
73
+ * @param id
74
+ * @param item
75
+ * @param context
76
+ * @returns
77
+ */
78
+ update(id, item, context) {
79
+ return this.model.update(id, item, context);
80
+ }
81
+ /**
82
+ *
83
+ * @param id
84
+ * @param context
85
+ * @returns
86
+ */
87
+ remove(id, context) {
88
+ return this.model.remove(id, context);
89
+ }
90
+ /**
91
+ *
92
+ * @param id
93
+ * @param item
94
+ * @param context
95
+ * @returns
96
+ */
97
+ copy(id, item, context) {
98
+ return this.model.copy(id, item, context);
99
+ }
100
+ /**
101
+ *
102
+ * @param id
103
+ * @param params
104
+ * @param options
105
+ * @param context
106
+ * @returns
107
+ */
108
+ addArrayItem(id, params, options = { new: true }, context) {
109
+ return this.model.addArrayItem(id, params, options, context);
110
+ }
111
+ /**
112
+ *
113
+ * @param id
114
+ * @param params
115
+ * @param options
116
+ * @param context
117
+ * @returns
118
+ */
119
+ updateArrayItem(id, params, options, context) {
120
+ return this.model.updateArrayItem(id, params, options, context);
121
+ }
122
+ /**
123
+ *
124
+ * @param id
125
+ * @param params
126
+ * @param options
127
+ * @param context
128
+ * @returns
129
+ */
130
+ removeArrayItem(id, params, options = { new: true }, context) {
131
+ return this.model.removeArrayItem(id, params, options, context);
132
+ }
133
+ }
134
+ exports.BaseController = BaseController;
@@ -0,0 +1,81 @@
1
+ /// <reference types="mongoose/types/aggregate" />
2
+ /// <reference types="mongoose/types/callback" />
3
+ /// <reference types="mongoose/types/collection" />
4
+ /// <reference types="mongoose/types/connection" />
5
+ /// <reference types="mongoose/types/cursor" />
6
+ /// <reference types="mongoose/types/document" />
7
+ /// <reference types="mongoose/types/error" />
8
+ /// <reference types="mongoose/types/expressions" />
9
+ /// <reference types="mongoose/types/helpers" />
10
+ /// <reference types="mongoose/types/middlewares" />
11
+ /// <reference types="mongoose/types/indexes" />
12
+ /// <reference types="mongoose/types/models" />
13
+ /// <reference types="mongoose/types/mongooseoptions" />
14
+ /// <reference types="mongoose/types/pipelinestage" />
15
+ /// <reference types="mongoose/types/populate" />
16
+ /// <reference types="mongoose/types/query" />
17
+ /// <reference types="mongoose/types/schemaoptions" />
18
+ /// <reference types="mongoose/types/schematypes" />
19
+ /// <reference types="mongoose/types/session" />
20
+ /// <reference types="mongoose/types/types" />
21
+ /// <reference types="mongoose/types/utility" />
22
+ /// <reference types="mongoose/types/validation" />
23
+ /// <reference types="mongoose/types/virtuals" />
24
+ /// <reference types="mongoose/types/inferschematype" />
25
+ /// <reference types="mongoose/types/inferrawdoctype" />
26
+ import mongoose from 'mongoose';
27
+ import { ModelCrudEventType } from '../enums';
28
+ import { NxObject } from '../interfaces';
29
+ import { NxDateRage } from '../types';
30
+ export interface BaseMongoDoc extends mongoose.Document {
31
+ id?: string;
32
+ }
33
+ export interface BaseMongoModel<T, TDoc extends BaseMongoDoc> extends mongoose.Model<BaseMongoDoc> {
34
+ build(attrs: T): TDoc;
35
+ findByEvent(event: {
36
+ id: string;
37
+ version: number;
38
+ }): Promise<TDoc | null>;
39
+ }
40
+ export interface FoldedModelAttrs {
41
+ createdAt: Date;
42
+ updatedAt: Date;
43
+ ownerId?: string;
44
+ folderId?: string;
45
+ folder?: boolean;
46
+ users?: NxObject[];
47
+ groups?: NxObject[];
48
+ organizations?: NxObject[];
49
+ }
50
+ export interface FoldedMongoDoc extends BaseMongoDoc, FoldedModelAttrs {
51
+ }
52
+ export interface FilterParams extends NxObject {
53
+ text?: string;
54
+ rangeDate?: NxDateRage;
55
+ }
56
+ export interface QueryPagination {
57
+ offset?: number;
58
+ limit?: number;
59
+ sort?: NxObject;
60
+ }
61
+ export interface ArrayItemParams {
62
+ arrayPath: string;
63
+ item: NxObject;
64
+ arrayFilter?: NxObject;
65
+ updateAttr?: string;
66
+ partial?: boolean;
67
+ }
68
+ export interface ChangeStreamData {
69
+ name: string;
70
+ stream: mongoose.mongo.ChangeStream<any, any>;
71
+ duration?: number;
72
+ }
73
+ export type CrudItemEvent = {
74
+ id?: string;
75
+ type: ModelCrudEventType;
76
+ data: {
77
+ uid: string;
78
+ model: string;
79
+ path?: string;
80
+ };
81
+ };
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });