@bytebrand/export-cars 1.0.15 → 1.0.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/dist/config/alleskralle.config.d.ts +5 -0
  2. package/dist/config/alleskralle.config.js +18 -0
  3. package/dist/config/alleskralle.config.js.map +1 -0
  4. package/dist/config/auto24.config.d.ts +0 -1
  5. package/dist/config/auto24.config.js +3 -18
  6. package/dist/config/auto24.config.js.map +1 -1
  7. package/dist/config/config.d.ts +1 -0
  8. package/dist/config/config.js +1 -0
  9. package/dist/config/config.js.map +1 -1
  10. package/dist/config/dasparking.config.d.ts +5 -0
  11. package/dist/config/dasparking.config.js +18 -0
  12. package/dist/config/dasparking.config.js.map +1 -0
  13. package/dist/enums/export-type.enum.d.ts +3 -1
  14. package/dist/enums/export-type.enum.js +2 -0
  15. package/dist/enums/export-type.enum.js.map +1 -1
  16. package/dist/export.schema.d.ts +10 -0
  17. package/dist/export.schema.js +10 -0
  18. package/dist/export.schema.js.map +1 -1
  19. package/dist/exporters/auto24.exporter.js +9 -17
  20. package/dist/exporters/auto24.exporter.js.map +1 -1
  21. package/dist/formats/auto24-xml.builder.d.ts +1 -1
  22. package/dist/formats/auto24-xml.builder.js +8 -3
  23. package/dist/formats/auto24-xml.builder.js.map +1 -1
  24. package/dist/services/car.service.js +0 -1
  25. package/dist/services/car.service.js.map +1 -1
  26. package/dist/transformers/auto24.transfomer.js +5 -1
  27. package/dist/transformers/auto24.transfomer.js.map +1 -1
  28. package/dist/transformers/google.transformer.js +3 -0
  29. package/dist/transformers/google.transformer.js.map +1 -1
  30. package/dist/tsconfig.build.tsbuildinfo +1 -1
  31. package/dist/utils/parser.utils.d.ts +1 -0
  32. package/dist/utils/parser.utils.js +12 -1
  33. package/dist/utils/parser.utils.js.map +1 -1
  34. package/package.json +2 -2
  35. package/src/config/alleskralle.config.ts +15 -0
  36. package/src/config/auto24.config.ts +3 -19
  37. package/src/config/config.ts +1 -0
  38. package/src/config/dasparking.config.ts +15 -0
  39. package/src/enums/export-type.enum.ts +2 -0
  40. package/src/export.schema.ts +10 -0
  41. package/src/exporters/auto24.exporter.ts +9 -17
  42. package/src/formats/auto24-xml.builder.ts +7 -3
  43. package/src/services/car.service.ts +0 -1
  44. package/src/transformers/auto24.transfomer.ts +5 -1
  45. package/src/transformers/google.transformer.ts +3 -0
  46. package/src/utils/parser.utils.ts +11 -0
@@ -1,2 +1,3 @@
1
1
  import { RuleParser } from '../interfaces/rule-parser.interface';
2
2
  export declare function parseFields<T>(values: string, fc: RuleParser<T>): T[];
3
+ export declare function parseDealersList(dealers: string): string[];
@@ -1,9 +1,20 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.parseFields = void 0;
3
+ exports.parseDealersList = exports.parseFields = void 0;
4
+ const lodash_1 = require("lodash");
4
5
  function parseFields(values, fc) {
5
6
  const fieldsArr = values.split(',');
6
7
  return fieldsArr.map((e) => fc(e));
7
8
  }
8
9
  exports.parseFields = parseFields;
10
+ function parseDealersList(dealers) {
11
+ if (dealers) {
12
+ if ((0, lodash_1.indexOf)(dealers, ',') !== -1) {
13
+ return dealers.split(',').map((dealerId) => dealerId.trim());
14
+ }
15
+ return [dealers];
16
+ }
17
+ return [];
18
+ }
19
+ exports.parseDealersList = parseDealersList;
9
20
  //# sourceMappingURL=parser.utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"parser.utils.js","sourceRoot":"","sources":["../../src/utils/parser.utils.ts"],"names":[],"mappings":";;;AAEA,SAAgB,WAAW,CAAI,MAAc,EAAE,EAAiB;IAC9D,MAAM,SAAS,GAAa,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9C,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,CAAS,EAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAChD,CAAC;AAHD,kCAGC"}
