c2-mongoose 2.1.105 → 2.1.107

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.
@@ -0,0 +1,8 @@
1
+ import mongoose from "mongoose";
2
+ import { Options } from "../types/Options";
3
+ declare class C2Flow<D> {
4
+ private repository;
5
+ constructor(repository: mongoose.Model<any>);
6
+ create(data: Partial<D>, options: Partial<Options>): Promise<any[]>;
7
+ }
8
+ export default C2Flow;
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ var __importDefault = (this && this.__importDefault) || function (mod) {
39
+ return (mod && mod.__esModule) ? mod : { "default": mod };
40
+ };
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ var Logger_1 = require("../model/Logger");
43
+ var BuildLogFlowItem_1 = __importDefault(require("./item/BuildLogFlowItem"));
44
+ var C2Flow = /** @class */ (function () {
45
+ function C2Flow(repository) {
46
+ this.repository = repository;
47
+ }
48
+ C2Flow.prototype.create = function (data, options) {
49
+ return __awaiter(this, void 0, void 0, function () {
50
+ var dataAfter, log;
51
+ return __generator(this, function (_a) {
52
+ switch (_a.label) {
53
+ case 0: return [4 /*yield*/, this.repository.create([data], { session: options.session })];
54
+ case 1:
55
+ dataAfter = _a.sent();
56
+ if (options.logger === false) {
57
+ return [2 /*return*/, dataAfter];
58
+ }
59
+ log = BuildLogFlowItem_1.default.build(options, dataAfter, Logger_1.TypeOfOperation.CREATE);
60
+ return [4 /*yield*/, Logger_1.LoggerRepository.create([log], { session: options.session })];
61
+ case 2:
62
+ _a.sent();
63
+ return [2 /*return*/, dataAfter];
64
+ }
65
+ });
66
+ });
67
+ };
68
+ return C2Flow;
69
+ }());
70
+ exports.default = C2Flow;
@@ -23,11 +23,7 @@ declare abstract class SearchFlow {
23
23
  buildPath(target: string, nested?: string): any;
24
24
  buildOrdenation(): any;
25
25
  buildRegex(searchText: string): RegExp;
26
- searchPageable(model: mongoose.Model<any>, options: SearchOptions): Promise<{
27
- items: any;
28
- paging: any;
29
- metadata: any;
30
- }>;
26
+ searchPageable(model: mongoose.Model<any>, options: SearchOptions): Promise<any>;
31
27
  search(model: mongoose.Model<any>, options?: SearchOptions): Promise<SearchResponse<any>>;
32
28
  /**
33
29
  *
@@ -185,11 +185,11 @@ var SearchFlow = /** @class */ (function () {
185
185
  return new RegExp("".concat(regexExpression), 'i');
186
186
  };
187
187
  SearchFlow.prototype.searchPageable = function (model, options) {
188
- var _a, _b;
188
+ var _a;
189
189
  return __awaiter(this, void 0, void 0, function () {
190
- var stagesItems, stagesPaging, stagesMetadata, facet, _i, stagesMetadata_1, metadata, result, items, _c, _d, populate;
191
- return __generator(this, function (_e) {
192
- switch (_e.label) {
190
+ var stagesItems, stagesPaging, stagesMetadata, facet, _i, stagesMetadata_1, metadata, result, items, _b, _c, populate;
191
+ return __generator(this, function (_d) {
192
+ switch (_d.label) {
193
193
  case 0:
194
194
  stagesItems = [{ $match: this.filters }];
195
195
  if ((0, Utils_1.isNotEmpty)(options.unions)) {
@@ -225,34 +225,25 @@ var SearchFlow = /** @class */ (function () {
225
225
  return [4 /*yield*/, model.aggregate([
226
226
  {
227
227
  $facet: facet
228
- // {
229
- // items: stagesItems,
230
- // paging: stagesPaging,
231
- // metadata: stagesMetadata
232
- // }
233
228
  },
234
229
  ]).session(options === null || options === void 0 ? void 0 : options.session)];
235
230
  case 1:
236
- result = _e.sent();
231
+ result = _d.sent();
237
232
  items = result[0].items;
238
233
  if (!((0, Utils_1.isNotEmpty)(this.populate) && Array.isArray(this.populate))) return [3 /*break*/, 5];
239
- _c = 0, _d = this.populate;
240
- _e.label = 2;
234
+ _b = 0, _c = this.populate;
235
+ _d.label = 2;
241
236
  case 2:
242
- if (!(_c < _d.length)) return [3 /*break*/, 5];
243
- populate = _d[_c];
237
+ if (!(_b < _c.length)) return [3 /*break*/, 5];
238
+ populate = _c[_b];
244
239
  return [4 /*yield*/, model.populate(result[0].items, populate)];
245
240
  case 3:
246
- items = _e.sent();
247
- _e.label = 4;
241
+ items = _d.sent();
242
+ _d.label = 4;
248
243
  case 4:
249
- _c++;
244
+ _b++;
250
245
  return [3 /*break*/, 2];
251
- case 5: return [2 /*return*/, {
252
- items: items,
253
- paging: ((_a = result[0]) === null || _a === void 0 ? void 0 : _a.paging[0]) || { total: 0, page: 1, limit: this.limit },
254
- metadata: ((_b = result[0]) === null || _b === void 0 ? void 0 : _b.metadata[0]) || undefined
255
- }];
246
+ case 5: return [2 /*return*/, __assign(__assign({}, result[0]), { items: items, paging: ((_a = result[0]) === null || _a === void 0 ? void 0 : _a.paging[0]) || { total: 0, page: 1, limit: this.limit } })];
256
247
  }
257
248
  });
258
249
  });
@@ -0,0 +1,7 @@
1
+ import { ILogger, TypeOfOperation } from "../../model/Logger";
2
+ import { Options } from "../../types/Options";
3
+ declare class BuildLogFlowItem {
4
+ build(options: Partial<Options>, dataAfter: any[], operation: TypeOfOperation): Partial<ILogger>;
5
+ }
6
+ declare const _default: BuildLogFlowItem;
7
+ export default _default;
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ var express_http_context_1 = __importDefault(require("express-http-context"));
7
+ var BuildLogFlowItem = /** @class */ (function () {
8
+ function BuildLogFlowItem() {
9
+ }
10
+ BuildLogFlowItem.prototype.build = function (options, dataAfter, operation) {
11
+ var _a;
12
+ return {
13
+ user: (_a = options.owner) !== null && _a !== void 0 ? _a : express_http_context_1.default.get("user")._id,
14
+ owner: options.owner,
15
+ data: dataAfter,
16
+ operation: operation
17
+ };
18
+ };
19
+ return BuildLogFlowItem;
20
+ }());
21
+ exports.default = new BuildLogFlowItem;
@@ -0,0 +1,208 @@
1
+ import moment from 'moment';
2
+ import mongoose, { Types } from 'mongoose';
3
+ import SearchFlow from '../flow/SearchFlow';
4
+ declare enum TypeOfOperation {
5
+ "CREATE" = "CREATE",
6
+ "UPDATE" = "UPDATE",
7
+ "DELETE" = "DELETE"
8
+ }
9
+ interface ILogger {
10
+ owner: Types.ObjectId;
11
+ user: Types.ObjectId;
12
+ createdAtDateTime: moment.Moment;
13
+ operation: TypeOfOperation;
14
+ data: any;
15
+ }
16
+ declare const LoggerModel: mongoose.Schema<any, mongoose.Model<any, any, any, any, any, any>, {}, {}, {}, {}, mongoose.ResolveSchemaOptions<{
17
+ timestamps: {
18
+ createdAt: string;
19
+ };
20
+ }>, {
21
+ owner: {
22
+ prototype?: Types.ObjectId | undefined;
23
+ cacheHexString?: unknown;
24
+ generate?: {} | undefined;
25
+ createFromTime?: {} | undefined;
26
+ createFromHexString?: {} | undefined;
27
+ isValid?: {} | undefined;
28
+ };
29
+ user: {
30
+ prototype?: Types.ObjectId | undefined;
31
+ cacheHexString?: unknown;
32
+ generate?: {} | undefined;
33
+ createFromTime?: {} | undefined;
34
+ createFromHexString?: {} | undefined;
35
+ isValid?: {} | undefined;
36
+ };
37
+ operation: string;
38
+ data?: any;
39
+ }, mongoose.Document<unknown, {}, mongoose.FlatRecord<{
40
+ owner: {
41
+ prototype?: Types.ObjectId | undefined;
42
+ cacheHexString?: unknown;
43
+ generate?: {} | undefined;
44
+ createFromTime?: {} | undefined;
45
+ createFromHexString?: {} | undefined;
46
+ isValid?: {} | undefined;
47
+ };
48
+ user: {
49
+ prototype?: Types.ObjectId | undefined;
50
+ cacheHexString?: unknown;
51
+ generate?: {} | undefined;
52
+ createFromTime?: {} | undefined;
53
+ createFromHexString?: {} | undefined;
54
+ isValid?: {} | undefined;
55
+ };
56
+ operation: string;
57
+ data?: any;
58
+ }>> & Omit<mongoose.FlatRecord<{
59
+ owner: {
60
+ prototype?: Types.ObjectId | undefined;
61
+ cacheHexString?: unknown;
62
+ generate?: {} | undefined;
63
+ createFromTime?: {} | undefined;
64
+ createFromHexString?: {} | undefined;
65
+ isValid?: {} | undefined;
66
+ };
67
+ user: {
68
+ prototype?: Types.ObjectId | undefined;
69
+ cacheHexString?: unknown;
70
+ generate?: {} | undefined;
71
+ createFromTime?: {} | undefined;
72
+ createFromHexString?: {} | undefined;
73
+ isValid?: {} | undefined;
74
+ };
75
+ operation: string;
76
+ data?: any;
77
+ }> & {
78
+ _id: Types.ObjectId;
79
+ }, never>>;
80
+ declare class LoggerSearch extends SearchFlow {
81
+ model: Partial<ILogger>;
82
+ constructor(params: any);
83
+ buildFilters(): void;
84
+ }
85
+ declare const LoggerRepository: mongoose.Model<{
86
+ owner: {
87
+ prototype?: Types.ObjectId | undefined;
88
+ cacheHexString?: unknown;
89
+ generate?: {} | undefined;
90
+ createFromTime?: {} | undefined;
91
+ createFromHexString?: {} | undefined;
92
+ isValid?: {} | undefined;
93
+ };
94
+ user: {
95
+ prototype?: Types.ObjectId | undefined;
96
+ cacheHexString?: unknown;
97
+ generate?: {} | undefined;
98
+ createFromTime?: {} | undefined;
99
+ createFromHexString?: {} | undefined;
100
+ isValid?: {} | undefined;
101
+ };
102
+ operation: string;
103
+ data?: any;
104
+ }, {}, {}, {}, mongoose.Document<unknown, {}, {
105
+ owner: {
106
+ prototype?: Types.ObjectId | undefined;
107
+ cacheHexString?: unknown;
108
+ generate?: {} | undefined;
109
+ createFromTime?: {} | undefined;
110
+ createFromHexString?: {} | undefined;
111
+ isValid?: {} | undefined;
112
+ };
113
+ user: {
114
+ prototype?: Types.ObjectId | undefined;
115
+ cacheHexString?: unknown;
116
+ generate?: {} | undefined;
117
+ createFromTime?: {} | undefined;
118
+ createFromHexString?: {} | undefined;
119
+ isValid?: {} | undefined;
120
+ };
121
+ operation: string;
122
+ data?: any;
123
+ }> & Omit<{
124
+ owner: {
125
+ prototype?: Types.ObjectId | undefined;
126
+ cacheHexString?: unknown;
127
+ generate?: {} | undefined;
128
+ createFromTime?: {} | undefined;
129
+ createFromHexString?: {} | undefined;
130
+ isValid?: {} | undefined;
131
+ };
132
+ user: {
133
+ prototype?: Types.ObjectId | undefined;
134
+ cacheHexString?: unknown;
135
+ generate?: {} | undefined;
136
+ createFromTime?: {} | undefined;
137
+ createFromHexString?: {} | undefined;
138
+ isValid?: {} | undefined;
139
+ };
140
+ operation: string;
141
+ data?: any;
142
+ } & {
143
+ _id: Types.ObjectId;
144
+ }, never>, mongoose.Schema<any, mongoose.Model<any, any, any, any, any, any>, {}, {}, {}, {}, mongoose.ResolveSchemaOptions<{
145
+ timestamps: {
146
+ createdAt: string;
147
+ };
148
+ }>, {
149
+ owner: {
150
+ prototype?: Types.ObjectId | undefined;
151
+ cacheHexString?: unknown;
152
+ generate?: {} | undefined;
153
+ createFromTime?: {} | undefined;
154
+ createFromHexString?: {} | undefined;
155
+ isValid?: {} | undefined;
156
+ };
157
+ user: {
158
+ prototype?: Types.ObjectId | undefined;
159
+ cacheHexString?: unknown;
160
+ generate?: {} | undefined;
161
+ createFromTime?: {} | undefined;
162
+ createFromHexString?: {} | undefined;
163
+ isValid?: {} | undefined;
164
+ };
165
+ operation: string;
166
+ data?: any;
167
+ }, mongoose.Document<unknown, {}, mongoose.FlatRecord<{
168
+ owner: {
169
+ prototype?: Types.ObjectId | undefined;
170
+ cacheHexString?: unknown;
171
+ generate?: {} | undefined;
172
+ createFromTime?: {} | undefined;
173
+ createFromHexString?: {} | undefined;
174
+ isValid?: {} | undefined;
175
+ };
176
+ user: {
177
+ prototype?: Types.ObjectId | undefined;
178
+ cacheHexString?: unknown;
179
+ generate?: {} | undefined;
180
+ createFromTime?: {} | undefined;
181
+ createFromHexString?: {} | undefined;
182
+ isValid?: {} | undefined;
183
+ };
184
+ operation: string;
185
+ data?: any;
186
+ }>> & Omit<mongoose.FlatRecord<{
187
+ owner: {
188
+ prototype?: Types.ObjectId | undefined;
189
+ cacheHexString?: unknown;
190
+ generate?: {} | undefined;
191
+ createFromTime?: {} | undefined;
192
+ createFromHexString?: {} | undefined;
193
+ isValid?: {} | undefined;
194
+ };
195
+ user: {
196
+ prototype?: Types.ObjectId | undefined;
197
+ cacheHexString?: unknown;
198
+ generate?: {} | undefined;
199
+ createFromTime?: {} | undefined;
200
+ createFromHexString?: {} | undefined;
201
+ isValid?: {} | undefined;
202
+ };
203
+ operation: string;
204
+ data?: any;
205
+ }> & {
206
+ _id: Types.ObjectId;
207
+ }, never>>>;
208
+ export { ILogger, TypeOfOperation, LoggerModel, LoggerRepository, LoggerSearch };
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+ var __extends = (this && this.__extends) || (function () {
3
+ var extendStatics = function (d, b) {
4
+ extendStatics = Object.setPrototypeOf ||
5
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
+ return extendStatics(d, b);
8
+ };
9
+ return function (d, b) {
10
+ if (typeof b !== "function" && b !== null)
11
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
12
+ extendStatics(d, b);
13
+ function __() { this.constructor = d; }
14
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
15
+ };
16
+ })();
17
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
18
+ if (k2 === undefined) k2 = k;
19
+ var desc = Object.getOwnPropertyDescriptor(m, k);
20
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
21
+ desc = { enumerable: true, get: function() { return m[k]; } };
22
+ }
23
+ Object.defineProperty(o, k2, desc);
24
+ }) : (function(o, m, k, k2) {
25
+ if (k2 === undefined) k2 = k;
26
+ o[k2] = m[k];
27
+ }));
28
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
29
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
30
+ }) : function(o, v) {
31
+ o["default"] = v;
32
+ });
33
+ var __importStar = (this && this.__importStar) || function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ var __importDefault = (this && this.__importDefault) || function (mod) {
41
+ return (mod && mod.__esModule) ? mod : { "default": mod };
42
+ };
43
+ Object.defineProperty(exports, "__esModule", { value: true });
44
+ exports.LoggerSearch = exports.LoggerRepository = exports.LoggerModel = exports.TypeOfOperation = void 0;
45
+ var mongoose_1 = __importStar(require("mongoose"));
46
+ var SearchFlow_1 = __importDefault(require("../flow/SearchFlow"));
47
+ var Utils_1 = require("../utils/Utils");
48
+ var TypeOfOperation;
49
+ (function (TypeOfOperation) {
50
+ TypeOfOperation["CREATE"] = "CREATE";
51
+ TypeOfOperation["UPDATE"] = "UPDATE";
52
+ TypeOfOperation["DELETE"] = "DELETE";
53
+ })(TypeOfOperation || (TypeOfOperation = {}));
54
+ exports.TypeOfOperation = TypeOfOperation;
55
+ var LoggerModel = new mongoose_1.Schema({
56
+ owner: { type: mongoose_1.Types.ObjectId, required: true, immutable: true },
57
+ user: { type: mongoose_1.Types.ObjectId, required: true, immutable: true },
58
+ operation: { type: String, enum: TypeOfOperation, required: true, immutable: true },
59
+ data: { type: mongoose_1.default.Schema.Types.Mixed, immutable: true }
60
+ }, {
61
+ timestamps: { createdAt: 'createdAtDateTime' }
62
+ });
63
+ exports.LoggerModel = LoggerModel;
64
+ var LoggerSearch = /** @class */ (function (_super) {
65
+ __extends(LoggerSearch, _super);
66
+ function LoggerSearch(params) {
67
+ var _this = _super.call(this, params) || this;
68
+ _this.model = params;
69
+ _this.buildFilters();
70
+ return _this;
71
+ }
72
+ LoggerSearch.prototype.buildFilters = function () {
73
+ var filters = this.buildDefaultFilters(this);
74
+ if ((0, Utils_1.isEmpty)(filters.$and)) {
75
+ filters = { $and: [] };
76
+ }
77
+ if ((0, Utils_1.isNotEmpty)(this.searchText)) {
78
+ var regex = this.buildRegex(this.searchText);
79
+ var condition = {
80
+ $or: [
81
+ // { 'name': { $regex: regex } },
82
+ ]
83
+ };
84
+ filters.$and.push(condition);
85
+ }
86
+ if (filters.$and.length === 0)
87
+ delete filters['$and'];
88
+ this.filters = filters;
89
+ };
90
+ return LoggerSearch;
91
+ }(SearchFlow_1.default));
92
+ exports.LoggerSearch = LoggerSearch;
93
+ var LoggerRepository = (0, mongoose_1.model)('c2-mongoose-logger', LoggerModel);
94
+ exports.LoggerRepository = LoggerRepository;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "c2-mongoose",
3
- "version": "2.1.105",
3
+ "version": "2.1.107",
4
4
  "description": "Lib to make any search in database mongoose and use as basic crud",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -29,6 +29,7 @@
29
29
  "homepage": "https://gitlab.com/cabral_consultoria/c2-mongoose#readme",
30
30
  "dependencies": {
31
31
  "dotenv": "^16.0.3",
32
+ "express-http-context": "^1.2.4",
32
33
  "moment": "^2.29.4",
33
34
  "mongoose": "^7.0.1"
34
35
  },
@@ -0,0 +1,40 @@
1
+
2
+ import mongoose from "mongoose"
3
+ import { ILogger, LoggerRepository, TypeOfOperation } from "../model/Logger"
4
+ import { Options } from "../types/Options"
5
+ import BuildLogFlowItem from "./item/BuildLogFlowItem"
6
+
7
+ class C2Flow<D> {
8
+
9
+ private repository: mongoose.Model<any>
10
+
11
+ constructor(repository: mongoose.Model<any>) {
12
+ this.repository = repository
13
+ }
14
+
15
+ public async create(data: Partial<D>, options: Partial<Options>) {
16
+ let dataAfter = await this.repository.create([data], { session: options.session })
17
+
18
+ if (options.logger === false) {
19
+ return dataAfter
20
+ }
21
+
22
+ let log: Partial<ILogger> = BuildLogFlowItem.build(options, dataAfter, TypeOfOperation.CREATE)
23
+ await LoggerRepository.create([log], { session: options.session })
24
+
25
+ return dataAfter
26
+ }
27
+
28
+
29
+ // public async updateById(id: Types.ObjectId, data: any, session: any = undefined): Promise<D> {
30
+ // const dataAfter = await this.repository.findByIdAndUpdate(id, data, { returnDocument: 'after', session })
31
+ // return dataAfter as D
32
+ // }
33
+
34
+ // public async updateByModel(searcher: SearchFlow, data: any, params: any): Promise<D> {
35
+ // const dataAfter = await this.repository.findOneAndUpdate(searcher.filters, data, params)
36
+ // return dataAfter as D
37
+ // }
38
+ }
39
+
40
+ export default C2Flow
@@ -171,11 +171,6 @@ abstract class SearchFlow {
171
171
  [
172
172
  {
173
173
  $facet: facet
174
- // {
175
- // items: stagesItems,
176
- // paging: stagesPaging,
177
- // metadata: stagesMetadata
178
- // }
179
174
  },
180
175
  ]
181
176
  ).session(options?.session as ClientSession)
@@ -189,9 +184,9 @@ abstract class SearchFlow {
189
184
  }
190
185
 
191
186
  return {
187
+ ...result[0],
192
188
  items,
193
189
  paging: result[0]?.paging[0] || { total: 0, page: 1, limit: this.limit },
194
- metadata: result[0]?.metadata[0] || undefined
195
190
  }
196
191
  }
197
192
 
@@ -0,0 +1,16 @@
1
+ import httpContext from "express-http-context"
2
+ import { ILogger, TypeOfOperation } from "../../model/Logger"
3
+ import { Options } from "../../types/Options"
4
+
5
+ class BuildLogFlowItem {
6
+ build(options: Partial<Options>, dataAfter: any[], operation: TypeOfOperation): Partial<ILogger> {
7
+ return {
8
+ user: options.owner ?? httpContext.get("user")._id,
9
+ owner: options.owner,
10
+ data: dataAfter,
11
+ operation
12
+ }
13
+ }
14
+ }
15
+
16
+ export default new BuildLogFlowItem
@@ -0,0 +1,63 @@
1
+ import moment from 'moment'
2
+ import mongoose, { Schema, Types, model } from 'mongoose'
3
+ import SearchFlow from '../flow/SearchFlow'
4
+ import { isEmpty, isNotEmpty } from '../utils/Utils'
5
+
6
+ enum TypeOfOperation {
7
+ "CREATE" = "CREATE",
8
+ "UPDATE" = "UPDATE",
9
+ "DELETE" = "DELETE",
10
+ }
11
+
12
+ interface ILogger {
13
+ owner: Types.ObjectId
14
+ user: Types.ObjectId
15
+ createdAtDateTime: moment.Moment
16
+ operation: TypeOfOperation
17
+ data: any
18
+ }
19
+
20
+ const LoggerModel = new Schema({
21
+ owner: { type: Types.ObjectId, required: true, immutable: true },
22
+ user: { type: Types.ObjectId, required: true, immutable: true },
23
+ operation: { type: String, enum: TypeOfOperation, required: true, immutable: true },
24
+ data: { type: mongoose.Schema.Types.Mixed, immutable: true }
25
+ }, {
26
+ timestamps: { createdAt: 'createdAtDateTime' }
27
+ })
28
+
29
+ class LoggerSearch extends SearchFlow {
30
+ model: Partial<ILogger>
31
+ constructor(params: any) {
32
+ super(params)
33
+ this.model = params
34
+ this.buildFilters()
35
+ }
36
+
37
+ buildFilters() {
38
+ let filters = this.buildDefaultFilters(this)
39
+
40
+ if (isEmpty(filters.$and)) {
41
+ filters = { $and: [] } as any
42
+ }
43
+
44
+ if (isNotEmpty(this.searchText)) {
45
+ let regex = this.buildRegex(this.searchText)
46
+ let condition = {
47
+ $or: [
48
+ // { 'name': { $regex: regex } },
49
+ ]
50
+ }
51
+ filters.$and.push(condition)
52
+ }
53
+
54
+ if (filters.$and.length === 0)
55
+ delete filters['$and']
56
+ this.filters = filters
57
+ }
58
+ }
59
+
60
+ const LoggerRepository = model('c2-mongoose-logger', LoggerModel)
61
+
62
+
63
+ export { ILogger, TypeOfOperation, LoggerModel, LoggerRepository, LoggerSearch }
@@ -0,0 +1,8 @@
1
+ import { ClientSession, Types } from "mongoose";
2
+
3
+ declare interface Options {
4
+ session: ClientSession
5
+ logger: boolean
6
+ owner: Types.ObjectId
7
+ user: Types.ObjectId
8
+ }