| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- 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));
|