@bytebrand/export-cars 1.21.7 → 1.21.8
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.
- package/.editorconfig +8 -8
- package/.eslintignore +1 -1
- package/.eslintrc.js +24 -24
- package/.prettierrc.js +7 -7
- package/README.md +65 -65
- package/dist/configs/index.d.ts +1 -0
- package/dist/configs/index.js +1 -0
- package/dist/configs/index.js.map +1 -1
- package/dist/configs/santander.config.d.ts +5 -0
- package/dist/configs/santander.config.js +18 -0
- package/dist/configs/santander.config.js.map +1 -0
- package/dist/enums/export-type.enum.d.ts +1 -0
- package/dist/enums/export-type.enum.js +1 -0
- package/dist/enums/export-type.enum.js.map +1 -1
- package/dist/export.command.js +1 -1
- package/dist/export.command.js.map +1 -1
- package/dist/export.schema.d.ts +6 -2
- package/dist/export.schema.js +4 -0
- package/dist/export.schema.js.map +1 -1
- package/dist/exporters/index.d.ts +1 -0
- package/dist/exporters/index.js +1 -0
- package/dist/exporters/index.js.map +1 -1
- package/dist/exporters/santander.exporter.d.ts +12 -0
- package/dist/exporters/santander.exporter.js +63 -0
- package/dist/exporters/santander.exporter.js.map +1 -0
- package/dist/formats/auto24-xml.builder.js +2 -2
- package/dist/formats/google-xml.builder.js +3 -3
- package/dist/formats/modix-xml.builder.js +2 -2
- package/dist/formats/ooyyo-xml.builder.js +1 -1
- package/dist/formats/santander-csv.builder.d.ts +6 -0
- package/dist/formats/santander-csv.builder.js +17 -0
- package/dist/formats/santander-csv.builder.js.map +1 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/nest-cli.json +5 -5
- package/package.json +61 -61
- package/src/app.module.ts +38 -38
- package/src/configs/alleskralle.config.ts +15 -15
- package/src/configs/as24.config.ts +13 -13
- package/src/configs/auto24.config.ts +15 -15
- package/src/configs/autoboerse.config.ts +16 -16
- package/src/configs/autouncle.config.ts +14 -14
- package/src/configs/awin.config.ts +15 -15
- package/src/configs/by-owner.config.ts +14 -14
- package/src/configs/config.ts +83 -83
- package/src/configs/criteo.config.ts +17 -17
- package/src/configs/dasparking.config.ts +15 -15
- package/src/configs/eauto.config.ts +15 -15
- package/src/configs/evium.config.ts +18 -18
- package/src/configs/facebook-shop.config.ts +16 -16
- package/src/configs/fb.config.ts +16 -16
- package/src/configs/google.config.ts +14 -14
- package/src/configs/index.ts +22 -21
- package/src/configs/kleinanzeigeFocus.config.ts +14 -14
- package/src/configs/marktde.config.ts +18 -18
- package/src/configs/meinstadt.config.ts +15 -15
- package/src/configs/mitula.config.ts +14 -14
- package/src/configs/ooyyo.config.ts +15 -15
- package/src/configs/santander.config.ts +15 -0
- package/src/configs/trovit.config.ts +14 -14
- package/src/configs/yescar.config.ts +17 -17
- package/src/constants/autouncle.contants.ts +4 -4
- package/src/constants/fb.constants.ts +7 -7
- package/src/constants/index.ts +1 -1
- package/src/constants/modix/body-color-name.constant.ts +20 -20
- package/src/constants/modix/category.constant.ts +14 -14
- package/src/constants/modix/fuel.constant.ts +14 -14
- package/src/constants/modix/index.ts +7 -7
- package/src/constants/modix/manufacturers.constant.ts +7498 -7498
- package/src/constants/modix/transmission.constant.ts +8 -8
- package/src/constants/modix/usage-type.constant.ts +13 -13
- package/src/constants/modix/vehicle-class.constant.ts +17 -17
- package/src/enums/environment.enum.ts +5 -5
- package/src/enums/export-type.enum.ts +33 -32
- package/src/enums/file-types.enum.ts +8 -8
- package/src/enums/image-type.enum.ts +4 -4
- package/src/enums/index.ts +4 -4
- package/src/export.command.ts +37 -37
- package/src/export.schema.ts +134 -128
- package/src/exporters/as24.exporter.ts +69 -69
- package/src/exporters/auto24.exporter.ts +48 -48
- package/src/exporters/autouncle.exporter.ts +60 -60
- package/src/exporters/awin.exporter.ts +47 -47
- package/src/exporters/by-owner.exporter.ts +44 -44
- package/src/exporters/facebook-shop.exporter.ts +51 -51
- package/src/exporters/fb.exporter.ts +52 -52
- package/src/exporters/google.exporter.ts +45 -45
- package/src/exporters/index.ts +15 -14
- package/src/exporters/meinstadt.exporter.ts +55 -55
- package/src/exporters/mobile.exporter.ts +64 -64
- package/src/exporters/modix.exporter.ts +56 -56
- package/src/exporters/ooyyo.exporter.ts +48 -48
- package/src/exporters/rubrikk.exporter.ts +53 -53
- package/src/exporters/santander.exporter.ts +50 -0
- package/src/exporters/trovit.exporter.ts +51 -51
- package/src/formats/auto24-xml.builder.ts +54 -54
- package/src/formats/autouncle-json.builder.ts +20 -20
- package/src/formats/awin-csv.builder.ts +16 -16
- package/src/formats/facebook-shop.builder.ts +69 -69
- package/src/formats/fb-xml.builder.ts +71 -71
- package/src/formats/google-xml.builder.ts +35 -35
- package/src/formats/index.ts +5 -5
- package/src/formats/meinstadt-json.builder.ts +19 -19
- package/src/formats/modix-xml.builder.ts +180 -180
- package/src/formats/ooyyo-xml.builder.ts +48 -48
- package/src/formats/rubrikk-xml.builder.ts +27 -27
- package/src/formats/santander-csv.builder.ts +15 -0
- package/src/formats/trovit-xml.builder.ts +44 -44
- package/src/interfaces/atributes-wrap-item.intreface.ts +6 -6
- package/src/interfaces/dealers-mapping.interface.ts +7 -7
- package/src/interfaces/description.interface.ts +24 -24
- package/src/interfaces/export-item.interface.ts +366 -366
- package/src/interfaces/exporter.interface.ts +3 -3
- package/src/interfaces/index.ts +3 -3
- package/src/interfaces/input.interface.ts +6 -6
- package/src/interfaces/mapping-rules.interface.ts +11 -11
- package/src/interfaces/modix/index.ts +1 -1
- package/src/interfaces/modix/modix-item-list.interface.ts +5 -5
- package/src/interfaces/params.interface.ts +13 -13
- package/src/interfaces/rule-parser.interface.ts +3 -3
- package/src/main.ts +14 -14
- package/src/rules/abstract.rule.ts +37 -37
- package/src/rules/date.rule.ts +19 -19
- package/src/rules/number.rule.ts +15 -15
- package/src/rules/string.rule.ts +8 -8
- package/src/services/car.service.ts +49 -49
- package/src/services/config.service.ts +15 -15
- package/src/services/images.service.ts +207 -207
- package/src/services/index.ts +9 -9
- package/src/services/loader.service.ts +29 -29
- package/src/services/mapping.service.ts +91 -91
- package/src/services/request.service.ts +44 -44
- package/src/services/rules.service.ts +61 -61
- package/src/services/transformer.service.ts +129 -129
- package/src/services/user.service.ts +57 -57
- package/src/transformers/as24.transformer.ts +253 -253
- package/src/transformers/auto24.transfomer.ts +155 -155
- package/src/transformers/autouncle.transformer.ts +236 -236
- package/src/transformers/awin.transformer.ts +193 -193
- package/src/transformers/by-owner.transformer.ts +354 -354
- package/src/transformers/facebook-shop.transformer.ts +93 -93
- package/src/transformers/fb-description.transformer.ts +316 -316
- package/src/transformers/fb-equipment.transformer.ts +161 -161
- package/src/transformers/fb.transformer.ts +655 -655
- package/src/transformers/google.transformer.ts +169 -169
- package/src/transformers/index.ts +5 -5
- package/src/transformers/meinstadt.transformer.ts +92 -92
- package/src/transformers/mobile.transformer.ts +482 -482
- package/src/transformers/modix.transformer.ts +227 -227
- package/src/transformers/ooyyo.transformer.ts +109 -109
- package/src/transformers/rubrikk.transformer.ts +200 -200
- package/src/transformers/trovit.transformer.ts +63 -63
- package/src/utils/converter.utils.ts +15 -15
- package/src/utils/index.ts +2 -2
- package/src/utils/validator.utils.ts +7 -7
- package/tsconfig.build.json +4 -4
- package/tsconfig.json +29 -29
|
@@ -1,194 +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
|
-
}
|
|
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
194
|
}
|