Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | import { Processor, Process } from '@nestjs/bull'; import { Logger } from '@nestjs/common'; import { Job } from 'bull'; import { ProductSyncService } from '../services/product-sync.service'; import { ProductAnalyticsService } from '../services/product-analytics.service'; @Processor('product-processing') export class ProductProcessor { private readonly logger = new Logger(ProductProcessor.name); constructor( private productSyncService: ProductSyncService, private analyticsService: ProductAnalyticsService, ) {} @Process('sync-embeddings') async handleEmbeddingsSync(job: Job) { this.logger.log('Processing product embeddings sync'); try { await this.productSyncService.syncProductEmbeddings(); this.logger.log('Product embeddings sync completed'); } catch (error) { this.logger.error('Failed to sync product embeddings', error); throw error; } } @Process('update-metrics') async handleMetricsUpdate(job: Job<{ productId: string; userId: string; actionType: string; metadata?: any; }>) { const { productId, userId, actionType, metadata } = job.data; this.logger.log(`Processing metrics update for product ${productId}`); try { await this.analyticsService.trackProductInteraction( userId, productId, actionType, metadata, ); this.logger.log(`Metrics updated for product ${productId}`); } catch (error) { this.logger.error(`Failed to update metrics for product ${productId}`, error); throw error; } } @Process('sync-metadata') async handleMetadataSync(job: Job) { this.logger.log('Processing product metadata sync'); try { await this.productSyncService.syncProductMetadata(); this.logger.log('Product metadata sync completed'); } catch (error) { this.logger.error('Failed to sync product metadata', error); throw error; } } } |