1
+ {"version":3,"file":"parser.utils.js","sourceRoot":"","sources":["../../src/utils/parser.utils.ts"],"names":[],"mappings":";;;AAAA,mCAAiC;AAGjC,SAAgB,WAAW,CAAI,MAAc,EAAE,EAAiB;IAC9D,MAAM,SAAS,GAAa,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9C,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,CAAS,EAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAChD,CAAC;AAHD,kCAGC;AAED,SAAgB,gBAAgB,CAAC,OAAe;IAC9C,IAAI,OAAO,EAAE;QACX,IAAI,IAAA,gBAAO,EAAC,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE;YAChC,OAAO,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,QAAgB,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;SACtE;QACD,OAAO,CAAC,OAAO,CAAC,CAAC;KAClB;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AARD,4CAQC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bytebrand/export-cars",
3
- "version": "1.0.15",
3
+ "version": "1.0.17",
4
4
  "description": "",
5
5
  "author": "bytebrand",
6
6
  "license": "UNLICENSED",
@@ -64,5 +64,5 @@
64
64
  "engines": {
65
65
  "node": ">=14.0.0"
66
66
  },
67
- "gitHead": "6159441288cbd0bafd0e3c3a3b2d99e9fea1fdbc"
67
+ "gitHead": "a89952f7214cc5ca0453df1973e09ba73b0d8770"
68
68
  }
@@ -0,0 +1,15 @@
1
+ import { Params } from '../interfaces/params.interface';
2
+ import { parseDealersList } from '../utils/parser.utils';
3
+ import { Config } from './config';
4
+
5
+ export class AlleskralleConfig extends Config {
6
+ constructor(params: Params) {
7
+ super(params);
8
+ this.pathesConfig.localConvertedDirectory = this.environmentConfig[params.environment].localConvertedDirectory;
9
+ this.pathesConfig.remoteDirectory = this.environmentConfig[params.environment].remoteDirectory;
10
+ this.dealersList = params.dealers ? parseDealersList(params.dealers) : null;
11
+ this.campaign = 'alleskralle';
12
+ this.location = 'Deutschland';
13
+ this.outputFiles = ['api_export_cars_alleskralle.xml'];
14
+ }
15
+ }
@@ -1,5 +1,5 @@
1
- import { indexOf } from 'lodash';
2
1
  import { Params } from '../interfaces/params.interface';
2
+ import { parseDealersList } from '../utils/parser.utils';
3
3
  import { Config } from './config';
4
4
 
5
5
  export class Auto24Config extends Config {
@@ -7,23 +7,7 @@ export class Auto24Config extends Config {
7
7
  super(params);
8
8
  this.pathesConfig.localConvertedDirectory = this.environmentConfig[params.environment].localConvertedDirectory;
9
9
  this.pathesConfig.remoteDirectory = this.environmentConfig[params.environment].remoteDirectory;
10
- this.dealersList = this.getDealersList(params.dealers);
11
- this.outputFiles = [
12
- 'api_export_cars_GERMAN.xml',
13
- 'api_export_moto_GERMAN.xml',
14
- 'api_export_nfz_GERMAN.xml',
15
- 'api_export_womo_GERMAN.xml',
16
- 'autode.tar.gz',
17
- ];
18
- }
19
-
20
- private getDealersList(dealers: string): string[] {
21
- if (dealers) {
22
- if (indexOf(dealers, ',') !== -1) {
23
- return dealers.split(',').map((dealerId: string) => dealerId.trim());
24
- }
25
- return [dealers];
26
- }
27
- return [];
10
+ this.dealersList = params.dealers ? parseDealersList(params.dealers) : null;
11
+ this.outputFiles = ['api_export_cars_GERMAN.xml', 'autode.tar.gz'];
28
12
  }
29
13
  }
