@bytebrand/export-cars 1.10.12 → 1.11.0

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 (119) hide show
  1. package/dist/app.module.js +4 -7
  2. package/dist/app.module.js.map +1 -1
  3. package/dist/configs/index.d.ts +1 -0
  4. package/dist/configs/index.js +1 -0
  5. package/dist/configs/index.js.map +1 -1
  6. package/dist/configs/trovit.config.d.ts +5 -0
  7. package/dist/configs/trovit.config.js +17 -0
  8. package/dist/configs/trovit.config.js.map +1 -0
  9. package/dist/constants/modix/category.constant.js.map +1 -1
  10. package/dist/enums/export-type.enum.d.ts +2 -1
  11. package/dist/enums/export-type.enum.js +1 -0
  12. package/dist/enums/export-type.enum.js.map +1 -1
  13. package/dist/export.schema.d.ts +6 -2
  14. package/dist/export.schema.js +4 -0
  15. package/dist/export.schema.js.map +1 -1
  16. package/dist/exporters/index.d.ts +1 -0
  17. package/dist/exporters/index.js +1 -0
  18. package/dist/exporters/index.js.map +1 -1
  19. package/dist/exporters/trovit.exporter.d.ts +12 -0
  20. package/dist/exporters/trovit.exporter.js +62 -0
  21. package/dist/exporters/trovit.exporter.js.map +1 -0
  22. package/dist/formats/index.d.ts +1 -0
  23. package/dist/formats/index.js +1 -0
  24. package/dist/formats/index.js.map +1 -1
  25. package/dist/formats/trovit-xml.builder.d.ts +8 -0
  26. package/dist/formats/trovit-xml.builder.js +39 -0
  27. package/dist/formats/trovit-xml.builder.js.map +1 -0
  28. package/dist/interfaces/{autoborse.intreface.d.ts → atributes-wrap-item.intreface.d.ts} +1 -1
  29. package/dist/interfaces/{modix/modix-wrap-item.intreface.js → atributes-wrap-item.intreface.js} +1 -1
  30. package/dist/interfaces/atributes-wrap-item.intreface.js.map +1 -0
  31. package/dist/interfaces/export-item.interface.d.ts +63 -36
  32. package/dist/interfaces/index.d.ts +1 -0
  33. package/dist/interfaces/index.js +1 -0
  34. package/dist/interfaces/index.js.map +1 -1
  35. package/dist/interfaces/modix/index.d.ts +0 -1
  36. package/dist/interfaces/modix/index.js +0 -1
  37. package/dist/interfaces/modix/index.js.map +1 -1
  38. package/dist/interfaces/modix/modix-item-list.interface.d.ts +2 -2
  39. package/dist/services/images.service.d.ts +3 -3
  40. package/dist/services/images.service.js +10 -10
  41. package/dist/services/images.service.js.map +1 -1
  42. package/dist/services/index.d.ts +6 -5
  43. package/dist/services/index.js +6 -5
  44. package/dist/services/index.js.map +1 -1
  45. package/dist/services/transformer.service.d.ts +29 -0
  46. package/dist/services/transformer.service.js +122 -0
  47. package/dist/services/transformer.service.js.map +1 -0
  48. package/dist/transformers/auto24.transfomer.js +3 -3
  49. package/dist/transformers/auto24.transfomer.js.map +1 -1
  50. package/dist/transformers/autouncle.transformer.js +1 -1
  51. package/dist/transformers/autouncle.transformer.js.map +1 -1
  52. package/dist/transformers/facebook-shop.transformer.js +1 -1
  53. package/dist/transformers/facebook-shop.transformer.js.map +1 -1
  54. package/dist/transformers/fb-description.transformer.js +4 -4
  55. package/dist/transformers/fb-description.transformer.js.map +1 -1
  56. package/dist/transformers/fb.transformer.js +5 -6
  57. package/dist/transformers/fb.transformer.js.map +1 -1
  58. package/dist/transformers/google.transformer.js +1 -1
  59. package/dist/transformers/google.transformer.js.map +1 -1
  60. package/dist/transformers/index.d.ts +1 -0
  61. package/dist/transformers/index.js +1 -0
  62. package/dist/transformers/index.js.map +1 -1
  63. package/dist/transformers/meinstadt.transformer.d.ts +1 -1
  64. package/dist/transformers/meinstadt.transformer.js +2 -2
  65. package/dist/transformers/meinstadt.transformer.js.map +1 -1
  66. package/dist/transformers/mobile.transformer.js +3 -3
  67. package/dist/transformers/mobile.transformer.js.map +1 -1
  68. package/dist/transformers/modix.transformer.js +2 -2
  69. package/dist/transformers/modix.transformer.js.map +1 -1
  70. package/dist/transformers/ooyyo.transformer.js +1 -1
  71. package/dist/transformers/ooyyo.transformer.js.map +1 -1
  72. package/dist/transformers/rubrikk.transformer.js +1 -1
  73. package/dist/transformers/rubrikk.transformer.js.map +1 -1
  74. package/dist/transformers/trovit.transformer.d.ts +16 -0
  75. package/dist/transformers/trovit.transformer.js +73 -0
  76. package/dist/transformers/trovit.transformer.js.map +1 -0
  77. package/dist/tsconfig.build.tsbuildinfo +1 -1
  78. package/dist/utils/converter.utils.d.ts +1 -1
  79. package/dist/utils/converter.utils.js +4 -4
  80. package/dist/utils/converter.utils.js.map +1 -1
  81. package/package.json +3 -3
  82. package/src/app.module.ts +14 -8
  83. package/src/configs/index.ts +1 -0
  84. package/src/configs/trovit.config.ts +14 -0
  85. package/src/constants/modix/category.constant.ts +0 -1
  86. package/src/enums/export-type.enum.ts +1 -0
  87. package/src/export.schema.ts +6 -0
  88. package/src/exporters/index.ts +1 -0
  89. package/src/exporters/trovit.exporter.ts +49 -0
  90. package/src/formats/index.ts +1 -0
  91. package/src/formats/trovit-xml.builder.ts +44 -0
  92. package/src/interfaces/{autoborse.intreface.ts → atributes-wrap-item.intreface.ts} +1 -1
  93. package/src/interfaces/export-item.interface.ts +64 -36
  94. package/src/interfaces/index.ts +1 -0
  95. package/src/interfaces/modix/index.ts +0 -1
  96. package/src/interfaces/modix/modix-item-list.interface.ts +2 -2
  97. package/src/services/images.service.ts +19 -10
  98. package/src/services/index.ts +6 -5
  99. package/src/services/transformer.service.ts +129 -0
  100. package/src/transformers/as24.transformer.ts +3 -3
  101. package/src/transformers/auto24.transfomer.ts +7 -2
  102. package/src/transformers/autouncle.transformer.ts +2 -2
  103. package/src/transformers/facebook-shop.transformer.ts +1 -1
  104. package/src/transformers/fb-description.transformer.ts +4 -4
  105. package/src/transformers/fb.transformer.ts +14 -12
  106. package/src/transformers/google.transformer.ts +6 -2
  107. package/src/transformers/index.ts +1 -0
  108. package/src/transformers/meinstadt.transformer.ts +8 -3
  109. package/src/transformers/mobile.transformer.ts +8 -4
  110. package/src/transformers/modix.transformer.ts +14 -15
  111. package/src/transformers/ooyyo.transformer.ts +1 -1
  112. package/src/transformers/rubrikk.transformer.ts +1 -1
  113. package/src/transformers/trovit.transformer.ts +63 -0
  114. package/src/utils/converter.utils.ts +2 -2
  115. package/dist/interfaces/autoborse.intreface.js +0 -3
  116. package/dist/interfaces/autoborse.intreface.js.map +0 -1
  117. package/dist/interfaces/modix/modix-wrap-item.intreface.d.ts +0 -6
  118. package/dist/interfaces/modix/modix-wrap-item.intreface.js.map +0 -1
  119. package/src/interfaces/modix/modix-wrap-item.intreface.ts +0 -6
