nicot 1.1.22 → 1.1.24

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 (71) hide show
  1. package/README.md +2 -0
  2. package/build.js +167 -0
  3. package/dist/index.cjs +2210 -0
  4. package/dist/index.cjs.map +7 -0
  5. package/dist/index.d.ts +0 -1
  6. package/dist/index.mjs +2184 -0
  7. package/dist/index.mjs.map +7 -0
  8. package/index.ts +0 -2
  9. package/package.json +20 -7
  10. package/dist/index.js +0 -25
  11. package/dist/index.js.map +0 -1
  12. package/dist/src/bases/base-restful-controller.js +0 -53
  13. package/dist/src/bases/base-restful-controller.js.map +0 -1
  14. package/dist/src/bases/id-base.js +0 -58
  15. package/dist/src/bases/id-base.js.map +0 -1
  16. package/dist/src/bases/index.js +0 -20
  17. package/dist/src/bases/index.js.map +0 -1
  18. package/dist/src/bases/page-settings.js +0 -64
  19. package/dist/src/bases/page-settings.js.map +0 -1
  20. package/dist/src/bases/time-base.js +0 -53
  21. package/dist/src/bases/time-base.js.map +0 -1
  22. package/dist/src/crud-base.js +0 -480
  23. package/dist/src/crud-base.js.map +0 -1
  24. package/dist/src/decorators/access.js +0 -24
  25. package/dist/src/decorators/access.js.map +0 -1
  26. package/dist/src/decorators/index.js +0 -21
  27. package/dist/src/decorators/index.js.map +0 -1
  28. package/dist/src/decorators/pipes.js +0 -26
  29. package/dist/src/decorators/pipes.js.map +0 -1
  30. package/dist/src/decorators/property.js +0 -191
  31. package/dist/src/decorators/property.js.map +0 -1
  32. package/dist/src/decorators/query.js +0 -67
  33. package/dist/src/decorators/query.js.map +0 -1
  34. package/dist/src/dto/cursor-pagination.js +0 -89
  35. package/dist/src/dto/cursor-pagination.js.map +0 -1
  36. package/dist/src/dto/import-entry.js +0 -45
  37. package/dist/src/dto/import-entry.js.map +0 -1
  38. package/dist/src/dto/index.js +0 -19
  39. package/dist/src/dto/index.js.map +0 -1
  40. package/dist/src/restful.js +0 -402
  41. package/dist/src/restful.js.map +0 -1
  42. package/dist/src/utility/bigint.js +0 -16
  43. package/dist/src/utility/bigint.js.map +0 -1
  44. package/dist/src/utility/cursor-pagination-utils.js +0 -252
  45. package/dist/src/utility/cursor-pagination-utils.js.map +0 -1
  46. package/dist/src/utility/filter-relations.js +0 -91
  47. package/dist/src/utility/filter-relations.js.map +0 -1
  48. package/dist/src/utility/get-typeorm-relations.js +0 -50
  49. package/dist/src/utility/get-typeorm-relations.js.map +0 -1
  50. package/dist/src/utility/index.js +0 -18
  51. package/dist/src/utility/index.js.map +0 -1
  52. package/dist/src/utility/metadata.js +0 -21
  53. package/dist/src/utility/metadata.js.map +0 -1
  54. package/dist/src/utility/omit-type-exclude.js +0 -14
  55. package/dist/src/utility/omit-type-exclude.js.map +0 -1
  56. package/dist/src/utility/query-full-text-column-options.interface.js +0 -3
  57. package/dist/src/utility/query-full-text-column-options.interface.js.map +0 -1
  58. package/dist/src/utility/query.js +0 -49
  59. package/dist/src/utility/query.js.map +0 -1
  60. package/dist/src/utility/recursive-key-of.js +0 -4
  61. package/dist/src/utility/recursive-key-of.js.map +0 -1
  62. package/dist/src/utility/relation-def.js +0 -3
  63. package/dist/src/utility/relation-def.js.map +0 -1
  64. package/dist/src/utility/rename-class.js +0 -8
  65. package/dist/src/utility/rename-class.js.map +0 -1
  66. package/dist/src/utility/subject-registry.js +0 -19
  67. package/dist/src/utility/subject-registry.js.map +0 -1
  68. package/dist/src/utility/type-transformer.js +0 -22
  69. package/dist/src/utility/type-transformer.js.map +0 -1
  70. package/dist/src/utility/unshift-order-by.js +0 -18
  71. package/dist/src/utility/unshift-order-by.js.map +0 -1
