UNPKG

@ifit/mongoose-dao

Version:

Mongo helper methods for working with data in a DAO or repository pattern

71 lines 2.96 kB
"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 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; return c > 3 && r && Object.defineProperty(target, key, r), r; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.DataAccessObject = void 0; require("reflect-metadata"); const inversify_1 = require("inversify"); const list_options_1 = require("../list-interfaces/list-options"); let DataAccessObject = class DataAccessObject { constructor() { this.dataObjectClass = typeof this; } async create(data) { const result = await this.model.create(data); return this.initObject(result); } async insertMany(data, options) { const results = await this.model.insertMany(data, options); return options && options.rawResult ? results : results.map((result) => this.initObject(result)); } async findById(id) { const result = await this.model.findById(id); return this.initObject(result); } async list(searchCriteria = {}, listOptions = new list_options_1.ListOptions()) { const totalQuery = this.model.countDocuments(searchCriteria); const sort = {}; if (listOptions.sortField) { sort[listOptions.sortField] = listOptions.sortAsc ? 1 : -1; } const resultsQuery = this.model .find(searchCriteria) .skip(listOptions.page * listOptions.pageSize) .limit(listOptions.pageSize) .sort(sort) .lean(listOptions.lean === true); const [total, resultObjects] = await Promise.all([totalQuery, resultsQuery]); const results = listOptions.lean ? resultObjects : resultObjects.map((x) => this.initObject(x)); return { total, results }; } async update(data) { delete data.createdAt; delete data.updatedAt; const result = await this.model.findByIdAndUpdate(data.id, data, { new: true, }); return this.initObject(result); } async deleteById(id) { const result = await this.model.findByIdAndRemove(id); return this.initObject(result); } initObject(result) { return result ? new this.targetClass(result.toObject()) : null; } }; exports.DataAccessObject = DataAccessObject; exports.DataAccessObject = DataAccessObject = __decorate([ (0, inversify_1.injectable)() ], DataAccessObject); //# sourceMappingURL=data-access-object.js.map