import 'dotenv/config'; import { loadConfig } from '../src/config/env.js'; import { ParseRestClient } from '../src/db/parse-rest.client.js'; import { ParseRestCompetitorSyncService } from '../src/modules/domestic-voc/services/parse-rest-competitor-sync.service.js'; import { FmodeVocEcommerceClient } from '../src/modules/domestic-voc/upstream/fmode-client.js'; import { ParseRestVocRepository } from '../src/modules/saas-platform/parse-rest-voc.repository.js'; const config = loadConfig(); if (config.storageDriver !== 'parse_rest') throw new Error('STORAGE_DRIVER must be parse_rest'); const workspaceId = process.argv[2] || config.auth.defaultWorkspaceId; const refresh = process.argv.includes('--refresh'); const includeReviews = process.argv.includes('--reviews'); const refreshReviews = process.argv.includes('--refresh-reviews'); const concurrencyArg = process.argv.find((value) => value.startsWith('--concurrency=')); const concurrency = Number(concurrencyArg?.split('=')[1] ?? 3); const reviewPagesArg = process.argv.find((value) => value.startsWith('--review-pages=')); const reviewPages = Number(reviewPagesArg?.split('=')[1] ?? 1); const client = new ParseRestClient({ serverUrl: config.parse.serverUrl, appId: config.parse.appId, masterKey: config.parse.masterKey, timeoutMs: config.parse.timeoutMs, }); const repository = new ParseRestVocRepository(client); const gateway = new FmodeVocEcommerceClient(config.fmode); const service = new ParseRestCompetitorSyncService(client, repository, gateway); const result = await service.sync({ workspaceId, platform: 'jd', concurrency, refresh, includeReviews, refreshReviews, reviewPages, onProgress(progress) { const reviews = progress.reviewStatus === 'not_requested' ? '' : ` reviews=${progress.reviewStatus}:${progress.reviewCount}`; console.log(`[competitor-sync] ${progress.completed}/${progress.total} ${progress.productId} detail=${progress.status}${reviews}`); }, }); await repository.appendAudit({ workspaceId, actorUserId: 'system:competitor-sync', action: 'competitor.sync.completed', entityType: 'product', entityId: null, metadata: { ...result }, }); console.log(JSON.stringify(result, null, 2));