nestjs-prisma-base
Version:
A reusable NestJS module for Prisma ORM with base classes for controller, service and DTOs
73 lines • 2.94 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.createModelModule = createModelModule;
exports.createModelService = createModelService;
exports.createModelController = createModelController;
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 controllerFactory = (service) => {
let controllerClass = createModelController(modelName, routePath, service.constructor);
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);
});
}
return controllerClass;
};
const serviceFactory = serviceType ? serviceType : createModelService(modelName, modelName);
const moduleProviders = [
{
provide: `${modelName}Service`,
useFactory: (prisma) => new serviceFactory(prisma),
inject: [prisma_service_1.PrismaService],
},
{
provide: `${modelName}Controller`,
useFactory: (service) => {
const ControllerClass = controllerFactory(service);
return new ControllerClass(service);
},
inject: [`${modelName}Service`],
},
...providers,
];
return {
module: prisma_module_1.PrismaModule,
imports: [prisma_module_1.PrismaModule, ...imports],
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');
class ModelController extends BaseController {
constructor(service) {
super(service);
}
}
Object.defineProperty(ModelController, 'name', {
value: `${modelName}Controller`,
});
Reflect.defineMetadata('path', routePath, ModelController);
return ModelController;
}
//# sourceMappingURL=module-factory.js.map