@@ -6,9 +6,9 @@ import { MappingRules } from '../interfaces/mapping-rules.interface';
6
6
  import { Injectable } from '@nestjs/common';
7
7
  import { LoggerService } from '@bytebrand/cronicle-helper';
8
8
 
9
- /**
10
- * @deprecated 02.03.2022
11
- */
9
+ /**
10
+ * @deprecated 02.03.2022
11
+ */
12
12
  @Injectable()
13
13
  export class As24Transformer {
14
14
  private currentCar: DataSchemes.Car;
@@ -7,7 +7,7 @@ import { ImboImageResponseInterface } from '@bytebrand/chunkable';
7
7
  import { Auto24XmlItem } from '../interfaces';
8
8
  import { Injectable } from '@nestjs/common';
9
9
  import { ConfigService, ImagesService } from '../services';
10
- import { isNotEmptyArray } from '../utils/validator.utils';
10
+ import { isNotEmptyArray } from '../utils';
11
11
 
12
12
  @Injectable()
13
13
  export class Auto24Transformer {
@@ -19,7 +19,12 @@ export class Auto24Transformer {
19
19
 
20
20
  async transform(car: DataSchemes.Car, imboImages: ImboImageResponseInterface[]): Promise<Auto24XmlItem> {
21
21
  const carId = toString(get(car, '_id', ''));
22
- const transformedImages = await this.imageService.getImages(car, imboImages, this.configService.config.imageType);
22
+ const transformedImages = await this.imageService.getImages(
23
+ car,
24
+ imboImages,
25
+ this.configService.config.imageType,
26
+ false,
27
+ );
23
28
  let userlink = `https://www.${this.configService.config.domain}/search/vehicle/${carId}`;
24
29
  if (this.configService.config.campaign) {
25
30
  userlink += `?source=classifieds&medium=listing&campaign=${this.configService.config.campaign}`;
@@ -1,6 +1,6 @@
1
1
  import { TranslatorExtended } from '@bytebrand/schema-tools';
2
2
  import { de, deVehicleDetailsPage, deVehicleProps } from '@bytebrand/i18n-dictionaries';
3
- import {get, toString, isEmpty, toSafeInteger } from 'lodash';
3
+ import { get, toString, isEmpty, toSafeInteger } from 'lodash';
4
4
  import * as moment from 'moment';
5
5
  import { DataSchemes } from '@bytebrand/car-schema';
6
6
  import { DePostalCodesService } from '@bytebrand/car-basic-data-scope';
@@ -35,7 +35,7 @@ export class AutouncleTransformer {
35
35
  }): Promise<AutouncleJsonItem> {
36
36
  const autodeId = toString(get(car, '_id', ''));
37
37
  const address = await this.getAddress(car, owner);
38
- const image_urls = await this.imageService.getImages(car, images, this.configService.config.imageType);
38
+ const image_urls = await this.imageService.getImages(car, images, this.configService.config.imageType, false);
39
39
  const transformed_images = image_urls.map(url => {
40
40
  return { url };
41
41
  });
@@ -29,7 +29,7 @@ export class FacebookShopTransformer {
29
29
  car: DataSchemes.Car;
30
30
  images: ImboImageResponseInterface[];
31
31
  }): Promise<FacebookShopItem> {
32
- const imageLinks = await this.imageService.getImages(car, images, this.configService.config.imageType);
32
+ const imageLinks = await this.imageService.getImages(car, images, this.configService.config.imageType, false);
33
33
 
34
34
  return {
35
35
  id: { value: get(car, 'metaData.vehicleId'), isGoogle: true },
@@ -43,7 +43,7 @@ export class FbDescription {
43
43
  {
44
44
  title: 'title.cylinders',
45
45
  value: {
46
- key: get(this.car, 'engineData.cylinders') as string,
46
+ key: get(this.car, 'engineData.cylinders', '') as string,
47
47
  },
48
48
  },
49
49
  {
@@ -169,7 +169,7 @@ export class FbDescription {
169
169
  {
170
170
  title: 'title.base',
171
171
  value: {
172
- key: get(this.car, 'driveSuspension.wheelBase') as string,
172
+ key: get(this.car, 'driveSuspension.wheelBase', '') as string,
173
173
  },
174
174
  },
175
175
  {
@@ -191,13 +191,13 @@ export class FbDescription {
191
191
  {
192
192
  title: 'title.doors',
193
193
  value: {
194
- key: get(this.car, 'mainData.doors') as string,
194
+ key: get(this.car, 'mainData.doors', '') as string,
195
195
  },
196
196
  },
197
197
  {
198
198
  title: 'title.seats',
199
199
  value: {
200
- key: get(this.car, 'mainData.seats') as string,
200
+ key: get(this.car, 'mainData.seats', '') as string,
201
201
  },
202
202
  },
203
203
  {
@@ -29,7 +29,7 @@ import { Description } from '../interfaces/description.interface';
29
29
  import { FbDescription } from './fb-description.transformer';
30
30
  import { ConfigService, ImagesService } from '../services';
31
31
  import { FbEquipment } from './fb-equipment.transformer';
32
- import { isValidVin } from '../utils/validator.utils';
32
+ import { isValidVin } from '../utils';
33
33
  import { UserService } from 'src/services';
34
34
  import { ImageType } from '../enums';
35
35
  import {
@@ -41,7 +41,6 @@ import {
41
41
  TIMESTAMP_FIRST_YEAR,
42
42
  } from '../constants/fb.constants';
43
43
 
44
-
45
44
  @Injectable()
46
45
  export class FbTransformer {
47
46
  private translator: TranslatorExtended;
@@ -49,10 +48,10 @@ export class FbTransformer {
49
48
  private imagesService: ImagesService;
50
49
 
51
50
  constructor(
52
- @Inject(CACHE_MANAGER) private cacheManager: Cache,
53
- private readonly configService: ConfigService,
54
- private readonly userService: UserService
55
- ) {
51
+ @Inject(CACHE_MANAGER) private cacheManager: Cache,
52
+ private readonly configService: ConfigService,
53
+ private readonly userService: UserService,
54
+ ) {
56
55
  this.imagesService = new ImagesService(configService, userService);
57
56
  const dict = { ...de, ...deVehicleProps, ...deVehicleDetailsPage };
58
57
  this.translator = new TranslatorExtended(dict);
@@ -72,7 +71,7 @@ export class FbTransformer {
72
71
  const year = this.getYear(car);
73
72
  const dealerInfo = this.getDealerItems(car);
74
73
  const address = await this.getAddress(car, owner);
75
- const image_links = await this.imagesService.getImages(car, images, ImageType.marketing);
74
+ const image_links = await this.imagesService.getImages(car, images, ImageType.marketing, false);
76
75
  const transformedImages = image_links.map(el => {
77
76
  return { url: el };
78
77
  });
@@ -138,7 +137,7 @@ export class FbTransformer {
138
137
  const firstRegistration = get(car, 'mainData.firstRegistration', 0) as number;
139
138
  const firstRegistrationYear = moment(firstRegistration * 1000).format('YYYY');
140
139
 
141
- const constructionYear = get(car, 'mainData.constructionYear') as string;
140
+ const constructionYear = get(car, 'mainData.constructionYear', '') as string;
142
141
 
143
142
  const metaCreationDate = get(car, 'metaData.creationDate') as number;
144
143
  const metaCreationYear = moment(metaCreationDate * 1000).format('YYYY');
@@ -329,11 +328,15 @@ export class FbTransformer {
329
328
  const cacheKey = `${info.city}_${info.zip}`;
330
329
 
331
330
  let entry = await this.cacheManager.get(cacheKey);
332
- if (entry) { return entry as DePostalCodesEntryInterface; };
333
- if (entry === 'no_data') { return undefined; }
331
+ if (entry) {
332
+ return entry as DePostalCodesEntryInterface;
333
+ }
334
+ if (entry === 'no_data') {
335
+ return undefined;
336
+ }
334
337
 
335
338
  entry = await this.postalCodesService.getLocationByPostalCode(info.zip);
336
- entry && await this.cacheManager.set(cacheKey, entry);
339
+ entry && (await this.cacheManager.set(cacheKey, entry));
337
340
 
338
341
  if (!entry) {
339
342
  entry = await this.postalCodesService.getLocationByCity(info.city);
@@ -342,7 +345,6 @@ export class FbTransformer {
342
345
  } else {
343
346
  await this.cacheManager.set(cacheKey, 'no_data');
344
347
  }
345
-
346
348
  }
347
349
  return entry as DePostalCodesEntryInterface;
348
350
  }
@@ -6,7 +6,6 @@ import { de, deVehicleDetailsPage, deVehicleProps } from '@bytebrand/i18n-dictio
6
6
  import { Injectable } from '@nestjs/common';
7
7
  import { ConfigService, ImagesService, UserService } from '../services';
8
8
  import { GoogleXmlItem } from '../interfaces';
9
- import { ImageType } from '../enums';
10
9
 
11
10
  @Injectable()
12
11
  export class GoogleTransformer {
@@ -23,7 +22,12 @@ export class GoogleTransformer {
23
22
 
24
23
  async transform({ car, images }: { car: DataSchemes.Car; images: Array<any> }): Promise<GoogleXmlItem> {
25
24
  const carId = toString(get(car, '_id', ''));
26
- const transformedImages = await this.imageService.getImages(car, images, this.configService.config.imageType);
25
+ const transformedImages = await this.imageService.getImages(
26
+ car,
27
+ images,
28
+ this.configService.config.imageType,
29
+ false,
30
+ );
27
31
 
28
32
  return {
29
33
  id: carId,
@@ -1,3 +1,4 @@
1
1
  export * from './rubrikk.transformer';
2
2
  export * from './modix.transformer';
3
3
  export * from './facebook-shop.transformer';
4
+ export * from './trovit.transformer';
@@ -9,13 +9,18 @@ import { de } from '@bytebrand/i18n-dictionaries';
9
9
  import { ConfigService, ImagesService } from '../services';
10
10
  import { MeinstadtJsonItem } from '../interfaces';
11
11
 
12
-
13
12
  @Injectable()
14
13
  export class MeinstadtTransformer {
15
14
  constructor(private configService: ConfigService, private readonly imageService: ImagesService) {}
16
15
 
17
- async transform({ car, images }: { car: DataSchemes.Car, images: ImboImageResponseInterface[] }): Promise<Partial<MeinstadtJsonItem>> {
18
- const carImages = await this.imageService.getImages(car, images, this.configService.config.imageType);
16
+ async transform({
17
+ car,
18
+ images,
19
+ }: {
20
+ car: DataSchemes.Car;
21
+ images: ImboImageResponseInterface[];
22
+ }): Promise<Partial<MeinstadtJsonItem>> {
23
+ const carImages = await this.imageService.getImages(car, images, this.configService.config.imageType, false);
19
24
 
20
25
  const carId = toString(get(car, '_id', null));
21
26
 
@@ -9,10 +9,9 @@ import { DataSchemes } from '@bytebrand/car-schema';
9
9
 
10
10
  import { MappingService, UserService, ImagesService } from '../services';
11
11
  import { MappingRules } from '../interfaces/mapping-rules.interface';
12
- import { isNotEmptyArray } from '../utils/validator.utils';
12
+ import { isNotEmptyArray } from '../utils';
13
13
  import { ConfigService } from '../services';
14
14
 
15
-
16
15
  const vinGenerator = require('vin-generator');
17
16
 
18
17
  @Injectable()
@@ -24,7 +23,7 @@ export class MobileTransformer {
24
23
  private userService: UserService,
25
24
  private configService: ConfigService,
26
25
  private imagesService: ImagesService,
27
- ) { }
26
+ ) {}
28
27
 
29
28
  async transform(carData: DataSchemes.Car, images: ImboImageResponseInterface[]): Promise<unknown> {
30
29
  this.currentCar = carData;
@@ -353,7 +352,12 @@ export class MobileTransformer {
353
352
  }
354
353
 
355
354
  private async getImages(car: DataSchemes.Car, images): Promise<string | null> {
356
- const transformedImages = await this.imagesService.getImages(car, images, this.configService.config.imageType);
355
+ const transformedImages = await this.imagesService.getImages(
356
+ car,
357
+ images,
358
+ this.configService.config.imageType,
359
+ false,
360
+ );
357
361
  let imagesAsALine;
358
362
  if (isNotEmptyArray(transformedImages)) {
359
363
  imagesAsALine = transformedImages.map((el: string) => el).join(';');
@@ -9,8 +9,8 @@ import { ImboImageResponseInterface } from '@bytebrand/chunkable';
9
9
  import { ImportOrigins } from '@bytebrand/cronicle-helper';
10
10
  import { DataSchemes } from '@bytebrand/car-schema';
11
11
 
12
- import { imageItem, IModixWrapItem, ModixXmlItem } from '../interfaces';
13
- import { isNotEmptyArray, isValidVin, ampersandReplacer } from '../utils';
12
+ import { imageItem, IAtributeWrapItem, ModixXmlItem } from '../interfaces';
13
+ import { isNotEmptyArray, isValidVin, xmlStringReplacer } from '../utils';
14
14
  import { ConfigService } from '../services';
15
15
  import {
16
16
  BodyColorList,
@@ -38,9 +38,8 @@ export class ModixTransformer {
38
38
  maindata: {
39
39
  category: this.getCategoryData(car),
40
40
  manufacturer: this.getManufactureData(car),
41
- model: { value: ampersandReplacer(get(car, 'mainData.model', '')) },
42
- // NOTES:: replace angle brackets to make xml valid
43
- submodel: { value: ampersandReplacer(get(car, 'mainData.subModel', '')).replace(/[<>]/g, '') },
41
+ model: { value: xmlStringReplacer(get(car, 'mainData.model', '')) },
42
+ submodel: { value: xmlStringReplacer(get(car, 'mainData.subModel', '')) },
44
43
  mileage: { value: toNumber(get(car, 'mainData.mileage', null)), atributes: { scaleUnit: 'km' } },
45
44
  cylinderCapacity: { value: toString(get(car, 'engineData.cylinders', null)) },
46
45
  enginePower: { value: toNumber(get(car, 'engineData.powerKW', null)), atributes: { scaleUnit: 'kW' } },
@@ -113,12 +112,12 @@ export class ModixTransformer {
113
112
  };
114
113
  }
115
114
 
116
- private getCategoryData(car: DataSchemes.Car): IModixWrapItem {
115
+ private getCategoryData(car: DataSchemes.Car): IAtributeWrapItem {
117
116
  const vehicle_class = get(car, 'mainData.vehicleClass', 'selector_unknown');
118
117
  return get(VehicleClassList, vehicle_class);
119
118
  }
120
119
 
121
- private getManufactureData(car: DataSchemes.Car): IModixWrapItem {
120
+ private getManufactureData(car: DataSchemes.Car): IAtributeWrapItem {
122
121
  const carMake = toString(get(car, 'mainData.make', ''));
123
122
  const manufactureData = findLast(ManufactureList, item => toLowercase(item.name) === toLowercase(carMake));
124
123
  // temporary
@@ -128,23 +127,23 @@ export class ModixTransformer {
128
127
  return { value: manufactureData?.name || carMake, atributes: { id: manufactureData?.id || null } };
129
128
  }
130
129
 
131
- private getFuelData(car: DataSchemes.Car): IModixWrapItem {
130
+ private getFuelData(car: DataSchemes.Car): IAtributeWrapItem {
132
131
  const fuel_selector = get(car, 'consumption.fuel', '');
133
132
  return get(FuelList, fuel_selector);
134
133
  }
135
134
 
136
- private getTransmissionData(car: DataSchemes.Car): IModixWrapItem {
135
+ private getTransmissionData(car: DataSchemes.Car): IAtributeWrapItem {
137
136
  const transmission_selector = get(car, 'driveSuspension.gearbox', 'selector_unknown');
138
137
  return get(TransmissionList, transmission_selector);
139
138
  }
140
139
 
141
- private getAccident(car: DataSchemes.Car): IModixWrapItem {
140
+ private getAccident(car: DataSchemes.Car): IAtributeWrapItem {
142
141
  const accident = get(car, 'maindata.accidentDamaged', null);
143
142
 
144
143
  return { value: accident };
145
144
  }
146
145
 
147
- private getUsageData(car: DataSchemes.Car): IModixWrapItem {
146
+ private getUsageData(car: DataSchemes.Car): IAtributeWrapItem {
148
147
  const usageType = get(car, 'maindata.usageType', '');
149
148
  const usage_by_selector = get(UsageTypeList, usageType);
150
149
 
@@ -156,17 +155,17 @@ export class ModixTransformer {
156
155
  return get(UsageConditionList, condition);
157
156
  }
158
157
 
159
- private getBodyStyleData(car: DataSchemes.Car): IModixWrapItem {
158
+ private getBodyStyleData(car: DataSchemes.Car): IAtributeWrapItem {
160
159
  const body_style_selector = get(car, 'mainData.category', 'selector_unknown');
161
160
  return get(CategoryList, body_style_selector);
162
161
  }
163
162
 
164
- private getPainId(car: DataSchemes.Car): IModixWrapItem {
163
+ private getPainId(car: DataSchemes.Car): IAtributeWrapItem {
165
164
  const metallic = get(car, 'exterior.metallic', false);
166
165
  return metallic ? { value: 'metallic', atributes: { id: 3 } } : { value: 'solid', atributes: { id: 1 } };
167
166
  }
168
167
 
169
- private getColorNameData(car): IModixWrapItem {
168
+ private getColorNameData(car): IAtributeWrapItem {
170
169
  const colorSelection = get(car, 'exterior.exteriorColor', 'selector_unknown');
171
170
  return get(BodyColorList, colorSelection);
172
171
  }
@@ -203,7 +202,7 @@ export class ModixTransformer {
203
202
  const car_id = toString(get(car, '_id', ''));
204
203
  const url = `${this.configService.config.imageUrl}/carimage/${car_id}`;
205
204
 
206
- const imageList: IModixWrapItem[] = [];
205
+ const imageList: IAtributeWrapItem[] = [];
207
206
 
208
207
  if (isNotEmptyArray(images)) {
209
208
  images.forEach((image: ImboImageResponseInterface, index) => {
@@ -48,7 +48,7 @@ export class OoyyoTransformer {
48
48
  doors: toString(get(car, 'mainData.doors', '')),
49
49
  seats: toString(get(car, 'mainData.seats', '')),
50
50
  gears: toString(get(car, 'driveSuspension.gears', '')),
51
- pictures: await this.imageService.getImages(car, imboImages, this.configService.config.imageType),
51
+ pictures: await this.imageService.getImages(car, imboImages, this.configService.config.imageType, false),
52
52
  location: {
53
53
  city: toString(get(car, 'location.city', '')),
54
54
  postcode: toString(get(car, 'location.zipCode', '')),
@@ -32,7 +32,7 @@ export class RubrikkTransformer {
32
32
  }): Promise<RubrikkXmlItem> {
33
33
  return {
34
34
  //Common Fields
35
- ad__all_imageurls: await this.imageService.getImages(car, images, this.configService.config.imageType),
35
+ ad__all_imageurls: await this.imageService.getImages(car, images, this.configService.config.imageType, false),
36
36
  ad__condition_new_used_etc: this.getCondition(car),
37
37
  ad__description: toString(get(car, 'offer.offerDescription', '')),
38
38
  ad__headline: this.getTitle(car),
@@ -0,0 +1,63 @@
1
+ import { Injectable } from '@nestjs/common';
2
+
3
+ import { ImboImageResponseInterface } from '@bytebrand/chunkable';
4
+ import { DataSchemes } from '@bytebrand/car-schema';
5
+
6
+ import { ConfigService, ImagesService, TransformerService, UserService } from '../services';
7
+ import { TrovitXmlItem } from '../interfaces';
8
+ import { get } from 'lodash';
9
+ import { CarDescriptionFactory, DescriptionTypeEnum } from '@bytebrand/car-description';
10
+ import { xmlStringReplacer } from '../utils';
11
+
12
+ @Injectable()
13
+ export class TrovitTransformer {
14
+ constructor(
15
+ private readonly configService: ConfigService,
16
+ private readonly imageService: ImagesService,
17
+ private readonly transformService: TransformerService,
18
+ private readonly userService: UserService,
19
+ ) {}
20
+
21
+ async transform({
22
+ car,
23
+ images,
24
+ }: {
25
+ car: DataSchemes.Car;
26
+ images: ImboImageResponseInterface[];
27
+ }): Promise<TrovitXmlItem> {
28
+ return {
29
+ id: { value: this.transformService.identifier(car) },
30
+ url: { value: this.transformService.link(car, 'source=classifieds&ampmedium=listing&ampcampaign=trovit') },
31
+ title: { value: xmlStringReplacer(this.transformService.title(car)) },
32
+ content: { value: xmlStringReplacer(await this.getDescription(car)) },
33
+ price: { value: this.transformService.price(car), atributes: { currency: 'EUR' } },
34
+ car_type: { value: this.transformService.bodyStyle(car) },
35
+ dealer: { value: 'auto.de Handels GmbH' },
36
+ postcode: { value: this.transformService.postCode(car) },
37
+ vin_database: { value: this.transformService.vinCode(car) },
38
+ make: { value: xmlStringReplacer(this.transformService.make(car)) },
39
+ model: { value: xmlStringReplacer(this.transformService.model(car)) },
40
+ color: { value: this.transformService.color(car) },
41
+ year: { value: this.transformService.year(car) },
42
+ mileage: { value: this.transformService.mileage(car) },
43
+ doors: { value: this.transformService.doors(car) },
44
+ seats: { value: this.transformService.seats(car) },
45
+ engine_size: { value: this.transformService.engineSizeInCCM(car), atributes: { unit: 'cc' } },
46
+ cylinders: { value: this.transformService.cylinders(car) },
47
+ fuel: { value: this.transformService.fuelType(car) },
48
+ transmission: { value: this.transformService.transmission(car) },
49
+ power: { value: this.transformService.powerPS(car), atributes: { unit: 'ps' } },
50
+ fuel_consumption: { value: this.transformService.fuelConsumption(car), atributes: { unit: 'l/100km' } },
51
+ co2_emissions: { value: this.transformService.cO2Emission(car), atributes: { unit: 'g/km' } },
52
+ pictures: await this.imageService.getImages(car, images, this.configService.config.imageType, true),
53
+ is_new: { value: this.transformService.isNewBoolean(car) },
54
+ };
55
+ }
56
+
57
+ private async getDescription(car: DataSchemes.Car): Promise<string> {
58
+ const dealerId = get(car, 'metaData.ownerId');
59
+ const descriptionSchema = await this.userService.getDefaultSummaryByDealerId(dealerId);
60
+ const descriptionBuilder = CarDescriptionFactory.create(DescriptionTypeEnum.Mobile, car);
61
+ return descriptionBuilder.transform(descriptionSchema);
62
+ }
63
+ }
@@ -10,6 +10,6 @@ export function convertToCSV(data: unknown): string {
10
10
  return converted.join(';');
11
11
  }
12
12
 
13
- export const ampersandReplacer = (str: string): string => {
14
- return typeof str === 'string' ? str.replace(/&/g, '&amp;') : '';
13
+ export const xmlStringReplacer = (str: string): string => {
14
+ return typeof str === 'string' ? str.replace(/&/g, '&amp;').replace(/[<>]/g, '') : '';
15
15
  };
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=autoborse.intreface.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"autoborse.intreface.js","sourceRoot":"","sources":["../../src/interfaces/autoborse.intreface.ts"],"names":[],"mappings":""}
@@ -1,6 +0,0 @@
1
- export interface IModixWrapItem {
2
- value: string;
3
- atributes?: {
4
- [key: string]: any;
5
- };
6
- }
@@ -1 +0,0 @@
1
- {"version":3,"file":"modix-wrap-item.intreface.js","sourceRoot":"","sources":["../../../src/interfaces/modix/modix-wrap-item.intreface.ts"],"names":[],"mappings":""}
@@ -1,6 +0,0 @@
1
- export interface IModixWrapItem {
2
- value: string;
3
- atributes?: {
4
- [key: string]: any;
5
- };
6
- }