@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.
- package/dist/app.module.js +4 -7
- package/dist/app.module.js.map +1 -1
- 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/trovit.config.d.ts +5 -0
- package/dist/configs/trovit.config.js +17 -0
- package/dist/configs/trovit.config.js.map +1 -0
- package/dist/constants/modix/category.constant.js.map +1 -1
- package/dist/enums/export-type.enum.d.ts +2 -1
- package/dist/enums/export-type.enum.js +1 -0
- package/dist/enums/export-type.enum.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/trovit.exporter.d.ts +12 -0
- package/dist/exporters/trovit.exporter.js +62 -0
- package/dist/exporters/trovit.exporter.js.map +1 -0
- package/dist/formats/index.d.ts +1 -0
- package/dist/formats/index.js +1 -0
- package/dist/formats/index.js.map +1 -1
- package/dist/formats/trovit-xml.builder.d.ts +8 -0
- package/dist/formats/trovit-xml.builder.js +39 -0
- package/dist/formats/trovit-xml.builder.js.map +1 -0
- package/dist/interfaces/{autoborse.intreface.d.ts → atributes-wrap-item.intreface.d.ts} +1 -1
- package/dist/interfaces/{modix/modix-wrap-item.intreface.js → atributes-wrap-item.intreface.js} +1 -1
- package/dist/interfaces/atributes-wrap-item.intreface.js.map +1 -0
- package/dist/interfaces/export-item.interface.d.ts +63 -36
- package/dist/interfaces/index.d.ts +1 -0
- package/dist/interfaces/index.js +1 -0
- package/dist/interfaces/index.js.map +1 -1
- package/dist/interfaces/modix/index.d.ts +0 -1
- package/dist/interfaces/modix/index.js +0 -1
- package/dist/interfaces/modix/index.js.map +1 -1
- package/dist/interfaces/modix/modix-item-list.interface.d.ts +2 -2
- package/dist/services/images.service.d.ts +3 -3
- package/dist/services/images.service.js +10 -10
- package/dist/services/images.service.js.map +1 -1
- package/dist/services/index.d.ts +6 -5
- package/dist/services/index.js +6 -5
- package/dist/services/index.js.map +1 -1
- package/dist/services/transformer.service.d.ts +29 -0
- package/dist/services/transformer.service.js +122 -0
- package/dist/services/transformer.service.js.map +1 -0
- package/dist/transformers/auto24.transfomer.js +3 -3
- package/dist/transformers/auto24.transfomer.js.map +1 -1
- package/dist/transformers/autouncle.transformer.js +1 -1
- package/dist/transformers/autouncle.transformer.js.map +1 -1
- package/dist/transformers/facebook-shop.transformer.js +1 -1
- package/dist/transformers/facebook-shop.transformer.js.map +1 -1
- package/dist/transformers/fb-description.transformer.js +4 -4
- package/dist/transformers/fb-description.transformer.js.map +1 -1
- package/dist/transformers/fb.transformer.js +5 -6
- package/dist/transformers/fb.transformer.js.map +1 -1
- package/dist/transformers/google.transformer.js +1 -1
- package/dist/transformers/google.transformer.js.map +1 -1
- package/dist/transformers/index.d.ts +1 -0
- package/dist/transformers/index.js +1 -0
- package/dist/transformers/index.js.map +1 -1
- package/dist/transformers/meinstadt.transformer.d.ts +1 -1
- package/dist/transformers/meinstadt.transformer.js +2 -2
- package/dist/transformers/meinstadt.transformer.js.map +1 -1
- package/dist/transformers/mobile.transformer.js +3 -3
- package/dist/transformers/mobile.transformer.js.map +1 -1
- package/dist/transformers/modix.transformer.js +2 -2
- package/dist/transformers/modix.transformer.js.map +1 -1
- package/dist/transformers/ooyyo.transformer.js +1 -1
- package/dist/transformers/ooyyo.transformer.js.map +1 -1
- package/dist/transformers/rubrikk.transformer.js +1 -1
- package/dist/transformers/rubrikk.transformer.js.map +1 -1
- package/dist/transformers/trovit.transformer.d.ts +16 -0
- package/dist/transformers/trovit.transformer.js +73 -0
- package/dist/transformers/trovit.transformer.js.map +1 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/utils/converter.utils.d.ts +1 -1
- package/dist/utils/converter.utils.js +4 -4
- package/dist/utils/converter.utils.js.map +1 -1
- package/package.json +3 -3
- package/src/app.module.ts +14 -8
- package/src/configs/index.ts +1 -0
- package/src/configs/trovit.config.ts +14 -0
- package/src/constants/modix/category.constant.ts +0 -1
- package/src/enums/export-type.enum.ts +1 -0
- package/src/export.schema.ts +6 -0
- package/src/exporters/index.ts +1 -0
- package/src/exporters/trovit.exporter.ts +49 -0
- package/src/formats/index.ts +1 -0
- package/src/formats/trovit-xml.builder.ts +44 -0
- package/src/interfaces/{autoborse.intreface.ts → atributes-wrap-item.intreface.ts} +1 -1
- package/src/interfaces/export-item.interface.ts +64 -36
- package/src/interfaces/index.ts +1 -0
- package/src/interfaces/modix/index.ts +0 -1
- package/src/interfaces/modix/modix-item-list.interface.ts +2 -2
- package/src/services/images.service.ts +19 -10
- package/src/services/index.ts +6 -5
- package/src/services/transformer.service.ts +129 -0
- package/src/transformers/as24.transformer.ts +3 -3
- package/src/transformers/auto24.transfomer.ts +7 -2
- package/src/transformers/autouncle.transformer.ts +2 -2
- package/src/transformers/facebook-shop.transformer.ts +1 -1
- package/src/transformers/fb-description.transformer.ts +4 -4
- package/src/transformers/fb.transformer.ts +14 -12
- package/src/transformers/google.transformer.ts +6 -2
- package/src/transformers/index.ts +1 -0
- package/src/transformers/meinstadt.transformer.ts +8 -3
- package/src/transformers/mobile.transformer.ts +8 -4
- package/src/transformers/modix.transformer.ts +14 -15
- package/src/transformers/ooyyo.transformer.ts +1 -1
- package/src/transformers/rubrikk.transformer.ts +1 -1
- package/src/transformers/trovit.transformer.ts +63 -0
- package/src/utils/converter.utils.ts +2 -2
- package/dist/interfaces/autoborse.intreface.js +0 -3
- package/dist/interfaces/autoborse.intreface.js.map +0 -1
- package/dist/interfaces/modix/modix-wrap-item.intreface.d.ts +0 -6
- package/dist/interfaces/modix/modix-wrap-item.intreface.js.map +0 -1
- 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
|
-
|
|
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
|
|
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(
|
|
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
|
|
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) {
|
|
333
|
-
|
|
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(
|
|
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,
|
|
@@ -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({
|
|
18
|
-
|
|
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
|
|
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(
|
|
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,
|
|
13
|
-
import { isNotEmptyArray, isValidVin,
|
|
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:
|
|
42
|
-
|
|
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):
|
|
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):
|
|
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):
|
|
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):
|
|
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):
|
|
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):
|
|
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):
|
|
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):
|
|
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):
|
|
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:
|
|
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&medium=listing&campaign=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
|
|
14
|
-
return typeof str === 'string' ? str.replace(/&/g, '&') : '';
|
|
13
|
+
export const xmlStringReplacer = (str: string): string => {
|
|
14
|
+
return typeof str === 'string' ? str.replace(/&/g, '&').replace(/[<>]/g, '') : '';
|
|
15
15
|
};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"autoborse.intreface.js","sourceRoot":"","sources":["../../src/interfaces/autoborse.intreface.ts"],"names":[],"mappings":""}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"modix-wrap-item.intreface.js","sourceRoot":"","sources":["../../../src/interfaces/modix/modix-wrap-item.intreface.ts"],"names":[],"mappings":""}
|