@nest-extended/mongoose 0.0.1-beta-1 → 0.0.1-beta-8

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 CHANGED
@@ -1,7 +1,47 @@
1
- # mongoose
1
+ # @nest-extended/mongoose
2
2
 
3
- This library was generated with [Nx](https://nx.dev).
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
- ## Building
5
+ ## Key Features
6
6
 
7
- Run `nx build mongoose` to build the library.
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-1",
4
- "type": "module",
3
+ "version": "0.0.1-beta-8",
5
4
  "private": false,
6
- "publishConfig": {
7
- "access": "public"
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-8"
26
11
  }
27
- }
12
+ }
@@ -0,0 +1,3 @@
1
+ import { Types } from 'mongoose';
2
+ declare const EnsureObjectId: (id: string | Types.ObjectId) => Types.ObjectId;
3
+ export default EnsureObjectId;
@@ -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
@@ -0,0 +1,5 @@
1
+ export * from './lib/nest.service';
2
+ export * from './common/nestify';
3
+ export * from './common/query.utils';
4
+ export * from './common/ensureObjectId';
5
+ export * from './types/Nestify';
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
@@ -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,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.mongoose = mongoose;
4
+ function mongoose() {
5
+ return 'mongoose';
6
+ }
7
+ //# sourceMappingURL=mongoose.js.map
@@ -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,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=Nestify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Nestify.js","sourceRoot":"","sources":["../../../../../packages/mongoose/src/types/Nestify.ts"],"names":[],"mappings":""}