zync-nest-data-module 1.0.0

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 (84) hide show
  1. package/README.md +672 -0
  2. package/dist/backup/backup.config.d.ts +4 -0
  3. package/dist/backup/backup.config.js +84 -0
  4. package/dist/backup/backup.config.js.map +1 -0
  5. package/dist/backup/backup.interface.d.ts +21 -0
  6. package/dist/backup/backup.interface.js +3 -0
  7. package/dist/backup/backup.interface.js.map +1 -0
  8. package/dist/backup/backup.module.d.ts +2 -0
  9. package/dist/backup/backup.module.js +24 -0
  10. package/dist/backup/backup.module.js.map +1 -0
  11. package/dist/backup/backup.service.d.ts +19 -0
  12. package/dist/backup/backup.service.js +229 -0
  13. package/dist/backup/backup.service.js.map +1 -0
  14. package/dist/backup/index.d.ts +4 -0
  15. package/dist/backup/index.js +21 -0
  16. package/dist/backup/index.js.map +1 -0
  17. package/dist/database/database.module.d.ts +2 -0
  18. package/dist/database/database.module.js +34 -0
  19. package/dist/database/database.module.js.map +1 -0
  20. package/dist/database/database.repository.d.ts +62 -0
  21. package/dist/database/database.repository.js +259 -0
  22. package/dist/database/database.repository.js.map +1 -0
  23. package/dist/database/database.scheme.d.ts +45 -0
  24. package/dist/database/database.scheme.js +187 -0
  25. package/dist/database/database.scheme.js.map +1 -0
  26. package/dist/database/database.service.d.ts +7 -0
  27. package/dist/database/database.service.js +39 -0
  28. package/dist/database/database.service.js.map +1 -0
  29. package/dist/database/database.sync.d.ts +10 -0
  30. package/dist/database/database.sync.js +44 -0
  31. package/dist/database/database.sync.js.map +1 -0
  32. package/dist/database/database.transaction.d.ts +17 -0
  33. package/dist/database/database.transaction.js +101 -0
  34. package/dist/database/database.transaction.js.map +1 -0
  35. package/dist/database/database.uniqueId.d.ts +25 -0
  36. package/dist/database/database.uniqueId.js +68 -0
  37. package/dist/database/database.uniqueId.js.map +1 -0
  38. package/dist/database/database.utils.d.ts +10 -0
  39. package/dist/database/database.utils.js +119 -0
  40. package/dist/database/database.utils.js.map +1 -0
  41. package/dist/database/index.d.ts +8 -0
  42. package/dist/database/index.js +25 -0
  43. package/dist/database/index.js.map +1 -0
  44. package/dist/index.d.ts +3 -0
  45. package/dist/index.js +20 -0
  46. package/dist/index.js.map +1 -0
  47. package/dist/service/index.d.ts +1 -0
  48. package/dist/service/index.js +18 -0
  49. package/dist/service/index.js.map +1 -0
  50. package/dist/service/service.d.ts +40 -0
  51. package/dist/service/service.js +182 -0
  52. package/dist/service/service.js.map +1 -0
  53. package/dist/tsconfig.lib.tsbuildinfo +1 -0
  54. package/libs/src/app.controller.ts +84 -0
  55. package/libs/src/app.module.ts +31 -0
  56. package/libs/src/backup/backup.config.ts +45 -0
  57. package/libs/src/backup/backup.interface.ts +21 -0
  58. package/libs/src/backup/backup.module.ts +11 -0
  59. package/libs/src/backup/backup.service.ts +283 -0
  60. package/libs/src/backup/index.ts +4 -0
  61. package/libs/src/database/database.module.ts +26 -0
  62. package/libs/src/database/database.repository.ts +358 -0
  63. package/libs/src/database/database.scheme.ts +128 -0
  64. package/libs/src/database/database.service.ts +36 -0
  65. package/libs/src/database/database.sync.ts +61 -0
  66. package/libs/src/database/database.transaction.ts +101 -0
  67. package/libs/src/database/database.uniqueId.ts +59 -0
  68. package/libs/src/database/database.utils.ts +99 -0
  69. package/libs/src/database/index.ts +8 -0
  70. package/libs/src/index.ts +3 -0
  71. package/libs/src/main.ts +62 -0
  72. package/libs/src/service/index.ts +1 -0
  73. package/libs/src/service/service.ts +201 -0
  74. package/libs/src/test/test.dto.ts +41 -0
  75. package/libs/src/test/test.module.ts +20 -0
  76. package/libs/src/test/test.repository.ts +44 -0
  77. package/libs/src/test/test.resolver.ts +44 -0
  78. package/libs/src/test/test.schema.ts +21 -0
  79. package/libs/src/test/test.service.ts +19 -0
  80. package/libs/tsconfig.lib.json +19 -0
  81. package/nest-cli.json +16 -0
  82. package/package.json +89 -0
  83. package/tsconfig.json +29 -0
  84. package/update-links.js +159 -0
