nestjs-prisma-base
Version:
A comprehensive NestJS package providing base classes, utilities, and decorators for building CRUD APIs with Prisma ORM integration, featuring pagination, search, filtering, relation loading, configurable DTOs, and modular composition capabilities.
81 lines • 3.71 kB
JavaScript
;
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;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var __param = (this && this.__param) || function (paramIndex, decorator) {
return function (target, key) { decorator(target, key, paramIndex); }
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.createModelModule = createModelModule;
exports.createModelService = createModelService;
exports.createModelController = createModelController;
const common_1 = require("@nestjs/common");
const base_service_1 = require("../base/base.service");
const prisma_module_1 = require("../prisma/prisma.module");
const prisma_service_1 = require("../prisma/prisma.service");
const endpoint_decorator_1 = require("../decorators/endpoint.decorator");
function createModelModule(options) {
const { modelName, routePath = modelName, serviceType, enabledEndpoints = [], enableAllEndpoints = false, providers = [], imports = [], exports = [], } = options;
const ServiceClass = serviceType ? serviceType : createModelService(modelName, modelName);
let ControllerClass = createModelController(modelName, routePath, ServiceClass);
if (enableAllEndpoints) {
ControllerClass = (0, endpoint_decorator_1.EnableEndpoint)('*')(ControllerClass);
}
else if (enabledEndpoints.length > 0) {
enabledEndpoints.forEach((endpoint) => {
ControllerClass = (0, endpoint_decorator_1.EnableEndpoint)(endpoint)(ControllerClass);
});
}
const moduleProviders = [
{
provide: `${modelName}Service`,
useFactory: (prisma) => new ServiceClass(prisma),
inject: [prisma_service_1.PrismaService],
},
...providers,
];
return {
module: class DynamicPrismaModule {
},
imports: [prisma_module_1.PrismaModule, ...imports],
controllers: [ControllerClass],
providers: moduleProviders,
exports: [`${modelName}Service`, ...exports],
};
}
function createModelService(modelName, prismaModelKey) {
class ModelService extends base_service_1.BaseService {
constructor() {
super(...arguments);
this.modelName = prismaModelKey;
}
}
Object.defineProperty(ModelService, 'name', {
value: `${modelName}Service`,
});
return ModelService;
}
function createModelController(modelName, routePath, serviceType) {
const { BaseController } = require('../base/base.controller');
let ModelController = class ModelController extends BaseController {
constructor(service) {
super(service);
}
};
ModelController = __decorate([
(0, common_1.Controller)(routePath),
__param(0, (0, common_1.Inject)(`${modelName}Service`)),
__metadata("design:paramtypes", [base_service_1.BaseService])
], ModelController);
Object.defineProperty(ModelController, 'name', {
value: `${modelName}Controller`,
});
return ModelController;
}
//# sourceMappingURL=module-factory.js.map