mongodb-dynamic-api
Version:
Auto generated CRUD API for MongoDB using NestJS
70 lines • 3 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.RepositoryHelper = void 0;
const mongodb_pipeline_builder_1 = require("mongodb-pipeline-builder");
const services_1 = require("../services");
class RepositoryHelper {
static async getRepository(entity) {
const model = await services_1.DynamicApiGlobalStateService.getEntityModel(entity);
return {
aggregate: (pipeline) => RepositoryHelper.aggregate(model, pipeline),
bulkCreate: (toCreateList) => RepositoryHelper.bulkCreate(model, toCreateList),
create: (toCreate) => RepositoryHelper.create(model, toCreate),
delete: (query) => RepositoryHelper.delete(model, query),
find: (query) => RepositoryHelper.find(model, query),
findAll: (query) => RepositoryHelper.findAll(model, query),
paginate: (pipeline) => RepositoryHelper.paginate(model, pipeline),
update: (query, toUpdate, options) => RepositoryHelper.update(model, query, toUpdate, options),
};
}
static aggregate(model, pipeline) {
return (0, mongodb_pipeline_builder_1.GetResult)(model, pipeline);
}
static paginate(model, pipeline) {
return (0, mongodb_pipeline_builder_1.GetPagingResult)(model, pipeline);
}
static async findAll(model, query = {}) {
const entities = await model.find(query).lean().exec();
return entities.map(entity => ({ ...entity, id: entity._id.toString() }));
}
static async find(model, query) {
const entity = await model.findOne(query).lean().exec();
if (!entity) {
return null;
}
return { ...entity, id: entity._id.toString() };
}
static async create(model, toCreate) {
const entity = await model.create(toCreate);
return { ...entity.toObject(), id: entity._id.toString() };
}
static async update(model, query, toUpdate, options = {}) {
const entity = await model
.findOneAndUpdate(query, { $set: toUpdate }, { ...options, new: true })
.lean()
.exec();
if (!entity) {
return null;
}
return { ...entity, id: entity._id.toString() };
}
static async delete(model, query) {
if (query.id) {
const { deletedCount } = await model.deleteOne({ _id: query.id }).exec();
return deletedCount === 1;
}
else if (query.idList) {
const { deletedCount } = await model.deleteMany({ _id: { $in: query.idList } }).exec();
return deletedCount === query.idList.length;
}
else {
return false;
}
}
static async bulkCreate(model, toCreate) {
const entities = await model.create(toCreate);
return entities.map(entity => ({ ...entity.toObject(), id: entity._id.toString() }));
}
}
exports.RepositoryHelper = RepositoryHelper;
//# sourceMappingURL=repository.helper.js.map