| 12345678910111213141516171819202122232425262728293031323334353637383940 |
- 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 concurrencyArg = process.argv.find((value) => value.startsWith('--concurrency='));
- const concurrency = Number(concurrencyArg?.split('=')[1] ?? 3);
- 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,
- onProgress(progress) {
- console.log(`[competitor-sync] ${progress.completed}/${progress.total} ${progress.productId} ${progress.status}`);
- },
- });
- 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));
|