@bytebrand/export-cars 1.14.10 → 1.16.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 (68) hide show
  1. package/dist/app.module.js +0 -2
  2. package/dist/app.module.js.map +1 -1
  3. package/dist/configs/autoboerse.config.js +1 -1
  4. package/dist/configs/autoboerse.config.js.map +1 -1
  5. package/dist/configs/awin.config.d.ts +5 -0
  6. package/dist/configs/awin.config.js +18 -0
  7. package/dist/configs/awin.config.js.map +1 -0
  8. package/dist/configs/index.d.ts +2 -1
  9. package/dist/configs/index.js +2 -1
  10. package/dist/configs/index.js.map +1 -1
  11. package/dist/configs/{kleinanzeigefocus.config.js → kleinanzeigeFocus.config.js} +1 -1
  12. package/dist/configs/{kleinanzeigefocus.config.js.map → kleinanzeigeFocus.config.js.map} +1 -1
  13. package/dist/constants/modix/usage-type.constant.js +2 -2
  14. package/dist/constants/modix/usage-type.constant.js.map +1 -1
  15. package/dist/constants/modix/vehicle-class.constant.js +1 -1
  16. package/dist/constants/modix/vehicle-class.constant.js.map +1 -1
  17. package/dist/enums/export-type.enum.d.ts +2 -1
  18. package/dist/enums/export-type.enum.js +1 -0
  19. package/dist/enums/export-type.enum.js.map +1 -1
  20. package/dist/export.schema.d.ts +6 -2
  21. package/dist/export.schema.js +4 -0
  22. package/dist/export.schema.js.map +1 -1
  23. package/dist/exporters/awin.exporter.d.ts +12 -0
  24. package/dist/exporters/awin.exporter.js +61 -0
  25. package/dist/exporters/awin.exporter.js.map +1 -0
  26. package/dist/exporters/index.d.ts +1 -0
  27. package/dist/exporters/index.js +1 -0
  28. package/dist/exporters/index.js.map +1 -1
  29. package/dist/formats/awin-csv.builder.d.ts +7 -0
  30. package/dist/formats/awin-csv.builder.js +18 -0
  31. package/dist/formats/awin-csv.builder.js.map +1 -0
  32. package/dist/formats/index.d.ts +1 -0
  33. package/dist/formats/index.js +1 -0
  34. package/dist/formats/index.js.map +1 -1
  35. package/dist/formats/modix-xml.builder.js +1 -1
  36. package/dist/interfaces/export-item.interface.d.ts +25 -0
  37. package/dist/transformers/awin.transformer.d.ts +25 -0
  38. package/dist/transformers/awin.transformer.js +200 -0
  39. package/dist/transformers/awin.transformer.js.map +1 -0
  40. package/dist/transformers/index.d.ts +1 -0
  41. package/dist/transformers/index.js +1 -0
  42. package/dist/transformers/index.js.map +1 -1
  43. package/dist/transformers/modix.transformer.js +6 -6
  44. package/dist/transformers/modix.transformer.js.map +1 -1
  45. package/dist/tsconfig.build.tsbuildinfo +1 -1
  46. package/package.json +11 -11
  47. package/src/app.module.ts +0 -2
  48. package/src/configs/autoboerse.config.ts +1 -1
  49. package/src/configs/awin.config.ts +15 -0
  50. package/src/configs/index.ts +2 -1
  51. package/src/constants/modix/usage-type.constant.ts +2 -2
  52. package/src/constants/modix/vehicle-class.constant.ts +1 -1
  53. package/src/enums/export-type.enum.ts +1 -0
  54. package/src/export.schema.ts +6 -0
  55. package/src/exporters/awin.exporter.ts +47 -0
  56. package/src/exporters/index.ts +1 -0
  57. package/src/formats/awin-csv.builder.ts +17 -0
  58. package/src/formats/index.ts +1 -0
  59. package/src/formats/modix-xml.builder.ts +1 -1
  60. package/src/interfaces/export-item.interface.ts +26 -0
  61. package/src/transformers/awin.transformer.ts +194 -0
  62. package/src/transformers/index.ts +1 -0
  63. package/src/transformers/modix.transformer.ts +7 -7
  64. package/dist/input.questions.d.ts +0 -3
  65. package/dist/input.questions.js +0 -32
  66. package/dist/input.questions.js.map +0 -1
  67. package/src/input.questions.ts +0 -12
  68. /package/dist/configs/{kleinanzeigefocus.config.d.ts → kleinanzeigeFocus.config.d.ts} +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bytebrand/export-cars",
