All files / src/modules/products/services product-sync.service.ts

0% Statements 0/25
100% Branches 0/0
0% Functions 0/3
0% Lines 0/23

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');
  }
}