@@ -0,0 +1,259 @@
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
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ var __importDefault = (this && this.__importDefault) || function (mod) {
15
+ return (mod && mod.__esModule) ? mod : { "default": mod };
16
+ };
17
+ var _a;
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.AbstractBaseRepository = void 0;
20
+ const mongoose_1 = require("@nestjs/mongoose");
21
+ const moment_1 = __importDefault(require("moment"));
22
+ const mongoose_2 = require("mongoose");
23
+ const mongoose_delete_1 = require("mongoose-delete");
24
+ const database_scheme_1 = require("./database.scheme");
25
+ const database_uniqueId_1 = require("./database.uniqueId");
26
+ const database_utils_1 = require("./database.utils");
27
+ const common_1 = require("@nestjs/common");
28
+ let AbstractBaseRepository = class AbstractBaseRepository {
29
+ constructor(dbModel) {
30
+ this.dbModel = dbModel;
31
+ this._session = null;
32
+ }
33
+ set session(v) {
34
+ this._session = v;
35
+ }
36
+ get session() {
37
+ return this._session;
38
+ }
39
+ get hasSession() {
40
+ return !!this._session && !this._session.hasEnded;
41
+ }
42
+ mapIds(query) {
43
+ return database_utils_1.DbUtils.mapToObjectIds(query);
44
+ }
45
+ async create(data) {
46
+ return await this._create(data);
47
+ }
48
+ async findById(id) {
49
+ return await this._findById(id);
50
+ }
51
+ async findOne(query) {
52
+ return await this._findOne(query);
53
+ }
54
+ async find(query) {
55
+ return await this._find(query);
56
+ }
57
+ async update(id, data) {
58
+ return this._update(id, data);
59
+ }
60
+ async updateMany(query, model) {
61
+ await this._updateMany(query, model);
62
+ }
63
+ async delete(id) {
64
+ await this._delete(id);
65
+ }
66
+ async deleteMany(query) {
67
+ await this._deleteMany(query);
68
+ }
69
+ async aggregate(pipeline) {
70
+ if (!this.hasSession)
71
+ return await this.dbModel.aggregate(pipeline).session(this.session);
72
+ return await this.dbModel.aggregate(pipeline).session(this.session);
73
+ }
74
+ async page(page) {
75
+ return await this._page(page);
76
+ }
77
+ async findLast(query) {
78
+ return await this._findLast(query);
79
+ }
80
+ async count(query) {
81
+ return this._count(query);
82
+ }
83
+ async _count(query) {
84
+ query = this.mapIds(query);
85
+ return this.dbModel.countDocuments(query);
86
+ }
87
+ async _create(data) {
88
+ const payload = await this.mapData(data, true);
89
+ payload._id = payload._id
90
+ ? new mongoose_2.Types.ObjectId(payload._id?.toString())
91
+ : this.getObjectId();
92
+ const created = new this.dbModel(payload);
93
+ if (!this.hasSession) {
94
+ const saved = await created.save();
95
+ return await this.findById(saved._id);
96
+ }
97
+ const saved = await created.save({ session: this.session });
98
+ return await this.findById(saved._id);
99
+ }
100
+ async _findById(id) {
101
+ const findQuery = this.dbModel.findById(new mongoose_2.Types.ObjectId(id?.toString()));
102
+ if (this.hasSession) {
103
+ findQuery.session(this.session);
104
+ }
105
+ return findQuery.exec().then((res) => res?._doc || res);
106
+ }
107
+ async _findOne(query) {
108
+ query = this.mapIds(query);
109
+ const findQuery = this.dbModel.findOne(query);
110
+ if (this.hasSession) {
111
+ findQuery.session(this.session);
112
+ }
113
+ return findQuery.exec().then((res) => res?._doc || res);
114
+ }
115
+ async _find(query) {
116
+ if (query._id) {
117
+ query._id = new mongoose_2.Types.ObjectId(query._id);
118
+ }
119
+ query = this.mapIds(query);
120
+ const findQuery = this.dbModel
121
+ .find(query)
122
+ .sort({ createdAt: -1 });
123
+ if (this.hasSession) {
124
+ findQuery.session(this.session);
125
+ }
126
+ return findQuery.exec().then((res) => res?._doc || res);
127
+ }
128
+ async _update(id, data) {
129
+ delete data._id;
130
+ const payload = await this.mapData(data, false);
131
+ await this.dbModel
132
+ .updateOne({ _id: new mongoose_2.Types.ObjectId(id) }, { $set: payload }, {
133
+ ...(this.hasSession && { session: this.session }),
134
+ })
135
+ .exec();
136
+ return await this.findById(id);
137
+ }
138
+ async _updateMany(query, model) {
139
+ delete model._id;
140
+ query = this.mapIds(query);
141
+ model = this.mapIds(model);
142
+ await this.dbModel
143
+ .updateMany(query, {
144
+ ...model,
145
+ updatedAt: Date.now(),
146
+ }, this.hasSession ? { new: true, session: this.session } : {})
147
+ .exec();
148
+ }
149
+ async _delete(id) {
150
+ const deleteQuery = this.dbModel.findByIdAndDelete(new mongoose_2.Types.ObjectId(id));
151
+ if (this.hasSession) {
152
+ deleteQuery.session(this.session);
153
+ }
154
+ await deleteQuery.exec();
155
+ }
156
+ async _deleteMany(query) {
157
+ query = this.mapIds(query);
158
+ const deleteQuery = this.dbModel.deleteMany(query);
159
+ if (this.hasSession) {
160
+ deleteQuery.session(this.session);
161
+ }
162
+ await deleteQuery.exec();
163
+ }
164
+ async _findLast(query) {
165
+ query = this.mapIds(query);
166
+ const findQuery = this.dbModel
167
+ .find(query)
168
+ .limit(1)
169
+ .sort({ createdAt: -1 });
170
+ if (this.hasSession) {
171
+ findQuery.session(this.session);
172
+ }
173
+ const result = await findQuery.exec();
174
+ return result.length === 0 ? null : result[0];
175
+ }
176
+ async _page(page, $lookups) {
177
+ const query = this.buildQuery(page);
178
+ return this.aggregate([
179
+ ...(!!$lookups?.length ? $lookups : []),
180
+ ...(Array.isArray(query) ? query : [query]),
181
+ { $sort: { createdAt: -1 } },
182
+ { ...(0, database_scheme_1.handlePageFacet)(page) },
183
+ ]).then((database_scheme_1.handlePageResult));
184
+ }
185
+ schemaKeysQuery(schema, options, addMatchCondition) {
186
+ const { query, ignoreKeys } = options;
187
+ Object.keys(schema.obj).forEach((key) => {
188
+ if (query[key] && !ignoreKeys?.includes(key)) {
189
+ addMatchCondition({
190
+ [key]: schema.path(key).instance === "Mixed"
191
+ ? this.toObjectId(query[key])
192
+ : query[key],
193
+ });
194
+ }
195
+ });
196
+ if (query?.keyword && options.searchKeys?.length) {
197
+ const keywordValue = query?.keyword;
198
+ const globalSearchConditions = options.searchKeys?.map((field) => ({
199
+ [field]: { $regex: keywordValue, $options: "i" },
200
+ }));
201
+ if (globalSearchConditions.length > 0) {
202
+ addMatchCondition({ $or: globalSearchConditions });
203
+ }
204
+ }
205
+ if (query?.fromDate && query?.toDate) {
206
+ addMatchCondition({
207
+ createdAt: {
208
+ $gte: (0, moment_1.default)(query.fromDate).startOf("day").valueOf(),
209
+ $lte: (0, moment_1.default)(query.toDate).endOf("day").valueOf(),
210
+ },
211
+ });
212
+ }
213
+ if (query?.ref) {
214
+ addMatchCondition({
215
+ ref: { $regex: query.ref?.toUpperCase(), $options: "i" },
216
+ });
217
+ }
218
+ }
219
+ cleanupQuery(andConditions) {
220
+ if (andConditions.length === 0) {
221
+ return { $match: {} };
222
+ }
223
+ if (andConditions.length === 1) {
224
+ return { $match: andConditions[0] };
225
+ }
226
+ return { $match: { $and: andConditions } };
227
+ }
228
+ getObjectId() {
229
+ return this.uniqueIdGenerator.getObjectId();
230
+ }
231
+ toObjectId(value) {
232
+ return new mongoose_2.Types.ObjectId(value?.toString());
233
+ }
234
+ async generateUniqueId(key) {
235
+ return await this.uniqueIdGenerator.getNextUniqueId(key);
236
+ }
237
+ async generateRef(ref) {
238
+ const key = ref?.key || "uniqueId";
239
+ const prefix = ref?.prefix;
240
+ try {
241
+ const newRefNumber = await this.uniqueIdGenerator.getNextUniqueId(key);
242
+ return prefix ? `${prefix}-${newRefNumber}` : `${newRefNumber}`;
243
+ }
244
+ catch (error) {
245
+ console.error("Error generating reference:", error);
246
+ throw new Error("Failed to generate reference");
247
+ }
248
+ }
249
+ };
250
+ exports.AbstractBaseRepository = AbstractBaseRepository;
251
+ __decorate([
252
+ (0, common_1.Inject)(database_uniqueId_1.ApUniqueIdGenerator),
253
+ __metadata("design:type", database_uniqueId_1.ApUniqueIdGenerator)
254
+ ], AbstractBaseRepository.prototype, "uniqueIdGenerator", void 0);
255
+ exports.AbstractBaseRepository = AbstractBaseRepository = __decorate([
256
+ __param(0, (0, mongoose_1.InjectModel)("MODEL_NAME")),
257
+ __metadata("design:paramtypes", [typeof (_a = typeof mongoose_delete_1.SoftDeleteModel !== "undefined" && mongoose_delete_1.SoftDeleteModel) === "function" ? _a : Object])
258
+ ], AbstractBaseRepository);
259
+ //# sourceMappingURL=database.repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.repository.js","sourceRoot":"","sources":["../../libs/src/database/database.repository.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import { Types } from "mongoose";
2
+ export declare class BaseSchema {
3
+ _id: Types.ObjectId;
4
+ ref: string;
5
+ branchId: Types.ObjectId;
6
+ createdAt: number;
7
+ createdBy: Types.ObjectId;
8
+ updatedAt: number;
9
+ updatedBy: Types.ObjectId;
10
+ deletedAt: number;
11
+ deletedBy: Types.ObjectId;
12
+ deleted: boolean;
13
+ documentDate: number;
14
+ documentNumber: string;
15
+ canDelete: boolean;
16
+ canUpdate: boolean;
17
+ storeId: Types.ObjectId;
18
+ companyId: Types.ObjectId;
19
+ employeeId: Types.ObjectId;
20
+ static toObjectId(value: string): string | any[] | Types.ObjectId;
21
+ static toUnixTimestamp(value: number | string): number;
22
+ }
23
+ export interface IPageParams extends BaseSchema {
24
+ skip: number;
25
+ take: number;
26
+ }
27
+ export interface IPageResult<T> {
28
+ totalRecords: number;
29
+ data: Array<T>;
30
+ }
31
+ export declare const handlePageFacet: (page: any) => {
32
+ $facet: {
33
+ data: ({
34
+ $skip: number;
35
+ $limit?: undefined;
36
+ } | {
37
+ $limit: number;
38
+ $skip?: undefined;
39
+ })[];
40
+ totalRecords: {
41
+ $count: string;
42
+ }[];
43
+ };
44
+ };
45
+ export declare const handlePageResult: <T>(res: any) => IPageResult<T>;
@@ -0,0 +1,187 @@
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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
19
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
20
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
21
+ 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;
22
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
23
+ };
24
+ var __importStar = (this && this.__importStar) || (function () {
25
+ var ownKeys = function(o) {
26
+ ownKeys = Object.getOwnPropertyNames || function (o) {
27
+ var ar = [];
28
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
+ return ar;
30
+ };
31
+ return ownKeys(o);
32
+ };
33
+ return function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ })();
41
+ var __metadata = (this && this.__metadata) || function (k, v) {
42
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
43
+ };
44
+ var __importDefault = (this && this.__importDefault) || function (mod) {
45
+ return (mod && mod.__esModule) ? mod : { "default": mod };
46
+ };
47
+ Object.defineProperty(exports, "__esModule", { value: true });
48
+ exports.handlePageResult = exports.handlePageFacet = exports.BaseSchema = void 0;
49
+ const mongoose_1 = require("@nestjs/mongoose");
50
+ const moment_1 = __importDefault(require("moment"));
51
+ const mongoose_2 = __importStar(require("mongoose"));
52
+ class BaseSchema {
53
+ static toObjectId(value) {
54
+ try {
55
+ if (Array.isArray(value)) {
56
+ return value.map((v) => mongoose_2.default.Types.ObjectId.isValid(v)
57
+ ? new mongoose_2.default.Types.ObjectId(v)
58
+ : v);
59
+ }
60
+ else if (mongoose_2.default.Types.ObjectId.isValid(value)) {
61
+ return new mongoose_2.default.Types.ObjectId(value);
62
+ }
63
+ else if (typeof value === "string") {
64
+ return new mongoose_2.default.Types.ObjectId(value);
65
+ }
66
+ }
67
+ catch (error) {
68
+ return value;
69
+ }
70
+ }
71
+ static toUnixTimestamp(value) {
72
+ if (!value) {
73
+ return (0, moment_1.default)().valueOf();
74
+ }
75
+ if (typeof value === "number" && !Number.isNaN(value)) {
76
+ return value;
77
+ }
78
+ const momentDate = (0, moment_1.default)(value);
79
+ if (momentDate.isValid()) {
80
+ return momentDate.valueOf();
81
+ }
82
+ return (0, moment_1.default)().valueOf();
83
+ }
84
+ }
85
+ exports.BaseSchema = BaseSchema;
86
+ __decorate([
87
+ (0, mongoose_1.Prop)({ set: (val) => BaseSchema.toObjectId(val) }),
88
+ __metadata("design:type", mongoose_2.Types.ObjectId)
89
+ ], BaseSchema.prototype, "_id", void 0);
90
+ __decorate([
91
+ (0, mongoose_1.Prop)({ required: true, unique: true }),
92
+ __metadata("design:type", String)
93
+ ], BaseSchema.prototype, "ref", void 0);
94
+ __decorate([
95
+ (0, mongoose_1.Prop)({ set: (val) => BaseSchema.toObjectId(val) }),
96
+ __metadata("design:type", mongoose_2.Types.ObjectId)
97
+ ], BaseSchema.prototype, "branchId", void 0);
98
+ __decorate([
99
+ (0, mongoose_1.Prop)({ set: (val) => (0, moment_1.default)(val).valueOf() }),
100
+ __metadata("design:type", Number)
101
+ ], BaseSchema.prototype, "createdAt", void 0);
102
+ __decorate([
103
+ (0, mongoose_1.Prop)({ set: (val) => new mongoose_2.Types.ObjectId(val) }),
104
+ __metadata("design:type", mongoose_2.Types.ObjectId)
105
+ ], BaseSchema.prototype, "createdBy", void 0);
106
+ __decorate([
107
+ (0, mongoose_1.Prop)({ set: (val) => (0, moment_1.default)(val).valueOf() }),
108
+ __metadata("design:type", Number)
109
+ ], BaseSchema.prototype, "updatedAt", void 0);
110
+ __decorate([
111
+ (0, mongoose_1.Prop)({ set: (val) => new mongoose_2.Types.ObjectId(val) }),
112
+ __metadata("design:type", mongoose_2.Types.ObjectId)
113
+ ], BaseSchema.prototype, "updatedBy", void 0);
114
+ __decorate([
115
+ (0, mongoose_1.Prop)({ set: (val) => (0, moment_1.default)(val).valueOf() }),
116
+ __metadata("design:type", Number)
117
+ ], BaseSchema.prototype, "deletedAt", void 0);
118
+ __decorate([
119
+ (0, mongoose_1.Prop)({ set: (val) => new mongoose_2.Types.ObjectId(val) }),
120
+ __metadata("design:type", mongoose_2.Types.ObjectId)
121
+ ], BaseSchema.prototype, "deletedBy", void 0);
122
+ __decorate([
123
+ (0, mongoose_1.Prop)({ set: (val) => (0, moment_1.default)(val).valueOf() }),
124
+ __metadata("design:type", Boolean)
125
+ ], BaseSchema.prototype, "deleted", void 0);
126
+ __decorate([
127
+ (0, mongoose_1.Prop)({ set: (val) => (0, moment_1.default)(val).valueOf() }),
128
+ __metadata("design:type", Number)
129
+ ], BaseSchema.prototype, "documentDate", void 0);
130
+ __decorate([
131
+ (0, mongoose_1.Prop)({
132
+ validate: {
133
+ validator: function (v) {
134
+ return (v === undefined ||
135
+ v === null ||
136
+ v === "" ||
137
+ this.model(this.constructor.modelName)
138
+ .countDocuments({
139
+ documentNumber: v,
140
+ _id: { $ne: BaseSchema.toObjectId(this._id) },
141
+ })
142
+ .then((count) => count === 0));
143
+ },
144
+ message: "documentNumber must be unique if not empty",
145
+ },
146
+ }),
147
+ __metadata("design:type", String)
148
+ ], BaseSchema.prototype, "documentNumber", void 0);
149
+ __decorate([
150
+ (0, mongoose_1.Prop)({ default: false }),
151
+ __metadata("design:type", Boolean)
152
+ ], BaseSchema.prototype, "canDelete", void 0);
153
+ __decorate([
154
+ (0, mongoose_1.Prop)({ default: false }),
155
+ __metadata("design:type", Boolean)
156
+ ], BaseSchema.prototype, "canUpdate", void 0);
157
+ __decorate([
158
+ (0, mongoose_1.Prop)({ set: (val) => (val === "" ? undefined : new mongoose_2.Types.ObjectId(val)) }),
159
+ __metadata("design:type", mongoose_2.Types.ObjectId)
160
+ ], BaseSchema.prototype, "storeId", void 0);
161
+ __decorate([
162
+ (0, mongoose_1.Prop)({ set: (val) => new mongoose_2.Types.ObjectId(val) }),
163
+ __metadata("design:type", mongoose_2.Types.ObjectId)
164
+ ], BaseSchema.prototype, "companyId", void 0);
165
+ __decorate([
166
+ (0, mongoose_1.Prop)({ set: (val) => new mongoose_2.Types.ObjectId(val) }),
167
+ __metadata("design:type", mongoose_2.Types.ObjectId)
168
+ ], BaseSchema.prototype, "employeeId", void 0);
169
+ const handlePageFacet = (page) => {
170
+ return {
171
+ $facet: {
172
+ data: [{ $skip: Number(page.skip) }, { $limit: Number(page.take) }],
173
+ totalRecords: [{ $count: "count" }],
174
+ },
175
+ };
176
+ };
177
+ exports.handlePageFacet = handlePageFacet;
178
+ const handlePageResult = (res) => {
179
+ let rs = res[0];
180
+ if (rs.totalRecords.length)
181
+ rs = { ...rs, totalRecords: rs.totalRecords[0].count };
182
+ else
183
+ rs = { ...rs, totalRecords: 0 };
184
+ return rs;
185
+ };
186
+ exports.handlePageResult = handlePageResult;
187
+ //# sourceMappingURL=database.scheme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.scheme.js","sourceRoot":"","sources":["../../libs/src/database/database.scheme.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAAwC;AACxC,oDAA4B;AAC5B,qDAA2C;AAE3C,MAAa,UAAU;IA6DrB,MAAM,CAAC,UAAU,CAAC,KAAa;QAC7B,IAAI,CAAC;YACH,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACrB,kBAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;oBAChC,CAAC,CAAC,IAAI,kBAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;oBAChC,CAAC,CAAC,CAAC,CACN,CAAC;YACJ,CAAC;iBAAM,IAAI,kBAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBAClD,OAAO,IAAI,kBAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC5C,CAAC;iBAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBACrC,OAAO,IAAI,kBAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,MAAM,CAAC,eAAe,CAAC,KAAsB;QAC3C,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,IAAA,gBAAM,GAAE,CAAC,OAAO,EAAE,CAAC;QAC5B,CAAC;QAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YACtD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,UAAU,GAAG,IAAA,gBAAM,EAAC,KAAK,CAAC,CAAC;QACjC,IAAI,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC;YACzB,OAAO,UAAU,CAAC,OAAO,EAAE,CAAC;QAC9B,CAAC;QAED,OAAO,IAAA,gBAAM,GAAE,CAAC,OAAO,EAAE,CAAC;IAC5B,CAAC;CACF;AA/FD,gCA+FC;AA7FC;IADC,IAAA,eAAI,EAAC,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;8BAC9C,gBAAK,CAAC,QAAQ;uCAAC;AAEpB;IADC,IAAA,eAAI,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;;uCAC3B;AAEZ;IADC,IAAA,eAAI,EAAC,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;8BACzC,gBAAK,CAAC,QAAQ;4CAAC;AAEzB;IADC,IAAA,eAAI,EAAC,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAA,gBAAM,EAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;;6CAC5B;AAElB;IADC,IAAA,eAAI,EAAC,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,gBAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;8BACrC,gBAAK,CAAC,QAAQ;6CAAC;AAE1B;IADC,IAAA,eAAI,EAAC,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAA,gBAAM,EAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;;6CAC5B;AAElB;IADC,IAAA,eAAI,EAAC,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,gBAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;8BACrC,gBAAK,CAAC,QAAQ;6CAAC;AAE1B;IADC,IAAA,eAAI,EAAC,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAA,gBAAM,EAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;;6CAC5B;AAElB;IADC,IAAA,eAAI,EAAC,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,gBAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;8BACrC,gBAAK,CAAC,QAAQ;6CAAC;AAE1B;IADC,IAAA,eAAI,EAAC,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAA,gBAAM,EAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;;2CAC7B;AAGjB;IADC,IAAA,eAAI,EAAC,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAA,gBAAM,EAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;;gDACzB;AAqBrB;IAnBC,IAAA,eAAI,EAAC;QACJ,QAAQ,EAAE;YACR,SAAS,EAAE,UAAU,CAAC;gBAEpB,OAAO,CACL,CAAC,KAAK,SAAS;oBACf,CAAC,KAAK,IAAI;oBACV,CAAC,KAAK,EAAE;oBACR,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC;yBACnC,cAAc,CAAC;wBACd,cAAc,EAAE,CAAC;wBACjB,GAAG,EAAE,EAAE,GAAG,EAAE,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;qBAC9C,CAAC;yBACD,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,CAAC,CAAC,CAChC,CAAC;YACJ,CAAC;YACD,OAAO,EAAE,4CAA4C;SACtD;KACF,CAAC;;kDACqB;AAGvB;IADC,IAAA,eAAI,EAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;;6CACN;AAGnB;IADC,IAAA,eAAI,EAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;;6CACN;AAGnB;IADC,IAAA,eAAI,EAAC,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,gBAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;8BAClE,gBAAK,CAAC,QAAQ;2CAAC;AAGxB;IADC,IAAA,eAAI,EAAC,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,gBAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;8BACrC,gBAAK,CAAC,QAAQ;6CAAC;AAG1B;IADC,IAAA,eAAI,EAAC,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,gBAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;8BACpC,gBAAK,CAAC,QAAQ;8CAAC;AAgDtB,MAAM,eAAe,GAAG,CAAC,IAAS,EAAE,EAAE;IAC3C,OAAO;QACL,MAAM,EAAE;YACN,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACnE,YAAY,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;SACpC;KACF,CAAC;AACJ,CAAC,CAAC;AAPW,QAAA,eAAe,mBAO1B;AAEK,MAAM,gBAAgB,GAAG,CAAI,GAAQ,EAAkB,EAAE;IAC9D,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC,CAAQ,CAAC;IACvB,IAAI,EAAE,CAAC,YAAY,CAAC,MAAM;QACxB,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;;QACpD,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;IAErC,OAAO,EAAE,CAAC;AACZ,CAAC,CAAC;AAPW,QAAA,gBAAgB,oBAO3B"}
@@ -0,0 +1,7 @@
1
+ import { Connection } from "mongoose";
2
+ export declare class DatabaseService {
3
+ private _connectionId;
4
+ private connections;
5
+ setConnection(companyId: string): Connection;
6
+ getConnection(): Connection;
7
+ }
@@ -0,0 +1,39 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.DatabaseService = void 0;
10
+ const common_1 = require("@nestjs/common");
11
+ const mongoose_1 = require("mongoose");
12
+ let DatabaseService = class DatabaseService {
13
+ constructor() {
14
+ this._connectionId = process.env.mongodb_default_db_name;
15
+ this.connections = new Map();
16
+ }
17
+ setConnection(companyId) {
18
+ this._connectionId = companyId
19
+ ? companyId
20
+ : process.env.mongodb_default_db_name;
21
+ if (this.connections.has(companyId)) {
22
+ return this.connections.get(companyId);
23
+ }
24
+ const connection = (0, mongoose_1.createConnection)(process.env.mongodb_url?.replace("{{db_name}}", companyId));
25
+ this.connections.set(companyId, connection);
26
+ return connection;
27
+ }
28
+ getConnection() {
29
+ if (this.connections.has(this._connectionId)) {
30
+ return this.connections.get(this._connectionId);
31
+ }
32
+ return this.setConnection(this._connectionId);
33
+ }
34
+ };
35
+ exports.DatabaseService = DatabaseService;
36
+ exports.DatabaseService = DatabaseService = __decorate([
37
+ (0, common_1.Injectable)({})
38
+ ], DatabaseService);
39
+ //# sourceMappingURL=database.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.service.js","sourceRoot":"","sources":["../../libs/src/database/database.service.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAA4C;AAC5C,uCAAwD;AAGjD,IAAM,eAAe,GAArB,MAAM,eAAe;IAArB;QACG,kBAAa,GAAW,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;QAC5D,gBAAW,GAA4B,IAAI,GAAG,EAAE,CAAC;IA6B3D,CAAC;IA3BQ,aAAa,CAAC,SAAiB;QACpC,IAAI,CAAC,aAAa,GAAG,SAAS;YAC5B,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;QAGxC,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YACpC,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACzC,CAAC;QAGD,MAAM,UAAU,GAAG,IAAA,2BAAgB,EACjC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,aAAa,EAAE,SAAS,CAAC,CAC3D,CAAC;QAEF,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QAE5C,OAAO,UAAU,CAAC;IACpB,CAAC;IAEM,aAAa;QAElB,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;YAC7C,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAClD,CAAC;QACD,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAChD,CAAC;CACF,CAAA;AA/BY,0CAAe;0BAAf,eAAe;IAD3B,IAAA,mBAAU,EAAC,EAAE,CAAC;GACF,eAAe,CA+B3B"}
@@ -0,0 +1,10 @@
1
+ import { MongoClient } from "mongodb";
2
+ interface RealtimeSyncOptions {
3
+ sourceUri: string;
4
+ targetUri: string;
5
+ collection: string;
6
+ sourceClient: MongoClient;
7
+ targetClient: MongoClient;
8
+ }
9
+ export declare function realtimeSync(options: RealtimeSyncOptions): Promise<void>;
10
+ export {};
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.realtimeSync = realtimeSync;
4
+ const dotenv_1 = require("dotenv");
5
+ (0, dotenv_1.config)();
6
+ async function realtimeSync(options) {
7
+ const { sourceUri, targetUri, collection, sourceClient, targetClient } = options;
8
+ await sourceClient.connect();
9
+ await targetClient.connect();
10
+ const getDbName = (uri) => {
11
+ const match = uri.match(/\/(\w+)(\?|$)/);
12
+ return match ? match[1] : undefined;
13
+ };
14
+ const sourceDB = getDbName(sourceUri);
15
+ const targetDB = getDbName(targetUri);
16
+ console.log(`🔗 Connected to source DB: ${sourceDB}`);
17
+ console.log(`🔗 Connected to target DB: ${targetDB}`);
18
+ if (!sourceDB || !targetDB) {
19
+ throw new Error("Database name must be specified in both connection strings.");
20
+ }
21
+ const source = sourceClient.db(sourceDB).collection(collection);
22
+ const target = targetClient.db(targetDB).collection(collection);
23
+ const changeStream = source.watch([], { fullDocument: "updateLookup" });
24
+ console.log(`📡 Watching changes on ${sourceDB}.${collection}...`);
25
+ changeStream.on("change", async (change) => {
26
+ const { operationType, fullDocument, documentKey } = change;
27
+ try {
28
+ if (operationType === "insert" && fullDocument) {
29
+ await target.replaceOne({ _id: fullDocument._id }, fullDocument, { upsert: true });
30
+ }
31
+ else if ((operationType === "update" || operationType === "replace") && fullDocument) {
32
+ await target.replaceOne({ _id: documentKey._id }, fullDocument, { upsert: true });
33
+ }
34
+ else if (operationType === "delete") {
35
+ await target.deleteOne({ _id: documentKey._id });
36
+ }
37
+ console.log(`🔄 Synced ${operationType} for _id=${documentKey._id}`);
38
+ }
39
+ catch (error) {
40
+ console.error(`❌ Error syncing ${operationType} for _id=${documentKey._id}:`, error);
41
+ }
42
+ });
43
+ }
44
+ //# sourceMappingURL=database.sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.sync.js","sourceRoot":"","sources":["../../libs/src/database/database.sync.ts"],"names":[],"mappings":";;AAYA,oCAgDC;AA5DD,mCAAgC;AAEhC,IAAA,eAAM,GAAE,CAAC;AAUF,KAAK,UAAU,YAAY,CAAC,OAA4B;IAC7D,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC;IAIjF,MAAM,YAAY,CAAC,OAAO,EAAE,CAAC;IAC7B,MAAM,YAAY,CAAC,OAAO,EAAE,CAAC;IAG7B,MAAM,SAAS,GAAG,CAAC,GAAW,EAAE,EAAE;QAChC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QACzC,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACtC,CAAC,CAAC;IACF,MAAM,QAAQ,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;IACtC,MAAM,QAAQ,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;IAEtC,OAAO,CAAC,GAAG,CAAC,8BAA8B,QAAQ,EAAE,CAAC,CAAC;IACtD,OAAO,CAAC,GAAG,CAAC,8BAA8B,QAAQ,EAAE,CAAC,CAAC;IAEtD,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;IACjF,CAAC;IAED,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IAChE,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IAEhE,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,YAAY,EAAE,cAAc,EAAE,CAAC,CAAC;IAExE,OAAO,CAAC,GAAG,CAAC,0BAA0B,QAAQ,IAAI,UAAU,KAAK,CAAC,CAAC;IAEnE,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,MAA8C,EAAE,EAAE;QACjF,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,EAAE,GAAQ,MAAM,CAAC;QAEjE,IAAI,CAAC;YACH,IAAI,aAAa,KAAK,QAAQ,IAAI,YAAY,EAAE,CAAC;gBAE/C,MAAM,MAAM,CAAC,UAAU,CAAC,EAAE,GAAG,EAAE,YAAY,CAAC,GAAG,EAAE,EAAE,YAAY,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YACrF,CAAC;iBAAM,IAAI,CAAC,aAAa,KAAK,QAAQ,IAAI,aAAa,KAAK,SAAS,CAAC,IAAI,YAAY,EAAE,CAAC;gBACvF,MAAM,MAAM,CAAC,UAAU,CAAC,EAAE,GAAG,EAAE,WAAW,CAAC,GAAG,EAAE,EAAE,YAAY,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YACpF,CAAC;iBAAM,IAAI,aAAa,KAAK,QAAQ,EAAE,CAAC;gBACtC,MAAM,MAAM,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC;YACnD,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,aAAa,aAAa,YAAY,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC;QACvE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,mBAAmB,aAAa,YAAY,WAAW,CAAC,GAAG,GAAG,EAAE,KAAK,CAAC,CAAC;QACvF,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,17 @@
1
+ import mongodb, { Connection } from "mongoose";
2
+ import { DatabaseService } from "./database.service";
3
+ export type TransactionSession = mongodb.ClientSession;
4
+ export declare class TransactionManager {
5
+ private readonly connection;
6
+ private dbSvc;
7
+ private _session;
8
+ private _sessionName;
9
+ constructor(connection: Connection, dbSvc: DatabaseService);
10
+ private getSession;
11
+ startTransaction(): Promise<TransactionSession>;
12
+ commitTransaction(retries?: number): Promise<void>;
13
+ abortTransaction(): Promise<void>;
14
+ endTransaction(): Promise<void>;
15
+ get sessionName(): string;
16
+ set sessionName(name: string);
17
+ }