3
- "version": "1.14.10",
3
+ "version": "1.16.0",
4
4
  "description": "",
5
5
  "author": "bytebrand",
6
6
  "license": "UNLICENSED",
@@ -15,15 +15,15 @@
15
15
  "start:dev": "nest start --watch"
16
16
  },
17
17
  "dependencies": {
18
- "@bytebrand/autode-request": "^1.14.12",
19
- "@bytebrand/car-basic-data-scope": "^9.11.6",
20
- "@bytebrand/car-description": "^1.11.8",
21
- "@bytebrand/car-schema": "^3.14.6",
22
- "@bytebrand/chunkable": "^5.15.12",
23
- "@bytebrand/cronicle-helper": "^1.17.12",
18
+ "@bytebrand/autode-request": "^1.14.17",
19
+ "@bytebrand/car-basic-data-scope": "^9.11.8",
20
+ "@bytebrand/car-description": "^1.12.1",
21
+ "@bytebrand/car-schema": "^3.14.7",
22
+ "@bytebrand/chunkable": "^5.15.19",
23
+ "@bytebrand/cronicle-helper": "^1.17.20",
24
24
  "@bytebrand/i18n-dictionaries": "^1.4.3",
25
- "@bytebrand/import-helper": "^0.42.0",
26
- "@bytebrand/schema-tools": "^3.16.8",
25
+ "@bytebrand/import-helper": "^0.42.8",
26
+ "@bytebrand/schema-tools": "^3.17.1",
27
27
  "@bytebrand/zipper": "^2.1.2",
28
28
  "@nestjs/common": "^9.0.0",
29
29
  "@nestjs/core": "^9.0.0",
@@ -33,7 +33,7 @@
33
33
  "google-spreadsheet": "^3.3.0",
34
34
  "lodash": "^4.17.21",
35
35
  "moment": "^2.29.4",
36
- "nest-commander": "^3.1.0",
36
+ "nest-commander": "^3.11.0",
37
37
  "reflect-metadata": "^0.1.13",
38
38
  "vin-generator": "^1.0.1"
39
39
  },
@@ -60,5 +60,5 @@
60
60
  "engines": {
61
61
  "node": ">=14.0.0"
62
62
  },
63
- "gitHead": "a71aee428ad2769ff2a34ee187a903dd28bb8bd8"
63
+ "gitHead": "5680df3275c11c1d0140bc4b1e43b829388153bc"
64
64
  }
package/src/app.module.ts CHANGED
@@ -13,13 +13,11 @@ import {
13
13
  CarService,
14
14
  ImagesService,
15
15
  } from './services';
16
- import { InputQuestions } from './input.questions';
17
16
  import { ExportRunner } from './export.command';
18
17
 