@@ -1,64 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var __metadata = (this && this.__metadata) || function (k, v) {
9
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.PageSettingsDto = void 0;
13
- const decorators_1 = require("../decorators");
14
- const class_validator_1 = require("class-validator");
15
- const swagger_1 = require("@nestjs/swagger");
16
- class PageSettingsDto {
17
- getActualPageSettings() {
18
- return {
19
- pageCount: this.getPageCount(),
20
- recordsPerPage: this.getRecordsPerPage(),
21
- };
22
- }
23
- getPageCount() {
24
- return parseInt(this.pageCount) || 1;
25
- }
26
- getRecordsPerPage() {
27
- return parseInt(this.recordsPerPage) || 25;
28
- }
29
- getStartingFrom() {
30
- return (this.getPageCount() - 1) * this.getRecordsPerPage();
31
- }
32
- applyPaginationQuery(qb) {
33
- qb.take(this.getRecordsPerPage()).skip(this.getStartingFrom());
34
- }
35
- applyQuery(qb, entityName) { }
36
- }
37
- exports.PageSettingsDto = PageSettingsDto;
38
- __decorate([
39
- (0, decorators_1.NotWritable)(),
40
- (0, class_validator_1.IsPositive)(),
41
- (0, class_validator_1.IsInt)(),
42
- (0, swagger_1.ApiProperty)({
43
- description: 'The nth page, starting with 1.',
44
- required: false,
45
- type: Number,
46
- minimum: 1,
47
- }),
48
- (0, decorators_1.NotInResult)(),
49
- __metadata("design:type", Number)
50
- ], PageSettingsDto.prototype, "pageCount", void 0);
51
- __decorate([
52
- (0, decorators_1.NotWritable)(),
53
- (0, class_validator_1.IsPositive)(),
54
- (0, class_validator_1.IsInt)(),
55
- (0, swagger_1.ApiProperty)({
56
- description: 'Records per page.',
57
- required: false,
58
- type: Number,
59
- minimum: 1,
60
- }),
61
- (0, decorators_1.NotInResult)(),
62
- __metadata("design:type", Number)
63
- ], PageSettingsDto.prototype, "recordsPerPage", void 0);
64
- //# sourceMappingURL=page-settings.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"page-settings.js","sourceRoot":"","sources":["../../../src/bases/page-settings.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,8CAAyD;AAEzD,qDAAoD;AACpD,6CAA8C;AAmB9C,MAAa,eAAe;IA2B1B,qBAAqB;QACnB,OAAO;YACL,SAAS,EAAE,IAAI,CAAC,YAAY,EAAE;YAC9B,cAAc,EAAE,IAAI,CAAC,iBAAiB,EAAE;SACzC,CAAC;IACJ,CAAC;IAED,YAAY;QACV,OAAO,QAAQ,CAAC,IAAI,CAAC,SAAgB,CAAC,IAAI,CAAC,CAAC;IAC9C,CAAC;IAED,iBAAiB;QACf,OAAO,QAAQ,CAAC,IAAI,CAAC,cAAqB,CAAC,IAAI,EAAE,CAAC;IACpD,CAAC;IAED,eAAe;QACb,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC9D,CAAC;IAED,oBAAoB,CAAC,EAA2B;QAC9C,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;IACjE,CAAC;IAED,UAAU,CAAC,EAA2B,EAAE,UAAkB,IAAG,CAAC;CAC/D;AAnDD,0CAmDC;AAtCC;IAVC,IAAA,wBAAW,GAAE;IACb,IAAA,4BAAU,GAAE;IACZ,IAAA,uBAAK,GAAE;IACP,IAAA,qBAAW,EAAC;QACX,WAAW,EAAE,gCAAgC;QAC7C,QAAQ,EAAE,KAAK;QACf,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,CAAC;KACX,CAAC;IACD,IAAA,wBAAW,GAAE;;kDACI;AAYlB;IAVC,IAAA,wBAAW,GAAE;IACb,IAAA,4BAAU,GAAE;IACZ,IAAA,uBAAK,GAAE;IACP,IAAA,qBAAW,EAAC;QACX,WAAW,EAAE,mBAAmB;QAChC,QAAQ,EAAE,KAAK;QACf,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,CAAC;KACX,CAAC;IACD,IAAA,wBAAW,GAAE;;uDACS"}
@@ -1,53 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var __metadata = (this && this.__metadata) || function (k, v) {
9
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.TimeBase = void 0;
13
- const typeorm_1 = require("typeorm");
14
- const decorators_1 = require("../decorators");
15
- const page_settings_1 = require("./page-settings");
16
- class TimeBase extends page_settings_1.PageSettingsDto {
17
- isValidInCreate() {
18
- return;
19
- }
20
- // eslint-disable-next-line @typescript-eslint/no-empty-function
21
- async beforeCreate() { }
22
- // eslint-disable-next-line @typescript-eslint/no-empty-function
23
- async afterCreate() { }
24
- // eslint-disable-next-line @typescript-eslint/no-empty-function
25
- async beforeGet() { }
26
- // eslint-disable-next-line @typescript-eslint/no-empty-function
27
- async afterGet() { }
28
- isValidInUpdate() {
29
- return;
30
- }
31
- // eslint-disable-next-line @typescript-eslint/no-empty-function
32
- async beforeUpdate() { }
33
- }
34
- exports.TimeBase = TimeBase;
35
- __decorate([
36
- (0, typeorm_1.CreateDateColumn)({ select: false }),
37
- (0, decorators_1.NotColumn)(),
38
- (0, decorators_1.NotInResult)({ entityVersioningDate: true }),
39
- __metadata("design:type", Date)
40
- ], TimeBase.prototype, "createTime", void 0);
41
- __decorate([
42
- (0, typeorm_1.UpdateDateColumn)({ select: false }),
43
- (0, decorators_1.NotColumn)(),
44
- (0, decorators_1.NotInResult)({ entityVersioningDate: true }),
45
- __metadata("design:type", Date)
46
- ], TimeBase.prototype, "updateTime", void 0);
47
- __decorate([
48
- (0, typeorm_1.DeleteDateColumn)({ select: false }),
49
- (0, decorators_1.NotColumn)(),
50
- (0, decorators_1.NotInResult)({ entityVersioningDate: true }),
51
- __metadata("design:type", Date)
52
- ], TimeBase.prototype, "deleteTime", void 0);
53
- //# sourceMappingURL=time-base.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"time-base.js","sourceRoot":"","sources":["../../../src/bases/time-base.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qCAKiB;AACjB,8CAAuD;AACvD,mDAAkD;AAgBlD,MAAa,QACX,SAAQ,+BAAe;IAkBvB,eAAe;QACb,OAAO;IACT,CAAC;IAED,gEAAgE;IAChE,KAAK,CAAC,YAAY,KAAmB,CAAC;IAEtC,gEAAgE;IAChE,KAAK,CAAC,WAAW,KAAmB,CAAC;IAErC,gEAAgE;IAChE,KAAK,CAAC,SAAS,KAAmB,CAAC;IAEnC,gEAAgE;IAChE,KAAK,CAAC,QAAQ,KAAmB,CAAC;IAElC,eAAe;QACb,OAAO;IACT,CAAC;IAED,gEAAgE;IAChE,KAAK,CAAC,YAAY,KAAmB,CAAC;CACvC;AAzCD,4BAyCC;AAlCC;IAHC,IAAA,0BAAgB,EAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IACnC,IAAA,sBAAS,GAAE;IACX,IAAA,wBAAW,EAAC,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC;8BAChC,IAAI;4CAAC;AAKjB;IAHC,IAAA,0BAAgB,EAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IACnC,IAAA,sBAAS,GAAE;IACX,IAAA,wBAAW,EAAC,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC;8BAChC,IAAI;4CAAC;AAKjB;IAHC,IAAA,0BAAgB,EAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IACnC,IAAA,sBAAS,GAAE;IACX,IAAA,wBAAW,EAAC,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC;8BAChC,IAAI;4CAAC"}
@@ -1,480 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- var __importDefault = (this && this.__importDefault) || function (mod) {
36
- return (mod && mod.__esModule) ? mod : { "default": mod };
37
- };
38
- Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.CrudBase = exports.Inner = exports.Relation = void 0;
40
- exports.CrudService = CrudService;
41
- const dto_1 = require("./dto");
42
- const typeorm_1 = require("typeorm");
43
- const bases_1 = require("./bases");
44
- const common_1 = require("@nestjs/common");
45
- const StringUtils_1 = require("typeorm/util/StringUtils");
46
- const lodash_1 = __importStar(require("lodash"));
47
- const nesties_1 = require("nesties");
48
- const metadata_1 = require("./utility/metadata");
49
- const get_typeorm_relations_1 = require("./utility/get-typeorm-relations");
50
- const cursor_pagination_1 = require("./dto/cursor-pagination");
51
- const cursor_pagination_utils_1 = require("./utility/cursor-pagination-utils");
52
- const p_queue_1 = __importDefault(require("p-queue"));
53
- const filter_relations_1 = require("./utility/filter-relations");
54
- const Relation = (name, options = {}) => {
55
- return { name, inner: false, ...options };
56
- };
57
- exports.Relation = Relation;
58
- const Inner = (name, options = {}) => {
59
- return (0, exports.Relation)(name, { inner: true, ...options });
60
- };
61
- exports.Inner = Inner;
62
- const loadedParsers = new Set();
63
- const loadFullTextQueue = new p_queue_1.default({
64
- concurrency: 1,
65
- });
66
- class CrudBase {
67
- constructor(entityClass, repo, crudOptions) {
68
- this.entityClass = entityClass;
69
- this.repo = repo;
70
- this.crudOptions = crudOptions;
71
- this.entityName = this.entityClass.name;
72
- this.entityReturnMessageDto = (0, nesties_1.ReturnMessageDto)(this.entityClass);
73
- this.importEntryDto = (0, dto_1.ImportEntryDto)(this.entityClass);
74
- this.importReturnMessageDto = (0, nesties_1.ReturnMessageDto)([this.importEntryDto]);
75
- this.entityPaginatedReturnMessageDto = (0, nesties_1.PaginatedReturnMessageDto)(this.entityClass);
76
- this.entityCursorPaginatedReturnMessageDto = (0, cursor_pagination_1.CursorPaginationReturnMessageDto)(this.entityClass);
77
- this.entityRelations = (0, filter_relations_1.filterRelations)(this.entityClass, this.crudOptions.relations, (r) => !r.computed);
78
- this.extraGetQuery = this.crudOptions.extraGetQuery || ((qb) => { });
79
- this.log = new common_1.ConsoleLogger(`${this.entityClass.name}Service`);
80
- this._typeormRelations = (0, get_typeorm_relations_1.getTypeormRelations)(this.entityClass);
81
- }
82
- _cleanEntityNotInResultFields(ent) {
83
- const visited = new Set();
84
- const runSingleObject = (o, cl) => {
85
- if (visited.has(o)) {
86
- return o;
87
- }
88
- const fields = (0, metadata_1.getNotInResultFields)(cl, this.crudOptions.keepEntityVersioningDates);
89
- for (const field of fields) {
90
- delete o[field];
91
- }
92
- visited.add(o);
93
- for (const relation of this._typeormRelations) {
94
- const propertyName = relation.propertyName;
95
- if (o[propertyName]) {
96
- if (Array.isArray(o[propertyName])) {
97
- o[propertyName] = o[propertyName].map((r) => runSingleObject(r, relation.propertyClass));
98
- }
99
- else {
100
- o[propertyName] = runSingleObject(o[propertyName], relation.propertyClass);
101
- }
102
- }
103
- }
104
- return o;
105
- };
106
- return runSingleObject(ent, this.entityClass);
107
- }
108
- cleanEntityNotInResultFields(ents) {
109
- if (Array.isArray(ents)) {
110
- return ents.map((ent) => this._cleanEntityNotInResultFields(ent));
111
- }
112
- else {
113
- return this._cleanEntityNotInResultFields(ents);
114
- }
115
- }
116
- async _batchCreate(ents, beforeCreate, skipErrors = false) {
117
- const entsWithId = ents.filter((ent) => ent.id != null);
118
- const result = await this.repo.manager.transaction(async (mdb) => {
119
- let skipped = [];
120
- const repo = mdb.getRepository(this.entityClass);
121
- let entsToSave = ents;
122
- if (entsWithId.length) {
123
- const entIds = entsWithId.map((ent) => ent.id);
124
- const entIdChunks = lodash_1.default.chunk(entIds, 65535);
125
- const existingEnts = (await Promise.all(entIdChunks.map((chunk) => repo.find({
126
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
127
- // @ts-ignore
128
- where: {
129
- id: (0, typeorm_1.In)(chunk),
130
- },
131
- select: this.crudOptions.createOrUpdate
132
- ? undefined
133
- : ['id', 'deleteTime'],
134
- withDeleted: true,
135
- })))).flat();
136
- if (existingEnts.length) {
137
- const existingEntsWithoutDeleteTime = existingEnts.filter((ent) => ent.deleteTime == null);
138
- const existingEntsWithDeleteTime = existingEnts.filter((ent) => ent.deleteTime != null);
139
- if (existingEntsWithoutDeleteTime.length) {
140
- if (this.crudOptions.createOrUpdate) {
141
- const existingIdMap = new Map();
142
- existingEntsWithoutDeleteTime.forEach((ent) => {
143
- existingIdMap.set(ent.id, ent);
144
- });
145
- entsToSave = [];
146
- for (const ent of ents) {
147
- if (existingIdMap.has(ent.id)) {
148
- const existingEnt = existingIdMap.get(ent.id);
149
- Object.assign(existingEnt, ent);
150
- entsToSave.push(existingEnt);
151
- }
152
- else {
153
- entsToSave.push(ent);
154
- }
155
- }
156
- }
157
- else {
158
- if (!skipErrors) {
159
- throw new nesties_1.BlankReturnMessageDto(404, `${this.entityName} ID ${existingEntsWithoutDeleteTime.join(',')} already exists`).toException();
160
- }
161
- const existingEntsWithoutDeleteTimeIdSet = new Set(existingEntsWithoutDeleteTime.map((e) => e.id));
162
- const skippedEnts = ents.filter((ent) => existingEntsWithoutDeleteTimeIdSet.has(ent.id));
163
- skipped = skippedEnts.map((ent) => ({
164
- result: 'Already exists',
165
- entry: ent,
166
- }));
167
- const skippedEntsSet = new Set(skippedEnts);
168
- entsToSave = ents.filter((ent) => !skippedEntsSet.has(ent));
169
- }
170
- }
171
- if (existingEntsWithDeleteTime.length) {
172
- await repo.delete(existingEntsWithDeleteTime.map((ent) => ent.id));
173
- }
174
- }
175
- }
176
- if (beforeCreate) {
177
- await beforeCreate(repo);
178
- }
179
- try {
180
- const entChunksToSave = lodash_1.default.chunk(entsToSave, Math.floor(65535 / Math.max(1, Object.keys(entsToSave[0] || {}).length)));
181
- let results = [];
182
- for (const entChunk of entChunksToSave) {
183
- const savedChunk = await repo.save(entChunk);
184
- results = results.concat(savedChunk);
185
- }
186
- return {
187
- results,
188
- skipped,
189
- };
190
- }
191
- catch (e) {
192
- this.log.error(`Failed to create entity ${JSON.stringify(entsToSave)}: ${e.toString()}`);
193
- throw new nesties_1.BlankReturnMessageDto(500, 'Internal error').toException();
194
- }
195
- });
196
- return result;
197
- }
198
- async create(_ent, beforeCreate) {
199
- if (!_ent) {
200
- throw new nesties_1.BlankReturnMessageDto(400, 'Invalid entity').toException();
201
- }
202
- let ent = new this.entityClass();
203
- Object.assign(ent, (0, lodash_1.omit)(_ent, ...this._typeormRelations.map((r) => r.propertyName)));
204
- const invalidReason = ent.isValidInCreate();
205
- if (invalidReason) {
206
- throw new nesties_1.BlankReturnMessageDto(400, invalidReason).toException();
207
- }
208
- const savedEnt = await this.repo.manager.transaction(async (mdb) => {
209
- const repo = mdb.getRepository(this.entityClass);
210
- if (ent.id != null) {
211
- const existingEnt = await repo.findOne({
212
- where: { id: ent.id },
213
- select: this.crudOptions.createOrUpdate
214
- ? undefined
215
- : ['id', 'deleteTime'],
216
- withDeleted: true,
217
- });
218
- if (existingEnt) {
219
- if (existingEnt.deleteTime) {
220
- await repo.delete(existingEnt.id);
221
- }
222
- else if (this.crudOptions.createOrUpdate) {
223
- Object.assign(existingEnt, ent);
224
- ent = existingEnt;
225
- }
226
- else {
227
- throw new nesties_1.BlankReturnMessageDto(404, `${this.entityName} ID ${ent.id} already exists`).toException();
228
- }
229
- }
230
- }
231
- if (beforeCreate) {
232
- await beforeCreate(repo);
233
- }
234
- await ent.beforeCreate?.();
235
- try {
236
- const savedEnt = await repo.save(ent);
237
- await savedEnt.afterCreate?.();
238
- return this.cleanEntityNotInResultFields(savedEnt);
239
- }
240
- catch (e) {
241
- this.log.error(`Failed to create entity ${JSON.stringify(ent)}: ${e.toString()}`);
242
- throw new nesties_1.BlankReturnMessageDto(500, 'Internal error').toException();
243
- }
244
- });
245
- return new this.entityReturnMessageDto(200, 'success', savedEnt);
246
- }
247
- get entityAliasName() {
248
- return (0, StringUtils_1.camelCase)(this.entityName);
249
- }
250
- _applyQueryRelation(qb, relation) {
251
- const { name } = relation;
252
- const relationUnit = name.split('.');
253
- const base = relationUnit.length === 1
254
- ? this.entityAliasName
255
- : relationUnit.slice(0, relationUnit.length - 1).join('_');
256
- const property = relationUnit[relationUnit.length - 1];
257
- const properyAlias = relationUnit.join('_');
258
- const methodName = relation.inner ? 'innerJoin' : 'leftJoin';
259
- if (!relation.noSelect) {
260
- qb.addSelect(properyAlias);
261
- }
262
- qb[methodName](`${base}.${property}`, properyAlias, relation.extraCondition || undefined, relation.extraConditionFields || undefined);
263
- }
264
- _applyQueryRelations(qb) {
265
- for (const relation of this.entityRelations) {
266
- if (typeof relation === 'string') {
267
- this._applyQueryRelation(qb, { name: relation });
268
- }
269
- else {
270
- this._applyQueryRelation(qb, relation);
271
- }
272
- }
273
- }
274
- _applyQueryFilters(qb, ent) {
275
- const queryFields = metadata_1.reflector.getArray('queryConditionFields', this.entityClass);
276
- for (const field of queryFields) {
277
- const condition = metadata_1.reflector.get('queryCondition', this.entityClass, field);
278
- if (condition) {
279
- condition(ent, qb, this.entityAliasName, field);
280
- }
281
- }
282
- }
283
- queryBuilder() {
284
- return this.repo.createQueryBuilder(this.entityAliasName);
285
- }
286
- async findOne(id,
287
- // eslint-disable-next-line @typescript-eslint/no-empty-function
288
- extraQuery = () => { }) {
289
- const query = this.queryBuilder()
290
- .where(`${this.entityAliasName}.id = :id`, { id })
291
- .take(1);
292
- this._applyQueryRelations(query);
293
- this.extraGetQuery(query);
294
- extraQuery(query);
295
- query.take(1);
296
- let ent;
297
- try {
298
- ent = await query.getOne();
299
- }
300
- catch (e) {
301
- const [sql, params] = query.getQueryAndParameters();
302
- this.log.error(`Failed to read entity ID ${id} with SQL ${sql} param ${params.join(',')}: ${e.toString()}`);
303
- throw new nesties_1.BlankReturnMessageDto(500, 'Internal error').toException();
304
- }
305
- if (!ent) {
306
- throw new nesties_1.BlankReturnMessageDto(404, `${this.entityName} ID ${id} not found.`).toException();
307
- }
308
- await ent.afterGet?.();
309
- return new this.entityReturnMessageDto(200, 'success', this.cleanEntityNotInResultFields(ent));
310
- }
311
- async _preFindAll(ent,
312
- // eslint-disable-next-line @typescript-eslint/no-empty-function
313
- extraQuery = () => { }) {
314
- const query = this.queryBuilder().where('1 = 1');
315
- const newEnt = new this.entityClass();
316
- if (ent) {
317
- Object.assign(newEnt, ent);
318
- await newEnt?.beforeGet?.();
319
- newEnt.applyQuery(query, this.entityAliasName);
320
- }
321
- this._applyQueryRelations(query);
322
- this._applyQueryFilters(query, newEnt);
323
- const pageSettings = newEnt instanceof bases_1.PageSettingsDto
324
- ? newEnt
325
- : Object.assign(new bases_1.PageSettingsDto(), newEnt);
326
- this.extraGetQuery(query);
327
- extraQuery(query);
328
- return { query, newEnt, pageSettings };
329
- }
330
- async findAll(ent,
331
- // eslint-disable-next-line @typescript-eslint/no-empty-function
332
- extraQuery = () => { }) {
333
- const { query, pageSettings } = await this._preFindAll(ent, extraQuery);
334
- pageSettings.applyPaginationQuery(query);
335
- try {
336
- const [data, count] = await query.getManyAndCount();
337
- await Promise.all(data.map((ent) => ent.afterGet?.()));
338
- return new this.entityPaginatedReturnMessageDto(200, 'success', this.cleanEntityNotInResultFields(data), count, pageSettings.getActualPageSettings());
339
- }
340
- catch (e) {
341
- const [sql, params] = query.getQueryAndParameters();
342
- this.log.error(`Failed to read entity cond ${JSON.stringify(ent)} with SQL ${sql} param ${params.join(',')}: ${e.toString()}`);
343
- throw new nesties_1.BlankReturnMessageDto(500, 'Internal error').toException();
344
- }
345
- }
346
- async findAllCursorPaginated(ent,
347
- // eslint-disable-next-line @typescript-eslint/no-empty-function
348
- extraQuery = () => { }) {
349
- const { query, pageSettings } = await this._preFindAll(ent, extraQuery);
350
- try {
351
- const { data, paginatedResult } = await (0, cursor_pagination_utils_1.getPaginatedResult)(query, this.entityClass, this.entityAliasName, pageSettings.getRecordsPerPage(), ent.paginationCursor);
352
- await Promise.all(data.map((ent) => ent.afterGet?.()));
353
- return new this.entityCursorPaginatedReturnMessageDto(200, 'success', this.cleanEntityNotInResultFields(data), paginatedResult);
354
- }
355
- catch (e) {
356
- const [sql, params] = query.getQueryAndParameters();
357
- this.log.error(`Failed to read entity cond ${JSON.stringify(ent)} with SQL ${sql} param ${params.join(',')}: ${e.toString()}`);
358
- throw new nesties_1.BlankReturnMessageDto(500, 'Internal error').toException();
359
- }
360
- }
361
- async update(id, entPart, cond = {}) {
362
- let result;
363
- const ent = new this.entityClass();
364
- Object.assign(ent, entPart);
365
- const invalidReason = ent.isValidInUpdate();
366
- if (invalidReason) {
367
- throw new nesties_1.BlankReturnMessageDto(400, invalidReason).toException();
368
- }
369
- await ent.beforeUpdate?.();
370
- try {
371
- result = await this.repo.update({
372
- id,
373
- ...cond,
374
- }, ent);
375
- }
376
- catch (e) {
377
- this.log.error(`Failed to update entity ID ${id} to ${JSON.stringify(entPart)}: ${e.toString()}`);
378
- throw new nesties_1.BlankReturnMessageDto(500, 'Internal error').toException();
379
- }
380
- if (!result.affected) {
381
- throw new nesties_1.BlankReturnMessageDto(404, `${this.entityName} ID ${id} not found.`).toException();
382
- }
383
- return new nesties_1.BlankReturnMessageDto(200, 'success');
384
- }
385
- async delete(id, cond = {}) {
386
- let result;
387
- const searchCond = {
388
- id,
389
- ...cond,
390
- };
391
- try {
392
- result = await (this.crudOptions.hardDelete ||
393
- !this.repo.manager.connection.getMetadata(this.entityClass)
394
- .deleteDateColumn
395
- ? this.repo.delete(searchCond)
396
- : this.repo.softDelete(searchCond));
397
- }
398
- catch (e) {
399
- this.log.error(`Failed to delete entity ID ${id}: ${e.toString()}`);
400
- throw new nesties_1.BlankReturnMessageDto(500, 'Internal error').toException();
401
- }
402
- if (!result.affected) {
403
- throw new nesties_1.BlankReturnMessageDto(404, `${this.entityName} ID ${id} not found.`).toException();
404
- }
405
- return new nesties_1.BlankReturnMessageDto(200, 'success');
406
- }
407
- async importEntities(_ents, extraChecking) {
408
- const ents = _ents.map((ent) => {
409
- const newEnt = new this.entityClass();
410
- Object.assign(newEnt, (0, lodash_1.omit)(ent, ...this._typeormRelations.map((r) => r.propertyName)));
411
- return newEnt;
412
- });
413
- const invalidResults = lodash_1.default.compact(await Promise.all(ents.map(async (ent) => {
414
- const reason = ent.isValidInCreate();
415
- if (reason) {
416
- return { entry: ent, result: reason };
417
- }
418
- if (extraChecking) {
419
- const reason = await extraChecking(ent);
420
- if (reason) {
421
- return { entry: ent, result: reason };
422
- }
423
- }
424
- })));
425
- const remainingEnts = ents.filter((ent) => !invalidResults.find((result) => result.entry === ent));
426
- await Promise.all(remainingEnts.map((ent) => ent.beforeCreate?.()));
427
- const data = await this._batchCreate(remainingEnts, undefined, true);
428
- await Promise.all(data.results.map((e) => e.afterCreate?.()));
429
- const results = [
430
- ...invalidResults,
431
- ...data.skipped,
432
- ...data.results.map((e) => ({ entry: e, result: 'OK' })),
433
- ];
434
- return new this.importReturnMessageDto(200, 'success', results.map((r) => {
435
- const entry = new this.importEntryDto();
436
- Object.assign(entry, r);
437
- entry.entry = this.cleanEntityNotInResultFields(r.entry);
438
- return entry;
439
- }));
440
- }
441
- async exists(id) {
442
- const ent = await this.repo.findOne({ where: { id }, select: ['id'] });
443
- return !!ent;
444
- }
445
- async _loadFullTextIndex() {
446
- const fields = metadata_1.reflector.getArray('queryFullTextColumnFields', this.entityClass);
447
- const metadata = this.repo.metadata;
448
- const tableName = metadata.tableName; // 真正数据库里的表名
449
- const sqls = [];
450
- for (const field of fields) {
451
- const options = metadata_1.reflector.get('queryFullTextColumn', this.entityClass, field);
452
- if (!options)
453
- continue;
454
- const configurationName = options.configuration;
455
- const parser = options.parser;
456
- if (parser && !loadedParsers.has(parser)) {
457
- loadedParsers.add(parser);
458
- sqls.push(`CREATE EXTENSION IF NOT EXISTS ${parser};`, `DROP TEXT SEARCH CONFIGURATION IF EXISTS ${configurationName};`, `CREATE TEXT SEARCH CONFIGURATION ${configurationName} (PARSER = ${parser});`, `ALTER TEXT SEARCH CONFIGURATION ${configurationName} ADD MAPPING FOR n, v, a, i, e, l WITH simple;`);
459
- }
460
- const indexName = `idx_fulltext_${this.entityName}_${field}`;
461
- // 建立索引,索引名字用 this.entityName,表名用真实 tableName
462
- sqls.push(`CREATE INDEX IF NOT EXISTS "${indexName}" ON "${tableName}" USING GIN (to_tsvector('${configurationName}', "${field}"));`);
463
- }
464
- if (sqls.length) {
465
- await this.repo.manager.query(sqls.join('\n'));
466
- }
467
- }
468
- async onModuleInit() {
469
- await loadFullTextQueue.add(() => this._loadFullTextIndex());
470
- }
471
- }
472
- exports.CrudBase = CrudBase;
473
- function CrudService(entityClass, crudOptions = {}) {
474
- return class CrudServiceImpl extends CrudBase {
475
- constructor(repo) {
476
- super(entityClass, repo, crudOptions);
477
- }
478
- };
479
- }
480
- //# sourceMappingURL=crud-base.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"crud-base.js","sourceRoot":"","sources":["../../src/crud-base.ts"],"names":[],"mappings":"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"}