UNPKG

@logistically/events-nestjs

Version:

NestJS integration for @logistically/events v3 - Event-driven architecture with Redis Streams

90 lines (89 loc) 4.16 kB
"use strict"; 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); } }; var EventListenersController_1; Object.defineProperty(exports, "__esModule", { value: true }); exports.EventListenersController = void 0; const common_1 = require("@nestjs/common"); const event_metadata_explorer_service_1 = require("./event-metadata-explorer.service"); const event_discovery_service_1 = require("./event-discovery.service"); let EventListenersController = EventListenersController_1 = class EventListenersController { constructor(metadataExplorer, eventDiscoveryService) { this.metadataExplorer = metadataExplorer; this.eventDiscoveryService = eventDiscoveryService; this.logger = new common_1.Logger(EventListenersController_1.name); } /** * Register event handlers for an instance * Based on NestJS microservices ListenersController pattern */ async registerEventHandlers(instance) { if (!this.metadataExplorer || !this.eventDiscoveryService) { this.logger.warn('EventListenersController: Dependencies not available, skipping registration'); return 0; } const { instance: serviceInstance } = instance; const patternHandlers = this.metadataExplorer.explore(serviceInstance); if (patternHandlers.length === 0) { return 0; } this.logger.debug(`Found ${patternHandlers.length} event handlers for ${serviceInstance.constructor.name}`); let registeredCount = 0; for (const handler of patternHandlers) { try { await this.registerHandler(serviceInstance, handler); registeredCount++; } catch (error) { this.logger.error(`Failed to register handler ${handler.methodKey} for ${serviceInstance.constructor.name}:`, error); } } if (registeredCount > 0) { this.logger.log(`Registered ${registeredCount} event handlers for ${serviceInstance.constructor.name}`); } return registeredCount; } /** * Register a single event handler */ async registerHandler(instance, handler) { const { methodKey, eventType, options } = handler; await this.eventDiscoveryService.registerHandler(instance, methodKey, { eventType, priority: options?.priority || 0, async: options?.async !== false, retry: options?.retry, ...options }); } /** * Check if an instance has event handlers */ hasEventHandlers(instance) { return this.metadataExplorer?.hasEventHandlers(instance) || false; } /** * Get all event types that an instance handles */ getEventTypes(instance) { return this.metadataExplorer?.getEventTypes(instance) || []; } }; exports.EventListenersController = EventListenersController; exports.EventListenersController = EventListenersController = EventListenersController_1 = __decorate([ (0, common_1.Injectable)(), __param(0, (0, common_1.Optional)()), __param(1, (0, common_1.Optional)()), __metadata("design:paramtypes", [event_metadata_explorer_service_1.EventMetadataExplorer, event_discovery_service_1.EventDiscoveryService]) ], EventListenersController);