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 | import { Injectable, Logger } from '@nestjs/common'; import { InjectModel } from '@nestjs/mongoose'; import { Model } from 'mongoose'; import { Product, ProductDocument } from '../../../database/schemas/product.schema'; import { AIService } from '../../ai/services/ai.service'; @Injectable() export class ProductSyncService { private readonly logger = new Logger(ProductSyncService.name); constructor( @InjectModel(Product.name) private productModel: Model<ProductDocument>, private aiService: AIService, ) {} async syncProductEmbeddings(): Promise<void> { this.logger.log('Starting product embeddings sync'); try { const products = await this.productModel.find({ isActive: true, 'aiFeatures.embeddings': { $exists: false }, }).limit(100); for (const product of products) { try { const text = `${product.title} ${product.description} ${product.brand} ${product.category.main}`; const embeddings = await this.aiService.generateEmbeddings({ text, model: 'sentence-transformers/all-MiniLM-L6-v2', }); await this.productModel.findByIdAndUpdate(product._id, { 'aiFeatures.embeddings': embeddings.embeddings, updatedAt: new Date(), }); this.logger.debug(`Updated embeddings for product ${product._id}`); } catch (error) { this.logger.error(`Failed to update embeddings for product ${product._id}`, error); } } this.logger.log(`Completed embeddings sync for ${products.length} products`); } catch (error) { this.logger.error('Error in product embeddings sync', error); } } async syncProductMetadata(): Promise<void> { this.logger.log('Starting product metadata sync'); // This would sync additional product metadata // For now, just log completion this.logger.log('Product metadata sync completed'); } } |