mongodb-dynamic-api
Version:
Auto generated CRUD API for MongoDB using NestJS
48 lines • 2 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.BaseDuplicateManyService = void 0;
const class_transformer_1 = require("class-transformer");
const mixins_1 = require("../../mixins");
const services_1 = require("../../services");
class BaseDuplicateManyService extends services_1.BaseService {
constructor(model) {
super(model);
this.model = model;
}
async duplicateMany(ids, partial) {
try {
const toDuplicateList = await this.model
.find({
_id: { $in: ids },
...(this.isSoftDeletable ? { isDeleted: false } : undefined),
})
.lean()
.exec();
if (!toDuplicateList?.length) {
this.handleDocumentNotFound();
}
const duplicatedList = await this.model.create(toDuplicateList.map((d) => (0, class_transformer_1.plainToInstance)(this.entity, {
...Object.entries(d).reduce((acc, [key, value]) => {
if ((0, mixins_1.baseEntityKeysToExclude)().includes(key)) {
return acc;
}
return { ...acc, [key]: value };
}, {}),
...partial ?? {},
})));
const documents = await this.model.find({ _id: { $in: duplicatedList.map(({ _id }) => _id.toString()) } })
.lean()
.exec();
if (this.callback && documents.length) {
await Promise.all(documents.map((document) => this.callback(this.addDocumentId(document), this.callbackMethods)));
}
return documents.map((d) => this.buildInstance(d));
}
catch (error) {
this.handleMongoErrors(error, false);
this.handleDuplicateKeyError(error);
}
}
}
exports.BaseDuplicateManyService = BaseDuplicateManyService;
//# sourceMappingURL=base-duplicate-many.service.js.map