sync-parse-rest-competitors.ts 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. import 'dotenv/config';
  2. import { loadConfig } from '../src/config/env.js';
  3. import { ParseRestClient } from '../src/db/parse-rest.client.js';
  4. import { ParseRestCompetitorSyncService } from '../src/modules/domestic-voc/services/parse-rest-competitor-sync.service.js';
  5. import { FmodeVocEcommerceClient } from '../src/modules/domestic-voc/upstream/fmode-client.js';
  6. import { ParseRestVocRepository } from '../src/modules/saas-platform/parse-rest-voc.repository.js';
  7. const config = loadConfig();
  8. if (config.storageDriver !== 'parse_rest') throw new Error('STORAGE_DRIVER must be parse_rest');
  9. const workspaceId = process.argv[2] || config.auth.defaultWorkspaceId;
  10. const refresh = process.argv.includes('--refresh');
  11. const concurrencyArg = process.argv.find((value) => value.startsWith('--concurrency='));
  12. const concurrency = Number(concurrencyArg?.split('=')[1] ?? 3);
  13. const client = new ParseRestClient({
  14. serverUrl: config.parse.serverUrl,
  15. appId: config.parse.appId,
  16. masterKey: config.parse.masterKey,
  17. timeoutMs: config.parse.timeoutMs,
  18. });
  19. const repository = new ParseRestVocRepository(client);
  20. const gateway = new FmodeVocEcommerceClient(config.fmode);
  21. const service = new ParseRestCompetitorSyncService(client, repository, gateway);
  22. const result = await service.sync({
  23. workspaceId,
  24. platform: 'jd',
  25. concurrency,
  26. refresh,
  27. onProgress(progress) {
  28. console.log(`[competitor-sync] ${progress.completed}/${progress.total} ${progress.productId} ${progress.status}`);
  29. },
  30. });
  31. await repository.appendAudit({
  32. workspaceId,
  33. actorUserId: 'system:competitor-sync',
  34. action: 'competitor.sync.completed',
  35. entityType: 'product',
  36. entityId: null,
  37. metadata: { ...result },
  38. });
  39. console.log(JSON.stringify(result, null, 2));