@nest-extended/mongoose 0.0.1-beta-1 → 0.0.1-beta-9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +44 -4
- package/package.json +7 -22
- package/src/common/ensureObjectId.d.ts +3 -0
- package/src/common/ensureObjectId.js +14 -0
- package/src/common/ensureObjectId.js.map +1 -0
- package/src/common/nestify.d.ts +3 -0
- package/src/common/nestify.js +32 -0
- package/src/common/nestify.js.map +1 -0
- package/src/common/query.utils.d.ts +16 -0
- package/src/common/query.utils.js +134 -0
- package/src/common/query.utils.js.map +1 -0
- package/src/index.d.ts +5 -0
- package/src/index.js +9 -0
- package/src/index.js.map +1 -0
- package/src/lib/mongoose.d.ts +1 -0
- package/src/lib/mongoose.js +7 -0
- package/src/lib/mongoose.js.map +1 -0
- package/src/lib/nest.service.d.ts +25 -0
- package/src/lib/nest.service.js +159 -0
- package/src/lib/nest.service.js.map +1 -0
- package/src/types/Nestify.d.ts +13 -0
- package/src/types/Nestify.js +3 -0
- package/src/types/Nestify.js.map +1 -0
package/README.md
CHANGED
|
@@ -1,7 +1,47 @@
|
|
|
1
|
-
# mongoose
|
|
1
|
+
# @nest-extended/mongoose
|
|
2
2
|
|
|
3
|
-
This
|
|
3
|
+
This package provides powerful Mongoose integrations for the **NestExtended** ecosystem, offering a robust service layer with built-in pagination, filtering, and soft delete capabilities.
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## Key Features
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
- **NestService**: A generic service class (`NestService<DTO, Document>`) that provides:
|
|
8
|
+
- **CRUD Operations**: `_find`, `_get`, `_create`, `_patch`, `_remove`.
|
|
9
|
+
- **Advanced Querying**: Support for `$regex`, `$or`, and standard MongoDB operators.
|
|
10
|
+
- **Pagination**: Built-in pagination logic using `skip` and `limit`.
|
|
11
|
+
- **Soft Delete**: Configurable soft delete support (requires `@nest-extended/core` integration).
|
|
12
|
+
- **Utilities**:
|
|
13
|
+
- `ensureObjectId`: Helper to validate and convert strings to MongoDB ObjectIds.
|
|
14
|
+
- `nestify`: Query helper for applying filters, sorting, and pagination.
|
|
15
|
+
|
|
16
|
+
## Usage
|
|
17
|
+
|
|
18
|
+
### NestService
|
|
19
|
+
|
|
20
|
+
Extend `NestService` to create a service with full CRUD capabilities.
|
|
21
|
+
|
|
22
|
+
```typescript
|
|
23
|
+
import { NestService } from '@nest-extended/mongoose';
|
|
24
|
+
import { InjectModel } from '@nestjs/mongoose';
|
|
25
|
+
import { Model } from 'mongoose';
|
|
26
|
+
import { Cat, CatDocument } from './schemas/cat.schema';
|
|
27
|
+
|
|
28
|
+
@Injectable()
|
|
29
|
+
export class CatsService extends NestService<Cat, CatDocument> {
|
|
30
|
+
constructor(@InjectModel(Cat.name) catModel: Model<CatDocument>) {
|
|
31
|
+
super(catModel);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### Querying
|
|
37
|
+
|
|
38
|
+
You can use the `_find` method with query objects:
|
|
39
|
+
|
|
40
|
+
```typescript
|
|
41
|
+
const results = await this.catsService._find({
|
|
42
|
+
name: { $regex: 'kitty', $options: 'i' },
|
|
43
|
+
age: { $gt: 5 },
|
|
44
|
+
$sort: { createdAt: -1 },
|
|
45
|
+
$limit: 10
|
|
46
|
+
});
|
|
47
|
+
```
|
package/package.json
CHANGED
|
@@ -1,27 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nest-extended/mongoose",
|
|
3
|
-
"version": "0.0.1-beta-
|
|
4
|
-
"type": "module",
|
|
3
|
+
"version": "0.0.1-beta-9",
|
|
5
4
|
"private": false,
|
|
6
|
-
"
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
"main": "./dist/index.js",
|
|
10
|
-
"module": "./dist/index.js",
|
|
11
|
-
"types": "./dist/index.d.ts",
|
|
12
|
-
"exports": {
|
|
13
|
-
"./package.json": "./package.json",
|
|
14
|
-
".": {
|
|
15
|
-
"types": "./dist/index.d.ts",
|
|
16
|
-
"import": "./dist/index.js",
|
|
17
|
-
"default": "./dist/index.js"
|
|
18
|
-
}
|
|
19
|
-
},
|
|
20
|
-
"files": [
|
|
21
|
-
"dist",
|
|
22
|
-
"!**/*.tsbuildinfo"
|
|
23
|
-
],
|
|
5
|
+
"type": "commonjs",
|
|
6
|
+
"main": "./src/index.js",
|
|
7
|
+
"types": "./src/index.d.ts",
|
|
24
8
|
"dependencies": {
|
|
25
|
-
"tslib": "^2.3.0"
|
|
9
|
+
"tslib": "^2.3.0",
|
|
10
|
+
"@nest-extended/core": "0.0.1-beta-9"
|
|
26
11
|
}
|
|
27
|
-
}
|
|
12
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const mongoose_1 = require("mongoose");
|
|
4
|
+
const EnsureObjectId = (id) => {
|
|
5
|
+
if (typeof id === 'string') {
|
|
6
|
+
if (!mongoose_1.Types.ObjectId.isValid(id)) {
|
|
7
|
+
throw new Error('Invalid ObjectId');
|
|
8
|
+
}
|
|
9
|
+
return new mongoose_1.Types.ObjectId(id);
|
|
10
|
+
}
|
|
11
|
+
return id;
|
|
12
|
+
};
|
|
13
|
+
exports.default = EnsureObjectId;
|
|
14
|
+
//# sourceMappingURL=ensureObjectId.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ensureObjectId.js","sourceRoot":"","sources":["../../../../../packages/mongoose/src/common/ensureObjectId.ts"],"names":[],"mappings":";;AAAA,uCAAiC;AAEjC,MAAM,cAAc,GAAG,CAAC,EAA2B,EAAkB,EAAE;IACnE,IAAI,OAAO,EAAE,KAAK,QAAQ,EAAE,CAAC;QACzB,IAAI,CAAC,gBAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACxC,CAAC;QACD,OAAO,IAAI,gBAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,EAAE,CAAC;AACd,CAAC,CAAC;AAEF,kBAAe,cAAc,CAAC"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { Document, Query } from 'mongoose';
|
|
2
|
+
import { NestifyFilters, NestifyOptions } from '../types/Nestify';
|
|
3
|
+
export declare function nestify<T extends Document, Q extends Query<any, T, any> = Query<any, T, any>>(q: Q, filters: NestifyFilters, options: NestifyOptions, isSingleOperation?: boolean, isPaginationDisabled?: boolean): void;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.nestify = nestify;
|
|
4
|
+
function nestify(q, filters, options, isSingleOperation = false, isPaginationDisabled = false) {
|
|
5
|
+
if (Array.isArray(filters.$select)) {
|
|
6
|
+
const selectFields = filters.$select.reduce((res, key) => {
|
|
7
|
+
res[key] = 1;
|
|
8
|
+
return res;
|
|
9
|
+
}, {});
|
|
10
|
+
q.select(selectFields);
|
|
11
|
+
}
|
|
12
|
+
else if (typeof filters.$select === 'string' || typeof filters.$select === 'object') {
|
|
13
|
+
q.select(filters.$select);
|
|
14
|
+
}
|
|
15
|
+
if (filters.$populate && options.defaultPagination) {
|
|
16
|
+
q.populate(filters.$populate);
|
|
17
|
+
}
|
|
18
|
+
if (filters.$sort) {
|
|
19
|
+
q.sort(filters.$sort);
|
|
20
|
+
}
|
|
21
|
+
if (!isPaginationDisabled && !isSingleOperation) {
|
|
22
|
+
const limit = Number(filters.$limit) || options.defaultLimit;
|
|
23
|
+
if (limit > 0) {
|
|
24
|
+
q.limit(limit);
|
|
25
|
+
}
|
|
26
|
+
const skip = Number(filters.$skip) || options.defaultSkip;
|
|
27
|
+
if (skip > 0) {
|
|
28
|
+
q.skip(skip);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=nestify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nestify.js","sourceRoot":"","sources":["../../../../../packages/mongoose/src/common/nestify.ts"],"names":[],"mappings":";;AAGA,0BA4CC;AA5CD,SAAgB,OAAO,CAInB,CAAI,EACJ,OAAuB,EACvB,OAAuB,EACvB,oBAA6B,KAAK,EAClC,uBAAgC,KAAK;IAGrC,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACjC,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CACvC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YACT,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACb,OAAO,GAAG,CAAC;QACf,CAAC,EACD,EAAE,CACL,CAAC;QACF,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IAC3B,CAAC;SAAM,IAAI,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ,IAAI,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QACpF,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC;IAED,IAAI,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;QACjD,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAgB,CAAC,CAAC;IACzC,CAAC;IAED,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAChB,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;IAED,IAAI,CAAC,oBAAoB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAE9C,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,YAAY,CAAC;QAC7D,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACZ,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACnB,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,WAAW,CAAC;QAC1D,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;YACX,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjB,CAAC;IACL,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export declare const FILTERS: {
|
|
2
|
+
$sort: (value: any) => any;
|
|
3
|
+
$limit: (value: any, options: any) => any;
|
|
4
|
+
$skip: (value: any) => number | undefined;
|
|
5
|
+
$select: (value: any) => any;
|
|
6
|
+
$populate: (value: any) => any;
|
|
7
|
+
};
|
|
8
|
+
export declare function parse(number?: any): number | undefined;
|
|
9
|
+
export declare const rawQuery: (query: any) => Record<string, any>;
|
|
10
|
+
export declare const OPERATORS: string[];
|
|
11
|
+
export declare const filterQuery: (query: any, options?: any) => {
|
|
12
|
+
filters: {};
|
|
13
|
+
query: {};
|
|
14
|
+
};
|
|
15
|
+
export declare const assignFilters: (object: any, query: any, filters: any, options: any) => any;
|
|
16
|
+
export declare const cleanQuery: (query: any, operators: any, filters: any) => any;
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.cleanQuery = exports.assignFilters = exports.filterQuery = exports.OPERATORS = exports.rawQuery = exports.FILTERS = void 0;
|
|
4
|
+
exports.parse = parse;
|
|
5
|
+
const common_1 = require("@nestjs/common");
|
|
6
|
+
const mongoose_1 = require("mongoose");
|
|
7
|
+
const lodash_1 = require("lodash");
|
|
8
|
+
exports.FILTERS = {
|
|
9
|
+
$sort: (value) => convertSort(value),
|
|
10
|
+
$limit: (value, options) => getLimit(parse(value), options === null || options === void 0 ? void 0 : options.paginate),
|
|
11
|
+
$skip: (value) => parse(value),
|
|
12
|
+
$select: (value) => value,
|
|
13
|
+
$populate: (value) => value,
|
|
14
|
+
};
|
|
15
|
+
function parse(number) {
|
|
16
|
+
if (typeof number !== 'undefined') {
|
|
17
|
+
return Math.abs(parseInt(number, 10));
|
|
18
|
+
}
|
|
19
|
+
return undefined;
|
|
20
|
+
}
|
|
21
|
+
function getLimit(limit, paginate) {
|
|
22
|
+
if (paginate && paginate.default) {
|
|
23
|
+
const lower = typeof limit === 'number' && !isNaN(limit) ? limit : paginate.default;
|
|
24
|
+
const upper = typeof paginate.max === 'number' ? paginate.max : Number.MAX_VALUE;
|
|
25
|
+
return Math.min(lower, upper);
|
|
26
|
+
}
|
|
27
|
+
return limit;
|
|
28
|
+
}
|
|
29
|
+
const rawQuery = (query) => {
|
|
30
|
+
const rawQ = {};
|
|
31
|
+
for (const key in query) {
|
|
32
|
+
if (query.hasOwnProperty(key)) {
|
|
33
|
+
if (key.startsWith('$')) {
|
|
34
|
+
const filterKey = key.slice(1);
|
|
35
|
+
if (filterKey === 'regex') {
|
|
36
|
+
const field = Object.keys(query[key])[0];
|
|
37
|
+
const regexPattern = query[key][field];
|
|
38
|
+
rawQ[field] = { $regex: new RegExp(regexPattern, 'i') };
|
|
39
|
+
}
|
|
40
|
+
else if (filterKey === 'or' && Array.isArray(query[key])) {
|
|
41
|
+
rawQ['$or'] = query[key].map((subQuery) => (0, exports.rawQuery)(subQuery));
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
if (mongoose_1.Types.ObjectId.isValid(String(query[key]))) {
|
|
46
|
+
rawQ[key] = new mongoose_1.Types.ObjectId(query[key]);
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
rawQ[key] = query[key];
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return rawQ;
|
|
55
|
+
};
|
|
56
|
+
exports.rawQuery = rawQuery;
|
|
57
|
+
function convertSort(sort) {
|
|
58
|
+
if (typeof sort !== 'object' || Array.isArray(sort)) {
|
|
59
|
+
return sort;
|
|
60
|
+
}
|
|
61
|
+
return Object.keys(sort).reduce((result, key) => {
|
|
62
|
+
result[key] =
|
|
63
|
+
typeof sort[key] === 'object' ? sort[key] : parseInt(sort[key], 10);
|
|
64
|
+
return result;
|
|
65
|
+
}, {});
|
|
66
|
+
}
|
|
67
|
+
exports.OPERATORS = [
|
|
68
|
+
'$in',
|
|
69
|
+
'$nin',
|
|
70
|
+
'$lt',
|
|
71
|
+
'$lte',
|
|
72
|
+
'$gt',
|
|
73
|
+
'$gte',
|
|
74
|
+
'$ne',
|
|
75
|
+
'$or',
|
|
76
|
+
];
|
|
77
|
+
const filterQuery = (query, options = {}) => {
|
|
78
|
+
const {
|
|
79
|
+
// @ts-ignore
|
|
80
|
+
filters: additionalFilters = {},
|
|
81
|
+
// @ts-ignore
|
|
82
|
+
operators: additionalOperators = [], } = options;
|
|
83
|
+
const result = {
|
|
84
|
+
filters: {},
|
|
85
|
+
query: {},
|
|
86
|
+
};
|
|
87
|
+
result.filters = (0, exports.assignFilters)({}, query, exports.FILTERS, options);
|
|
88
|
+
result.filters = (0, exports.assignFilters)(result.filters, query, additionalFilters, options);
|
|
89
|
+
result.query = (0, exports.cleanQuery)(query, exports.OPERATORS.concat(additionalOperators), result.filters);
|
|
90
|
+
return result;
|
|
91
|
+
};
|
|
92
|
+
exports.filterQuery = filterQuery;
|
|
93
|
+
const assignFilters = (object, query, filters, options) => {
|
|
94
|
+
if (Array.isArray(filters)) {
|
|
95
|
+
lodash_1.default.forEach(filters, (key) => {
|
|
96
|
+
if (query[key] !== undefined) {
|
|
97
|
+
object[key] = query[key];
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
lodash_1.default.forEach(filters, (converter, key) => {
|
|
103
|
+
const converted = converter(query[key], options);
|
|
104
|
+
if (converted !== undefined) {
|
|
105
|
+
object[key] = converted;
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
return object;
|
|
110
|
+
};
|
|
111
|
+
exports.assignFilters = assignFilters;
|
|
112
|
+
const cleanQuery = (query, operators, filters) => {
|
|
113
|
+
if (Array.isArray(query)) {
|
|
114
|
+
return query.map((value) => (0, exports.cleanQuery)(value, operators, filters));
|
|
115
|
+
}
|
|
116
|
+
else if (lodash_1.default.isPlainObject(query)) {
|
|
117
|
+
const result = {};
|
|
118
|
+
lodash_1.default.forEach(query, (value, key) => {
|
|
119
|
+
if (key.startsWith('$')) {
|
|
120
|
+
if (filters[key] === undefined && !operators.includes(key)) {
|
|
121
|
+
throw new common_1.BadRequestException(`Invalid query parameter: ${key}`, query);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
result[key] = (0, exports.cleanQuery)(value, operators, filters);
|
|
125
|
+
});
|
|
126
|
+
Object.getOwnPropertySymbols(query).forEach((symbol) => {
|
|
127
|
+
result[symbol] = query[symbol];
|
|
128
|
+
});
|
|
129
|
+
return result;
|
|
130
|
+
}
|
|
131
|
+
return query;
|
|
132
|
+
};
|
|
133
|
+
exports.cleanQuery = cleanQuery;
|
|
134
|
+
//# sourceMappingURL=query.utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query.utils.js","sourceRoot":"","sources":["../../../../../packages/mongoose/src/common/query.utils.ts"],"names":[],"mappings":"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"}
|
package/src/index.d.ts
ADDED
package/src/index.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
tslib_1.__exportStar(require("./lib/nest.service"), exports);
|
|
5
|
+
tslib_1.__exportStar(require("./common/nestify"), exports);
|
|
6
|
+
tslib_1.__exportStar(require("./common/query.utils"), exports);
|
|
7
|
+
tslib_1.__exportStar(require("./common/ensureObjectId"), exports);
|
|
8
|
+
tslib_1.__exportStar(require("./types/Nestify"), exports);
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
package/src/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/mongoose/src/index.ts"],"names":[],"mappings":";;;AAAA,6DAAmC;AACnC,2DAAiC;AACjC,+DAAqC;AACrC,kEAAwC;AACxC,0DAAgC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function mongoose(): string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mongoose.js","sourceRoot":"","sources":["../../../../../packages/mongoose/src/lib/mongoose.ts"],"names":[],"mappings":";;AAAA,4BAEC;AAFD,SAAgB,QAAQ;IACtB,OAAO,UAAU,CAAC;AACpB,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { Model } from 'mongoose';
|
|
2
|
+
import { PaginatedResponse } from '@nest-extended/core';
|
|
3
|
+
import { NestServiceOptions } from '@nest-extended/core';
|
|
4
|
+
import { RootFilterQuery } from 'mongoose';
|
|
5
|
+
import { SoftDeleteConfig } from '@nest-extended/core';
|
|
6
|
+
export declare class NestService<M, D> {
|
|
7
|
+
private model;
|
|
8
|
+
private options;
|
|
9
|
+
private softDeleteConfig;
|
|
10
|
+
constructor(model: Model<M>, serviceOptions?: NestServiceOptions, softDeleteConfig?: SoftDeleteConfig);
|
|
11
|
+
/**
|
|
12
|
+
* Apply soft delete query filter if soft delete is enabled
|
|
13
|
+
*/
|
|
14
|
+
private applySoftDeleteFilter;
|
|
15
|
+
_find<P extends boolean = true>(query?: Record<string, any>, findOptions?: {
|
|
16
|
+
pagination?: P;
|
|
17
|
+
}): Promise<P extends true ? PaginatedResponse<D> : D[]>;
|
|
18
|
+
_create(data: Partial<D>): Promise<D>;
|
|
19
|
+
_create(data: Partial<D>[]): Promise<D[]>;
|
|
20
|
+
_patch(id: string | null, data: Record<any, any>, query?: Record<string, any>): Promise<D | D[] | null>;
|
|
21
|
+
_get(id: string, query?: Record<string, any>): Promise<D | null>;
|
|
22
|
+
private _getOrFind;
|
|
23
|
+
_remove(id: string | null, query?: Record<string, any>, user?: any): Promise<D | D[] | null>;
|
|
24
|
+
getCount(filter: RootFilterQuery<D>): Promise<number>;
|
|
25
|
+
}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.NestService = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const common_1 = require("@nestjs/common");
|
|
6
|
+
const query_utils_1 = require("../common/query.utils");
|
|
7
|
+
const core_1 = require("@nest-extended/core");
|
|
8
|
+
const nestify_1 = require("../common/nestify");
|
|
9
|
+
const core_2 = require("@nest-extended/core");
|
|
10
|
+
/**
|
|
11
|
+
* Default soft delete configuration.
|
|
12
|
+
* Used when no custom config is provided via NestExtendedModule.forRoot()
|
|
13
|
+
*/
|
|
14
|
+
const defaultSoftDeleteConfig = {
|
|
15
|
+
getQuery: () => ({ [core_1.options.deleteKey || 'deleted']: { $ne: true } }),
|
|
16
|
+
getData: (user) => ({
|
|
17
|
+
deleted: true,
|
|
18
|
+
deletedBy: user === null || user === void 0 ? void 0 : user._id,
|
|
19
|
+
deletedAt: new Date(),
|
|
20
|
+
}),
|
|
21
|
+
};
|
|
22
|
+
class NestService {
|
|
23
|
+
constructor(model, serviceOptions = {}, softDeleteConfig) {
|
|
24
|
+
this.model = model;
|
|
25
|
+
this.options = Object.assign({ multi: false, softDelete: true, pagination: true }, serviceOptions);
|
|
26
|
+
this.softDeleteConfig = softDeleteConfig || defaultSoftDeleteConfig;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Apply soft delete query filter if soft delete is enabled
|
|
30
|
+
*/
|
|
31
|
+
applySoftDeleteFilter(query) {
|
|
32
|
+
if (this.options.softDelete) {
|
|
33
|
+
const softDeleteQuery = this.softDeleteConfig.getQuery();
|
|
34
|
+
Object.assign(query, softDeleteQuery);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
_find() {
|
|
38
|
+
return tslib_1.__awaiter(this, arguments, void 0, function* (query = {}, findOptions = {
|
|
39
|
+
pagination: this.options.pagination,
|
|
40
|
+
}) {
|
|
41
|
+
var _a;
|
|
42
|
+
// Apply soft delete filter if enabled
|
|
43
|
+
this.applySoftDeleteFilter(query);
|
|
44
|
+
const filters = (0, query_utils_1.assignFilters)({}, query, query_utils_1.FILTERS, {});
|
|
45
|
+
const searchQuery = (0, query_utils_1.rawQuery)(query);
|
|
46
|
+
const isPaginationEnabled = (_a = findOptions.pagination) !== null && _a !== void 0 ? _a : this.options.pagination;
|
|
47
|
+
const q = this.model.find(searchQuery);
|
|
48
|
+
(0, nestify_1.nestify)(q, filters, core_1.options, !isPaginationEnabled);
|
|
49
|
+
if (!isPaginationEnabled) {
|
|
50
|
+
return (yield q.exec());
|
|
51
|
+
}
|
|
52
|
+
const countQuery = this.options.softDelete
|
|
53
|
+
? Object.assign(Object.assign({}, this.softDeleteConfig.getQuery()), searchQuery) : searchQuery;
|
|
54
|
+
const [data, total] = yield Promise.all([
|
|
55
|
+
q.exec(),
|
|
56
|
+
this.model.countDocuments(countQuery),
|
|
57
|
+
]);
|
|
58
|
+
return {
|
|
59
|
+
total,
|
|
60
|
+
$limit: Number(filters.$limit) || core_1.options.defaultLimit,
|
|
61
|
+
$skip: Number(filters.$skip) || core_1.options.defaultSkip,
|
|
62
|
+
data,
|
|
63
|
+
};
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
_create(data) {
|
|
67
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
68
|
+
const multi = this.options.multi;
|
|
69
|
+
if (multi) {
|
|
70
|
+
// When multi is enabled, handle both array and single object
|
|
71
|
+
if (Array.isArray(data)) {
|
|
72
|
+
// @ts-expect-error - mongoose types issue
|
|
73
|
+
return this.model.insertMany(data, { ordered: false });
|
|
74
|
+
}
|
|
75
|
+
// @ts-expect-error - mongoose types issue
|
|
76
|
+
return this.model.create(data);
|
|
77
|
+
}
|
|
78
|
+
// When multi is disabled, only accept single object
|
|
79
|
+
if (Array.isArray(data)) {
|
|
80
|
+
throw new common_1.BadRequestException('Bulk creation is not enabled. Set multi: true in service options to allow array input.');
|
|
81
|
+
}
|
|
82
|
+
// @ts-expect-error - mongoose types issue
|
|
83
|
+
return this.model.create(data);
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
_patch(id_1, data_1) {
|
|
87
|
+
return tslib_1.__awaiter(this, arguments, void 0, function* (id, data, query = {}) {
|
|
88
|
+
// Apply soft delete filter if enabled
|
|
89
|
+
this.applySoftDeleteFilter(query);
|
|
90
|
+
const filters = (0, query_utils_1.assignFilters)({}, query, query_utils_1.FILTERS, {});
|
|
91
|
+
const searchQuery = id
|
|
92
|
+
? Object.assign({ _id: id }, (0, query_utils_1.rawQuery)(query)) : (0, query_utils_1.rawQuery)(query);
|
|
93
|
+
const isSingleUpdate = Boolean(id);
|
|
94
|
+
// @ts-expect-error - internal method call
|
|
95
|
+
const q = this._getOrFind(isSingleUpdate, searchQuery, data);
|
|
96
|
+
if (isSingleUpdate) {
|
|
97
|
+
(0, nestify_1.nestify)(q, filters, core_1.options, isSingleUpdate);
|
|
98
|
+
// @ts-expect-error - mongoose query exec
|
|
99
|
+
return q.exec();
|
|
100
|
+
}
|
|
101
|
+
const result = yield q.exec();
|
|
102
|
+
// @ts-expect-error - updateMany result type
|
|
103
|
+
if (result.modifiedCount > 0) {
|
|
104
|
+
// @ts-expect-error - mongoose find return type
|
|
105
|
+
return this.model.find(searchQuery).exec();
|
|
106
|
+
}
|
|
107
|
+
return [];
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
_get(id_1) {
|
|
111
|
+
return tslib_1.__awaiter(this, arguments, void 0, function* (id, query = {}) {
|
|
112
|
+
// Apply soft delete filter if enabled
|
|
113
|
+
this.applySoftDeleteFilter(query);
|
|
114
|
+
const filters = (0, query_utils_1.assignFilters)({}, query, query_utils_1.FILTERS, {});
|
|
115
|
+
const searchQuery = Object.assign(Object.assign({}, (0, query_utils_1.rawQuery)(query)), { _id: id });
|
|
116
|
+
const q = this.model.findOne(searchQuery);
|
|
117
|
+
const isSingleOperation = true;
|
|
118
|
+
(0, nestify_1.nestify)(q, filters, core_1.options, isSingleOperation);
|
|
119
|
+
// @ts-expect-error - mongoose findOne return type
|
|
120
|
+
return (yield q.exec()) || null;
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
_getOrFind(isSingleUpdate, searchQuery, data) {
|
|
124
|
+
if (isSingleUpdate) {
|
|
125
|
+
return this.model.findOneAndUpdate(searchQuery, data, { new: true });
|
|
126
|
+
}
|
|
127
|
+
return this.model.updateMany(searchQuery, data);
|
|
128
|
+
}
|
|
129
|
+
_remove(id_1) {
|
|
130
|
+
return tslib_1.__awaiter(this, arguments, void 0, function* (id, query = {}, user) {
|
|
131
|
+
const searchQuery = id
|
|
132
|
+
? Object.assign({ _id: id }, (0, query_utils_1.rawQuery)(query)) : (0, query_utils_1.rawQuery)(query);
|
|
133
|
+
const data = id ? yield this._get(id, query) : null;
|
|
134
|
+
if (this.options.softDelete) {
|
|
135
|
+
// Get user from parameter or fallback to CLS context
|
|
136
|
+
const currentUser = user !== null && user !== void 0 ? user : (0, core_2.getCurrentUser)();
|
|
137
|
+
// Soft delete: mark as deleted using configured getData
|
|
138
|
+
const softDeleteData = this.softDeleteConfig.getData(currentUser);
|
|
139
|
+
yield this._patch(id, softDeleteData, searchQuery);
|
|
140
|
+
return data;
|
|
141
|
+
}
|
|
142
|
+
// Hard delete: actually remove from database
|
|
143
|
+
if (id) {
|
|
144
|
+
yield this.model.deleteOne(searchQuery).exec();
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
yield this.model.deleteMany(searchQuery).exec();
|
|
148
|
+
}
|
|
149
|
+
return data;
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
getCount(filter) {
|
|
153
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
154
|
+
return this.model.countDocuments(filter);
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
exports.NestService = NestService;
|
|
159
|
+
//# sourceMappingURL=nest.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nest.service.js","sourceRoot":"","sources":["../../../../../packages/mongoose/src/lib/nest.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { PopulateOptions, SortOrder } from 'mongoose';
|
|
2
|
+
export interface NestifyOptions {
|
|
3
|
+
defaultLimit: number;
|
|
4
|
+
defaultSkip: number;
|
|
5
|
+
defaultPagination: boolean;
|
|
6
|
+
}
|
|
7
|
+
export interface NestifyFilters {
|
|
8
|
+
$select?: string | Record<string, 1 | 0> | string[];
|
|
9
|
+
$populate?: string | PopulateOptions | (string | PopulateOptions)[];
|
|
10
|
+
$sort?: Record<string, SortOrder>;
|
|
11
|
+
$limit?: number | string;
|
|
12
|
+
$skip?: number | string;
|
|
13
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Nestify.js","sourceRoot":"","sources":["../../../../../packages/mongoose/src/types/Nestify.ts"],"names":[],"mappings":""}
|