@@ -14,6 +14,7 @@ export class Config {
14
14
  isNewCar: boolean;
15
15
  isCriteo: boolean;
16
16
  criteoId: number;
17
+ location: string;
17
18
  exportType: ExportType;
18
19
  url: string;
19
20
  input: {
@@ -0,0 +1,15 @@
1
+ import { Params } from '../interfaces/params.interface';
2
+ import { parseDealersList } from '../utils/parser.utils';
3
+ import { Config } from './config';
4
+
5
+ export class DasparkingConfig extends Config {
6
+ constructor(params: Params) {
7
+ super(params);
8
+ this.pathesConfig.localConvertedDirectory = this.environmentConfig[params.environment].localConvertedDirectory;
9
+ this.pathesConfig.remoteDirectory = this.environmentConfig[params.environment].remoteDirectory;
10
+ this.dealersList = params.dealers ? parseDealersList(params.dealers) : null;
11
+ this.campaign = 'dasparking';
12
+ this.location = 'Deutschland';
13
+ this.outputFiles = ['api_export_cars_dasparking.xml'];
14
+ }
15
+ }
@@ -11,4 +11,6 @@ export enum ExportType {
11
11
  BY_OWNER = 'by-owner',
12
12
  AUTOUNCLE = 'autouncle',
13
13
  AS24 = 'as24',
14
+ ALLESKRALLE = 'alleskralle',
15
+ DASPARKING = 'dasparking',
14
16
  }
@@ -1,8 +1,10 @@
1
+ import { AlleskralleConfig } from './config/alleskralle.config';
1
2
  import { As24Config } from './config/as24.config';
2
3
  import { Auto24Config } from './config/auto24.config';
3
4
  import { AutoboerseConfig } from './config/autoboerse.config';
4
5
  import { AutouncleConfig } from './config/autouncle.config';
5
6
  import { ByOwnerConfig } from './config/by-owner.config';
7
+ import { DasparkingConfig } from './config/dasparking.config';
6
8
  import { EautoConfig } from './config/eauto.config';
7
9
  import { FbConfig } from './config/fb.config';
8
10
  import { GoogleConfig } from './config/google.config';
@@ -70,4 +72,12 @@ export const exportSchema = {
70
72
  config: As24Config,
71
73
  exporter: As24Exporter,
72
74
  },
75
+ [ExportType.ALLESKRALLE]: {
76
+ config: AlleskralleConfig,
77
+ exporter: Auto24Exporter,
78
+ },
79
+ [ExportType.DASPARKING]: {
80
+ config: DasparkingConfig,
81
+ exporter: Auto24Exporter,
82
+ },
73
83
  };
@@ -26,31 +26,24 @@ export class Auto24Exporter implements Exporter {
26
26
  exists && (await CronicleUtils.unlink(file));
27
27
  }
28
28
 
29
- const [fileCarXml, fileMotoXml, fileNfzXml, fileWomoXml, fileGZ] = this.configService.config.outputFiles;
30
- console.log(fileCarXml);
31
- const carsXmlBuilder = new Auto24XmlBuilder(fileCarXml);
32
- const motoXmlBuilder = new Auto24XmlBuilder(fileMotoXml);
33
- const nfzXmlBuilder = new Auto24XmlBuilder(fileNfzXml);
34
- const womoXmlBuilder = new Auto24XmlBuilder(fileWomoXml);
29
+ const [fileXml, fileGZ] = this.configService.config.outputFiles;
35
30
 
36
- await motoXmlBuilder.buildStart();
37
- await nfzXmlBuilder.buildStart();
38
- await womoXmlBuilder.buildStart();
31
+ const xmlBuilder = new Auto24XmlBuilder(fileXml);
39
32
 
40
33
  const auto24Transformer = await this.moduleRef.create(Auto24Transformer);
41
34
 
42
35
  await this.loaderService.process(async (chunk: FsChunkInterface) => {
43
36
  if (chunk && chunk.data) {
44
37
  if (toNumber(chunk.id) === 0) {
45
- await carsXmlBuilder.buildStart(chunk.total);
38
+ await xmlBuilder.buildStart(chunk.total);
46
39
  }
47
40
 
48
41
  for (let i = 0; i < chunk.data.length; i += 1) {
49
42
  const data = chunk.data[i];
50
43
  const { car, images } = data;
51
44
  const ownerId = get(car, 'metaData.ownerId');
52
- if (this.configService.config.dealersList.indexOf(ownerId) !== -1) {
53
- await carsXmlBuilder.addItem(auto24Transformer.transform(car, images));
45
+ if (!this.configService.config.dealersList || this.configService.config.dealersList.indexOf(ownerId) !== -1) {
46
+ await xmlBuilder.addItem(auto24Transformer.transform(car, images), this.configService.config.location);
54
47
  this.carService.counter.countCar(images);
55
48
  }
56
49
  }
@@ -58,11 +51,10 @@ export class Auto24Exporter implements Exporter {
58
51
  }
59
52
  });
60
53
 
61
- await carsXmlBuilder.buildEnd();
62
- await motoXmlBuilder.buildEnd();
63
- await nfzXmlBuilder.buildEnd();
64
- await womoXmlBuilder.buildEnd();
54
+ await xmlBuilder.buildEnd();
65
55
 
66
- await Zipper.tar({ dest: fileGZ, fileList: [fileCarXml, fileMotoXml, fileNfzXml, fileWomoXml] });
56
+ if (fileGZ) {
57
+ await Zipper.tar({ dest: fileGZ, fileList: [fileXml] });
58
+ }
67
59
  }
68
60
  }
@@ -9,7 +9,7 @@ export class Auto24XmlBuilder extends XMLBuilderBase {
9
9
  <index_totalResults>${totalResults}</index_totalResults>`);
10
10
  }
11
11
 
12
- async addItem(car: Auto24XmlItem): Promise<void> {
12
+ async addItem(car: Auto24XmlItem, location = ''): Promise<void> {
13
13
  let item = '';
14
14
 
15
15
  item += '\n<item>\n';
@@ -30,8 +30,12 @@ export class Auto24XmlBuilder extends XMLBuilderBase {
30
30
  item += this.getElementsList('images', 'image', car.images);
31
31
  item += this.getElement('price', car.price);
32
32
  item += this.getElement('power-kw', car.power);
33
- item += this.getElement('zip', car.zip);
34
- item += this.getElement('city', car.city, true);
33
+ if (location) {
34
+ item += this.getElement('location', location);
35
+ } else {
36
+ item += this.getElement('zip', car.zip);
37
+ item += this.getElement('city', car.city, true);
38
+ }
35
39
  item += this.getElement('mileage', car.mileage);
36
40
  item += this.getElement('companyname', car.companyname, true);
37
41
  item += this.getElement('extras', car.extras, true);
@@ -41,7 +41,6 @@ export class CarService {
41
41
  if (!owner) {
42
42
  try {
43
43
  owner = await this.bottleneck.schedule(() => this.requestService.upaRequest.getDealerProfile(ownerId));
44
- console.log('TEST');
45
44
  } catch (e) {
46
45
  console.log(e);
47
46
  if (e.statusCode !== HttpStatus.NOT_FOUND) {
@@ -19,10 +19,14 @@ export class Auto24Transformer {
19
19
 
20
20
  transform(car: DataSchemes.Car, imboImages: ImboImageResponseInterface[]): Auto24XmlItem {
21
21
  const autodeid = toString(get(car, '_id', ''));
22
+ let userlink = `https://www.${this.configService.config.url}/search/vehicle/${autodeid}`;
23
+ if (this.configService.config.campaign) {
24
+ userlink += `?source=classifieds&medium=listing&campaign=${this.configService.config.campaign}`;
25
+ }
22
26
 
23
27
  return {
24
28
  autodeid,
25
- userlink: `https://www.${this.configService.config.url}/search/vehicle/${autodeid}`,
29
+ userlink,
26
30
  apilink: `https://www.${this.configService.config.url}/service/car-basic-data/api/v1/car/${autodeid}`,
27
31
  brand: toString(get(car, 'mainData.make', '')),
28
32
  modell: toString(get(car, 'mainData.model', '')),
@@ -48,6 +48,9 @@ export class GoogleTransformer {
48
48
  }
49
49
 
50
50
  private async getDescription(car: DataSchemes.Car): Promise<string> {
51
+ if (this.configService.config.isCriteo) {
52
+ return '0€ Anzahlung möglich. 14 Tage Geld-zurück-Garantie. Lieferung bis vor die Haustür. 1 Jahr Garantie inklusive. Deutschlands großes Autoportal.';
53
+ }
51
54
  const dealerId = get(car, 'metaData.ownerId');
52
55
  const descriptionSchema = await this.userService.getDefaultSummaryByDealerId(dealerId);
53
56
  const descriptionBuilder = CarDescriptionFactory.create(DescriptionTypeEnum.Mobile, car);
@@ -1,6 +1,17 @@
1
+ import { indexOf } from 'lodash';
1
2
  import { RuleParser } from '../interfaces/rule-parser.interface';
2
3
 
3
4
  export function parseFields<T>(values: string, fc: RuleParser<T>): T[] {
4
5
  const fieldsArr: string[] = values.split(',');
5
6
  return fieldsArr.map((e: string): T => fc(e));
6
7
  }
8
+
9
+ export function parseDealersList(dealers: string): string[] {
10
+ if (dealers) {
11
+ if (indexOf(dealers, ',') !== -1) {
12
+ return dealers.split(',').map((dealerId: string) => dealerId.trim());
13
+ }
14
+ return [dealers];
15
+ }
16
+ return [];
17
+ }