19
18
  @Module({
20
19
  imports: [CacheModule.register()],
21
20
  providers: [
22
- InputQuestions,
23
21
  ExportRunner,
24
22
  ConfigService,
25
23
  RequestService,
@@ -11,6 +11,6 @@ export class AutoboerseConfig extends Config {
11
11
  this.outputFiles = [
12
12
  `${this.pathesConfig.localConvertedDirectory}/api_export_cars_${ExportType.AUTOBOERSE}.${FileType.XML}`,
13
13
  ];
14
- this.imageUrl = this.environmentConfig[params.environment].imageUrl;
14
+ this.imageUrl = this.environmentConfig[params.environment].baseImageUrl;
15
15
  }
16
16
  }
@@ -0,0 +1,15 @@
1
+ import { Params } from '../interfaces/params.interface';
2
+ import { Config } from './config';
3
+ import { ExportType, FileType, ImageType } from '../enums';
4
+
5
+ export class AwinConfig extends Config {
6
+ constructor(params: Params) {
7
+ super(params);
8
+ this.pathesConfig.localConvertedDirectory = `resources/${ExportType.AWIN}-export`;
9
+ this.imageUrl = this.environmentConfig[params.environment].baseImageUrl;
10
+ this.imageType = ImageType.default;
11
+ this.outputFiles = [
12
+ `${this.pathesConfig.localConvertedDirectory}/api_export_cars_${ExportType.AWIN}.${FileType.CSV}`,
13
+ ];
14
+ }
15
+ }
@@ -8,7 +8,7 @@ export * from './dasparking.config';
8
8
  export * from './eauto.config';
9
9
  export * from './fb.config';
10
10
  export * from './google.config';
11
- export * from './kleinanzeigefocus.config';
11
+ export * from './kleinanzeigeFocus.config';
12
12
  export * from './marktde.config';
13
13
  export * from './meinstadt.config';
14
14
  export * from './ooyyo.config';
@@ -17,3 +17,4 @@ export * from './autoboerse.config';
17
17
  export * from './facebook-shop.config';
18
18
  export * from './trovit.config';
19
19
  export * from './mitula.config';
20
+ export * from './awin.config';
@@ -1,7 +1,7 @@
1
1
  import { IModixItemsList } from '../../interfaces';
2
2
 
3
3
  export const UsageTypeList: IModixItemsList = {
4
- selector_usageType_preRegistration: { value: '' },
4
+ selector_usageType_preRegistration: { value: 'One-day registration', atributes: { id: 6 } },
5
5
  selector_usageType_demonstrationCar: { value: 'Demonstration car', atributes: { id: 5 } },
6
6
  selector_usageType_employeesCar: { value: "Employee's car", atributes: { id: 3 } },
7
7
  };
@@ -9,5 +9,5 @@ export const UsageTypeList: IModixItemsList = {
9
9
  export const UsageConditionList: IModixItemsList = {
10
10
  selector_condition_used: { value: 'Used vehicle', atributes: { id: 2 } },
11
11
  selector_condition_new: { value: 'New vehicle', atributes: { id: 1 } },
12
- selector_unknown: { value: 'N/A' },
12
+ selector_unknown: { value: 'Used vehicle', atributes: { id: 2 } },
13
13
  };
@@ -10,7 +10,7 @@ export const VehicleClassList: IModixItemsList = {
10
10
  selector_vehicleClass_motorBike: { value: 'Motorbike', atributes: { id: 5 } },
11
11
  selector_vehicleClass_forklift: { value: 'Forklift', atributes: { id: 13 } },
12
12
  selector_vehicleClass_camperVan: { value: 'Caravan', atributes: { id: 4 } },
13
- selector_vehicleClass_car: { value: 'Classic car', atributes: { id: 2 } },
13
+ selector_vehicleClass_car: { value: 'Passenger car', atributes: { id: 2 } },
14
14
  selector_vehicleClass_trailer: { value: 'Trailer', atributes: { id: 8 } },
15
15
  selector_vehicleClass_bus: { value: 'Bus', atributes: { id: 11 } },
16
16
  selector_unknown: { value: 'Passenger car', atributes: { id: 1 } },
@@ -27,4 +27,5 @@ export enum ExportType {
27
27
  FACEBOOK_SHOP = 'facebookshop',
28
28
  TROVIT = 'trovit',
29
29
  MITULA = 'mitula',
30
+ AWIN = 'awin',
30
31
  }
@@ -20,6 +20,7 @@ import {
20
20
  CriteoConfig,
21
21
  TrovitConfig,
22
22
  MitulaConfig,
23
+ AwinConfig,
23
24
  } from './configs';
24
25
  import {
25
26
  As24Exporter,
@@ -35,6 +36,7 @@ import {
35
36
  RubrikkExporter,
36
37
  FacebookShopExporter,
37
38
  TrovitExporter,
39
+ AwinExporter,
38
40
  } from './exporters';
39
41
 
40
42
  export const exportSchema = {
@@ -114,4 +116,8 @@ export const exportSchema = {
114
116
  config: MitulaConfig,
115
117
  exporter: TrovitExporter,
116
118
  },
119
+ [ExportType.AWIN]: {
120
+ config: AwinConfig,
121
+ exporter: AwinExporter,
122
+ },
117
123
  };
@@ -0,0 +1,47 @@
1
+ import { Injectable } from '@nestjs/common';
2
+ import { ModuleRef } from '@nestjs/core';
3
+
4
+ import { CronicleUtils } from '@bytebrand/cronicle-helper';
5
+ import { FsChunkInterface } from '@bytebrand/chunkable';
6
+
7
+ import { CarService, ConfigService, LoaderService, RulesService } from '../services';
8
+ import { Exporter } from '../interfaces/exporter.interface';
9
+ import { AwinCSVBuilder } from '../formats';
10
+ import { AwinTransformer } from '../transformers';
11
+
12
+ @Injectable()
13
+ export class AwinExporter implements Exporter {
14
+ constructor(
15
+ private carService: CarService,
16
+ private configService: ConfigService,
17
+ private loaderService: LoaderService,
18
+ private moduleRef: ModuleRef,
19
+ private rulesService: RulesService,
20
+ ) { }
21
+
22
+ async export(): Promise<void> {
23
+ const [fileCSV] = this.configService.config.outputFiles;
24
+ await CronicleUtils.ensureDir(this.configService.config.pathesConfig.localConvertedDirectory);
25
+ await CronicleUtils.emptyDir(this.configService.config.pathesConfig.localConvertedDirectory);
26
+
27
+ const awinCSVBuilder = new AwinCSVBuilder(fileCSV);
28
+ await awinCSVBuilder.buildStart();
29
+
30
+ const awinTransformer = await this.moduleRef.create(AwinTransformer);
31
+
32
+ await this.loaderService.process(async (chunk: FsChunkInterface) => {
33
+ chunk.data = chunk.data.filter(car => this.carService.filterCar(car, this.rulesService.rules));
34
+
35
+ for (let i = 0; i < chunk.data.length; i += 1) {
36
+ const data = chunk.data[i];
37
+ const transformedCar = await awinTransformer.transform(data);
38
+ await awinCSVBuilder.addItem(transformedCar);
39
+ this.carService.counter.countCar(data.images);
40
+ }
41
+ });
42
+
43
+ console.log(this.carService.counter.getCountedCars());
44
+
45
+ await awinCSVBuilder.buildEnd();
46
+ }
47
+ }
@@ -11,3 +11,4 @@ export * from './ooyyo.exporter';
11
11
  export * from './rubrikk.exporter';
12
12
  export * from './facebook-shop.exporter';
13
13
  export * from './trovit.exporter';
14
+ export * from './awin.exporter';
@@ -0,0 +1,17 @@
1
+ import { XMLBuilderBase } from '@bytebrand/cronicle-helper';
2
+ import { Awin } from '../interfaces';
3
+
4
+ export class AwinCSVBuilder extends XMLBuilderBase {
5
+ async buildStart(): Promise<void> {
6
+ await this.write('product_id,product_name,brand_name,product_model,deep_link,image_url,alternate_image,alternate_image_two,alternate_image_three,alternate_image_four,price,currency,rrp_price,saving,savings_percent,colour,condition,delivery_time,last_updated,merchant_category,warranty,energy_label,description \n');
7
+ }
8
+
9
+ async addItem(car: Awin): Promise<void> {
10
+ let values = Object.values(car);
11
+ await this.write('"' + values.join('","') + '"' + '\n');
12
+ }
13
+
14
+ async buildEnd(): Promise<void> {
15
+ await this.end();
16
+ }
17
+ }
@@ -2,3 +2,4 @@ export * from './rubrikk-xml.builder';
2
2
  export * from './modix-xml.builder';
3
3
  export * from './facebook-shop.builder';
4
4
  export * from './trovit-xml.builder';
5
+ export * from './awin-csv.builder';
@@ -129,7 +129,7 @@ export class ModixXmlBuilder extends XMLBuilderBase {
129
129
  }
130
130
 
131
131
  mapPrice({ grossPrice, vatReclaimable }: priceItem) {
132
- let item = `\n<prices>\n<price vatReclaimable="${vatReclaimable}" currency="EUR" type="1">\n`;
132
+ let item = `\n<prices>\n<price vatReclaimable="${vatReclaimable}" currency="EUR" type="2">\n`;
133
133
  item += this.getElement('grossPrice', grossPrice.value, false, grossPrice.atributes);
134
134
  item += '</price>\n</prices>\n';
135
135
  return item;
@@ -338,3 +338,29 @@ export interface TrovitXmlItem {
338
338
  pictures: Array<string>;
339
339
  is_new: IAtributeWrapItem;
340
340
  }
341
+
342
+ export interface Awin {
343
+ product_id: string;
344
+ product_name: string;
345
+ brand_name: string;
346
+ product_model: string;
347
+ deep_link: string;
348
+ image_url: string;
349
+ alternate_image: string;
350
+ alternate_image_two: string;
351
+ alternate_image_three: string;
352
+ alternate_image_four: string;
353
+ price: number | string;
354
+ currency: string;
355
+ rrp_price: number | string;
356
+ saving: number| string;
357
+ savings_percent: number| string;
358
+ colour: string;
359
+ condition: string;
360
+ delivery_time: string;
361
+ last_updated: string;
362
+ merchant_category: string;
363
+ warranty: string;
364
+ energy_label: string;
365
+ description: string;
366
+ }
@@ -0,0 +1,194 @@
1
+ import { toString, get, isNull } from 'lodash';
2
+ import * as moment from 'moment';
3
+
4
+ import { Injectable } from '@nestjs/common';
5
+
6
+ import { CarDescriptionFactory, DescriptionTypeEnum } from '@bytebrand/car-description';
7
+ import { ImboImageResponseInterface } from '@bytebrand/chunkable';
8
+ import { DataSchemes } from '@bytebrand/car-schema';
9
+
10
+ import { ConfigService, ImagesService, UserService } from '../services';
11
+ import { Awin } from '../interfaces';
12
+
13
+ @Injectable()
14
+ export class AwinTransformer {
15
+ constructor(
16
+ private configService: ConfigService,
17
+ private imageService: ImagesService,
18
+ private userService: UserService
19
+ ) { }
20
+
21
+ async transform({ car, images, }: { car: DataSchemes.Car; images: ImboImageResponseInterface[]; }): Promise<Awin> {
22
+ const carId = toString(get(car, '_id', ''));
23
+ const imageLinks = await this.imageService.getImages(car, images, this.configService.config.imageType, false);
24
+
25
+ return {
26
+ product_id: get(car, 'metaData.vehicleId'),
27
+ product_name: this.getProductName(car),
28
+ brand_name: get(car, 'mainData.make', ''),
29
+ product_model: get(car, 'mainData.model', ''),
30
+ deep_link: `https://www.${this.configService.config.domain}/search/vehicle/${carId}`,
31
+ image_url: imageLinks[0] || '',
32
+ alternate_image: imageLinks[1] || '',
33
+ alternate_image_two: imageLinks[2] || '',
34
+ alternate_image_three: imageLinks[3] || '',
35
+ alternate_image_four: imageLinks[4] || '',
36
+ price: this.numberToDecimalNumber(get(car, 'price.currentSalesPrice')),
37
+ currency: get(car, 'price.currency', ''),
38
+ rrp_price: this.numberToDecimalNumber(get(car, 'price.recomendedRetailPrice')),
39
+ saving: this.numberToDecimalNumber(get(car, 'price.historyPriceDifference')),
40
+ savings_percent: this.numberToDecimalNumber(get(car, 'price.historyPriceDifferencePerCent')),
41
+ colour: this.getColor(car),
42
+ condition: this.getCondition(car),
43
+ delivery_time: this.getDeliveryTime(car),
44
+ last_updated: this.timestampToDate(get(car, 'metaData.modificationDate') as number),
45
+ merchant_category: 'New & Used Cars',
46
+ warranty: this.getWarranty(car),
47
+ energy_label: this.getEnergyEfficiencyClass(car),
48
+ description: await this.getDescription(car),
49
+ }
50
+ }
51
+
52
+ private getProductName(car: DataSchemes.Car): string {
53
+ const make = get(car, 'mainData.make', '');
54
+ const model = get(car, 'mainData.model', '');
55
+ const subModel = get(car, 'mainData.subModel', '');
56
+ return `${make + ' ' + model + ' ' + subModel}`;
57
+ }
58
+
59
+ private numberToDecimalNumber(number: number): number | string {
60
+ if (isNull(number)) return '';
61
+ return number.toFixed(2);
62
+ }
63
+
64
+ private getColor(car: DataSchemes.Car): string {
65
+ const manufacturerColorName = get(car, 'exterior.manufacturerColorName');
66
+ if (manufacturerColorName) {
67
+ return manufacturerColorName;
68
+ }
69
+ const available = {
70
+ selector_exteriorColor_black: 'Black',
71
+ selector_exteriorColor_grey: 'Grey',
72
+ selector_exteriorColor_silver: 'Silver',
73
+ selector_exteriorColor_white: 'White',
74
+ selector_exteriorColor_blue: 'Blue',
75
+ selector_exteriorColor_orange: 'Orange',
76
+ selector_exteriorColor_red: 'Red',
77
+ selector_exteriorColor_brown: 'Brown',
78
+ selector_exteriorColor_beige: 'Beige',
79
+ selector_exteriorColor_yellow: 'Yellow',
80
+ selector_exteriorColor_purple: 'Purple',
81
+ selector_exteriorColor_green: 'Green',
82
+ selector_exteriorColor_bronze: 'Bronze',
83
+ selector_exteriorColor_gold: 'Gold',
84
+ selector_exteriorColor_rainbow: '',
85
+ selector_unknown: '',
86
+ };
87
+ const color = get(car, 'exterior.exteriorColor', 'selector_unknown');
88
+ return get(available, color);
89
+ }
90
+
91
+ private getCondition(car: DataSchemes.Car): string {
92
+ const available = {
93
+ selector_condition_new: 'New',
94
+ selector_condition_used: 'Used',
95
+ selector_unknown: 'Used',
96
+ };
97
+ const condition = get(car, 'mainData.condition', 'selector_unknown');
98
+ return get(available, condition);
99
+ }
100
+
101
+ private timestampToDate(date: number): string {
102
+ return moment.unix(date).format("YYYY-MM-DD");
103
+ }
104
+
105
+ private getDeliveryTime(car: DataSchemes.Car): string {
106
+ const deliveryPeriod = get(car, 'offer.deliveryPeriod');
107
+ if (deliveryPeriod !== 'selector_unknown') {
108
+ return this.getDeliveryPeriod(car);
109
+ } else {
110
+ return this.getAvailability(car);
111
+ };
112
+ }
113
+
114
+ private getDeliveryPeriod(car: DataSchemes.Car): string {
115
+ const available = {
116
+ selector_deliveryPeriod_days1: '1 day',
117
+ selector_deliveryPeriod_days2: '2 days',
118
+ selector_deliveryPeriod_days3: '3 days',
119
+ selector_deliveryPeriod_days4: '4 days',
120
+ selector_deliveryPeriod_days5: '5 days',
121
+ selector_deliveryPeriod_days6: '6 days',
122
+ selector_deliveryPeriod_days7: '7 days',
123
+ selector_deliveryPeriod_days14: '14 days',
124
+ selector_deliveryPeriod_days30: '30 days',
125
+ selector_deliveryPeriod_days42: '42 days',
126
+ selector_deliveryPeriod_days60: '60 days',
127
+ selector_deliveryPeriod_days90: '90 days',
128
+ selector_deliveryPeriod_days120: '120 days',
129
+ selector_deliveryPeriod_days150: '150 days',
130
+ selector_deliveryPeriod_days180: '180 days',
131
+ selector_deliveryPeriod_days210: '210 days',
132
+ selector_deliveryPeriod_days270: '270 days',
133
+ selector_deliveryPeriod_days360: '360 days'
134
+ }
135
+ const deliveryPeriod = get(car, 'offer.deliveryPeriod', 'selector_unknown');
136
+ return get(available, deliveryPeriod);
137
+ }
138
+
139
+ private getAvailability(car: DataSchemes.Car): string {
140
+ const available = {
141
+ selector_availabilityMode_fromDate: 'Available from a certain date',
142
+ selector_availabilityMode_always: 'Available immediately',
143
+ };
144
+ const availabilityMode = get(car, 'offer.availabilityMode', 'selector_availabilityMode_fromDate');
145
+ const availabilityFrom = get(car, 'offer.availabilityFrom', null);
146
+
147
+ if (!isNull(availabilityFrom) && availabilityMode == 'selector_availabilityMode_fromDate') {
148
+ const availabilityFromDate = this.timestampToDate(availabilityFrom);
149
+ const daysDifference = Math.floor((availabilityFrom - Math.floor(new Date().getTime() / 1000)) / (3600 * 24));
150
+ if (daysDifference > 0) {
151
+ return `${daysDifference} days`
152
+ } else {
153
+ return ''
154
+ }
155
+ } else {
156
+ return get(available, availabilityMode);
157
+ }
158
+ }
159
+
160
+ private getEnergyEfficiencyClass(car: DataSchemes.Car): string {
161
+ const available = {
162
+ selector_energyEfficiencyClass_appp: 'A+++',
163
+ selector_energyEfficiencyClass_app: 'A++',
164
+ selector_energyEfficiencyClass_ap: 'A+',
165
+ selector_energyEfficiencyClass_a: 'A',
166
+ selector_energyEfficiencyClass_b: 'B',
167
+ selector_energyEfficiencyClass_c: 'C',
168
+ selector_energyEfficiencyClass_d: 'D',
169
+ selector_energyEfficiencyClass_e: 'E',
170
+ selector_energyEfficiencyClass_f: 'F',
171
+ selector_energyEfficiencyClass_g: 'G',
172
+ selector_unknown: '',
173
+ };
174
+ const energyClass = get(car, 'environmentEmissions.energyEfficiencyClass', 'selector_unknown');
175
+ return get(available, energyClass);
176
+ }
177
+
178
+ private getWarranty(car: DataSchemes.Car): string {
179
+ const available = {
180
+ true: 'There is a warranty',
181
+ false: 'No warranty',
182
+ null: ''
183
+ }
184
+ const warranty = get(car, 'offer.warranty', null);
185
+ return get(available, warranty);
186
+ }
187
+
188
+ private async getDescription(car: DataSchemes.Car): Promise<string> {
189
+ const dealerId = get(car, 'metaData.ownerId');
190
+ const descriptionSchema = await this.userService.getDefaultSummaryByDealerId(dealerId);
191
+ const descriptionBuilder = CarDescriptionFactory.create(DescriptionTypeEnum.Mobile, car);
192
+ return descriptionBuilder.transform(descriptionSchema);
193
+ }
194
+ }
@@ -2,3 +2,4 @@ export * from './rubrikk.transformer';
2
2
  export * from './modix.transformer';
3
3
  export * from './facebook-shop.transformer';
4
4
  export * from './trovit.transformer';
5
+ export * from './awin.transformer';
@@ -138,20 +138,20 @@ export class ModixTransformer {
138
138
  }
139
139
 
140
140
  private getAccident(car: DataSchemes.Car): IAtributeWrapItem {
141
- const accident = get(car, 'maindata.accidentDamaged', null);
141
+ const accident = get(car, 'mainData.accidentDamaged', null);
142
142
 
143
143
  return { value: accident };
144
144
  }
145
145
 
146
146
  private getUsageData(car: DataSchemes.Car): IAtributeWrapItem {
147
- const usageType = get(car, 'maindata.usageType', '');
148
- const usage_by_selector = get(UsageTypeList, usageType);
147
+ const usageType = get(car, 'mainData.usageType', '');
148
+ const usageBySelector = get(UsageTypeList, usageType);
149
149
 
150
- if (usage_by_selector) {
151
- return usage_by_selector;
150
+ if (usageBySelector) {
151
+ return usageBySelector;
152
152
  }
153
153
 
154
- const condition = get(car, 'maindata.condition', 'selector_unknown');
154
+ const condition = get(car, 'mainData.condition', 'selector_unknown');
155
155
  return get(UsageConditionList, condition);
156
156
  }
157
157
 
@@ -165,7 +165,7 @@ export class ModixTransformer {
165
165
  return metallic ? { value: 'metallic', atributes: { id: 3 } } : { value: 'solid', atributes: { id: 1 } };
166
166
  }
167
167
 
168
- private getColorNameData(car): IAtributeWrapItem {
168
+ private getColorNameData(car: DataSchemes.Car): IAtributeWrapItem {
169
169
  const colorSelection = get(car, 'exterior.exteriorColor', 'selector_unknown');
170
170
  return get(BodyColorList, colorSelection);
171
171
  }
@@ -1,3 +0,0 @@
1
- export declare class InputQuestions {
2
- parseInput(input: string): any;
3
- }
@@ -1,32 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var __metadata = (this && this.__metadata) || function (k, v) {
9
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.InputQuestions = void 0;
13
- const nest_commander_1 = require("nest-commander");
14
- let InputQuestions = class InputQuestions {
15
- parseInput(input) {
16
- return JSON.parse(input);
17
- }
18
- };
19
- __decorate([
20
- (0, nest_commander_1.Question)({
21
- message: 'Input:',
22
- name: 'input',
23
- }),
24
- __metadata("design:type", Function),
25
- __metadata("design:paramtypes", [String]),
26
- __metadata("design:returntype", void 0)
27
- ], InputQuestions.prototype, "parseInput", null);
28
- InputQuestions = __decorate([
29
- (0, nest_commander_1.QuestionSet)({ name: 'input-questions' })
30
- ], InputQuestions);
31
- exports.InputQuestions = InputQuestions;
32
- //# sourceMappingURL=input.questions.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"input.questions.js","sourceRoot":"","sources":["../src/input.questions.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,mDAAuD;AAGhD,IAAM,cAAc,GAApB,MAAM,cAAc;IAKzB,UAAU,CAAC,KAAa;QACtB,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;CACF,CAAA;AAPC;IAAC,IAAA,yBAAQ,EAAC;QACR,OAAO,EAAE,QAAQ;QACjB,IAAI,EAAE,OAAO;KACd,CAAC;;;;gDAGD;AAPU,cAAc;IAD1B,IAAA,4BAAW,EAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC;GAC5B,cAAc,CAQ1B;AARY,wCAAc"}
@@ -1,12 +0,0 @@
1
- import { Question, QuestionSet } from 'nest-commander';
2
-
3
- @QuestionSet({ name: 'input-questions' })
4
- export class InputQuestions {
5
- @Question({
6
- message: 'Input:',
7
- name: 'input',
8
- })
9
- parseInput(input: string) {
10
- return JSON.parse(input);
11
- }
12
- }