UNPKG

nestjs-prisma-base

Version:

A reusable NestJS module for Prisma ORM with base classes for controller, service and DTOs

73 lines 2.94 kB
"use strict"; 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