sync-parse-rest-competitors.ts 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  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 includeReviews = process.argv.includes('--reviews');
  12. const refreshReviews = process.argv.includes('--refresh-reviews');
  13. const concurrencyArg = process.argv.find((value) => value.startsWith('--concurrency='));
  14. const concurrency = Number(concurrencyArg?.split('=')[1] ?? 3);
  15. const reviewPagesArg = process.argv.find((value) => value.startsWith('--review-pages='));
  16. const reviewPages = Number(reviewPagesArg?.split('=')[1] ?? 1);
  17. const client = new ParseRestClient({
  18. serverUrl: config.parse.serverUrl,
  19. appId: config.parse.appId,
  20. masterKey: config.parse.masterKey,
  21. timeoutMs: config.parse.timeoutMs,
  22. });
  23. const repository = new ParseRestVocRepository(client);
  24. const gateway = new FmodeVocEcommerceClient(config.fmode);
  25. const service = new ParseRestCompetitorSyncService(client, repository, gateway);
  26. const result = await service.sync({
  27. workspaceId,
  28. platform: 'jd',
  29. concurrency,
  30. refresh,
  31. includeReviews,
  32. refreshReviews,
  33. reviewPages,
  34. onProgress(progress) {
  35. const reviews = progress.reviewStatus === 'not_requested'
  36. ? ''
  37. : ` reviews=${progress.reviewStatus}:${progress.reviewCount}`;
  38. console.log(`[competitor-sync] ${progress.completed}/${progress.total} ${progress.productId} detail=${progress.status}${reviews}`);
  39. },
  40. });
  41. await repository.appendAudit({
  42. workspaceId,
  43. actorUserId: 'system:competitor-sync',
  44. action: 'competitor.sync.completed',
  45. entityType: 'product',
  46. entityId: null,
  47. metadata: { ...result },
  48. });
  49. console.log(JSON.stringify(result, null, 2));