@bytebrand/export-cars 1.10.8 → 1.10.10
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/exporters/meinstadt.exporter.js +2 -1
- package/dist/exporters/meinstadt.exporter.js.map +1 -1
- package/dist/interfaces/export-item.interface.d.ts +1 -1
- package/dist/services/images.service.js +4 -3
- package/dist/services/images.service.js.map +1 -1
- package/dist/transformers/as24.transformer.js.map +1 -1
- package/dist/transformers/by-owner.transformer.js.map +1 -1
- package/dist/transformers/facebook-shop.transformer.js +0 -1
- package/dist/transformers/facebook-shop.transformer.js.map +1 -1
- package/dist/transformers/meinstadt.transformer.d.ts +6 -3
- package/dist/transformers/meinstadt.transformer.js +11 -12
- package/dist/transformers/meinstadt.transformer.js.map +1 -1
- package/dist/transformers/mobile.transformer.d.ts +2 -1
- package/dist/transformers/mobile.transformer.js +4 -4
- package/dist/transformers/mobile.transformer.js.map +1 -1
- package/dist/transformers/ooyyo.transformer.js +2 -2
- package/dist/transformers/ooyyo.transformer.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +2 -2
- package/src/exporters/meinstadt.exporter.ts +2 -2
- package/src/interfaces/export-item.interface.ts +1 -1
- package/src/services/images.service.ts +5 -4
- package/src/transformers/as24.transformer.ts +3 -0
- package/src/transformers/by-owner.transformer.ts +3 -0
- package/src/transformers/facebook-shop.transformer.ts +0 -1
- package/src/transformers/meinstadt.transformer.ts +16 -13
- package/src/transformers/mobile.transformer.ts +11 -6
- package/src/transformers/ooyyo.transformer.ts +2 -2
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bytebrand/export-cars",
|
|
3
|
-
"version": "1.10.
|
|
3
|
+
"version": "1.10.10",
|
|
4
4
|
"description": "",
|
|
5
5
|
"author": "bytebrand",
|
|
6
6
|
"license": "UNLICENSED",
|
|
@@ -60,5 +60,5 @@
|
|
|
60
60
|
"engines": {
|
|
61
61
|
"node": ">=14.0.0"
|
|
62
62
|
},
|
|
63
|
-
"gitHead": "
|
|
63
|
+
"gitHead": "45f8d5dbc712cd3f62ce8f4ee068ae5322930e10"
|
|
64
64
|
}
|
|
@@ -33,10 +33,10 @@ export class MeinstadtExporter implements Exporter {
|
|
|
33
33
|
|
|
34
34
|
let firstCar = true;
|
|
35
35
|
await this.loaderService.process(async (chunk: FsChunkInterface) => {
|
|
36
|
-
|
|
36
|
+
chunk.data = chunk.data.filter(e => this.carService.filterCar(e, this.rulesService.rules));
|
|
37
37
|
|
|
38
38
|
for (const data of chunk.data) {
|
|
39
|
-
const car = await meinstadtTransformer.transform(
|
|
39
|
+
const car = await meinstadtTransformer.transform(data);
|
|
40
40
|
await meinstadtJsonBuilder.addItem(car as MeinstadtJsonItem, firstCar);
|
|
41
41
|
this.carService.counter.countCar(data.images);
|
|
42
42
|
|
|
@@ -39,8 +39,8 @@ export class ImagesService {
|
|
|
39
39
|
return this.DEFAULT_IMAGES;
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
-
this.sortImages(images, car);
|
|
43
|
-
const transformedImages = this.generateImageLinks(
|
|
42
|
+
const sortedImages = this.sortImages(images, car);
|
|
43
|
+
const transformedImages = this.generateImageLinks(sortedImages, get(car, '_id'));
|
|
44
44
|
|
|
45
45
|
if (transformedImages.length < 17) {
|
|
46
46
|
transformedImages.push(...this.DEFAULT_IMAGES);
|
|
@@ -105,7 +105,7 @@ export class ImagesService {
|
|
|
105
105
|
return `${this.getChannelPath(imageUrl, carId)}/${channelCode.replace(/ /g, '-')}-${imageId}.${imageExtension}`;
|
|
106
106
|
}
|
|
107
107
|
|
|
108
|
-
private sortImages(images: ImboImageResponseInterface[], car: DataSchemes.Car):
|
|
108
|
+
private sortImages(images: ImboImageResponseInterface[], car: DataSchemes.Car): ImboImageResponseInterface[] {
|
|
109
109
|
const firstImageId = get(car, 'metaData.mainImageId', null);
|
|
110
110
|
const secondImageId = get(car, 'metaData.secImageId', null);
|
|
111
111
|
const thirdImageId = get(car, 'metaData.thirdImageId', null);
|
|
@@ -128,7 +128,8 @@ export class ImagesService {
|
|
|
128
128
|
images[2] = tmp;
|
|
129
129
|
}
|
|
130
130
|
});
|
|
131
|
-
images.filter(i => i); // sometimes thirdImageId exists but image is not
|
|
131
|
+
return images.filter(i => i); // sometimes thirdImageId exists but image is not
|
|
132
132
|
}
|
|
133
|
+
return images;
|
|
133
134
|
}
|
|
134
135
|
}
|
|
@@ -6,6 +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
12
|
@Injectable()
|
|
10
13
|
export class As24Transformer {
|
|
11
14
|
private currentCar: DataSchemes.Car;
|
|
@@ -7,6 +7,9 @@ import * as moment from 'moment';
|
|
|
7
7
|
|
|
8
8
|
type transformFn = (car: DataSchemes.Car, translator: TranslatorExtended) => string;
|
|
9
9
|
|
|
10
|
+
/**
|
|
11
|
+
* @deprecated 02.03.2022
|
|
12
|
+
*/
|
|
10
13
|
@Injectable()
|
|
11
14
|
export class ByOwnerTransformer {
|
|
12
15
|
private readonly translator: TranslatorExtended = new TranslatorExtended({
|
|
@@ -30,7 +30,6 @@ export class FacebookShopTransformer {
|
|
|
30
30
|
images: ImboImageResponseInterface[];
|
|
31
31
|
}): Promise<FacebookShopItem> {
|
|
32
32
|
const imageLinks = await this.imageService.getImages(car, images, this.configService.config.imageType);
|
|
33
|
-
images.length && console.log(imageLinks, this.configService.config.imageType);
|
|
34
33
|
|
|
35
34
|
return {
|
|
36
35
|
id: { value: get(car, 'metaData.vehicleId'), isGoogle: true },
|
|
@@ -1,27 +1,30 @@
|
|
|
1
1
|
import { get, toString } from 'lodash';
|
|
2
|
-
import { DataSchemes } from '@bytebrand/car-schema';
|
|
3
2
|
|
|
4
|
-
import { de } from '@bytebrand/i18n-dictionaries';
|
|
5
3
|
import { Injectable } from '@nestjs/common';
|
|
6
|
-
|
|
4
|
+
|
|
5
|
+
import { ImboImageResponseInterface } from '@bytebrand/chunkable';
|
|
6
|
+
import { DataSchemes } from '@bytebrand/car-schema';
|
|
7
|
+
import { de } from '@bytebrand/i18n-dictionaries';
|
|
8
|
+
|
|
9
|
+
import { ConfigService, ImagesService } from '../services';
|
|
7
10
|
import { MeinstadtJsonItem } from '../interfaces';
|
|
8
11
|
|
|
12
|
+
|
|
9
13
|
@Injectable()
|
|
10
14
|
export class MeinstadtTransformer {
|
|
11
|
-
constructor(private configService: ConfigService) {}
|
|
15
|
+
constructor(private configService: ConfigService, private readonly imageService: ImagesService) {}
|
|
16
|
+
|
|
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);
|
|
19
|
+
|
|
20
|
+
const carId = toString(get(car, '_id', null));
|
|
12
21
|
|
|
13
|
-
async transform({ car }: { car: DataSchemes.Car }): Promise<Partial<MeinstadtJsonItem>> {
|
|
14
|
-
const autodeId = toString(get(car, '_id', null));
|
|
15
|
-
const imageId = get(car, 'metaData.mainImageId', null);
|
|
16
|
-
const imageUrl = imageId
|
|
17
|
-
? `https://images.auto.de/carimage/${car._id}/${imageId}/large-cached.webp`
|
|
18
|
-
: 'https://images.auto.de/carimage/noimage/7pNvWELuWhZX/large-cached.jpeg';
|
|
19
22
|
return {
|
|
20
23
|
id: get(car, 'metaData.vehicleId', null),
|
|
21
24
|
make: get(car, 'mainData.make', null),
|
|
22
25
|
model: get(car, 'mainData.model', null),
|
|
23
26
|
cpc: get(this.configService.config, 'cpc', '0.08'),
|
|
24
|
-
listingUrl: `https://www.${this.configService.config.domain}/search/vehicle/${
|
|
27
|
+
listingUrl: `https://www.${this.configService.config.domain}/search/vehicle/${carId}?source=classifieds&medium=listing&campaign=meinestadt`,
|
|
25
28
|
title: this.getTitle(car),
|
|
26
29
|
accidentFree: get(car, 'mainData.accidentDamaged', null),
|
|
27
30
|
mileage: get(car, 'mainData.mileage', null),
|
|
@@ -41,10 +44,10 @@ export class MeinstadtTransformer {
|
|
|
41
44
|
emissionSticker: this.translate(get(car, 'environmentEmissions.emissionSticker', null)),
|
|
42
45
|
fuelType: this.translate(get(car, 'consumption.fuel', null)),
|
|
43
46
|
'transmissionType/transmission': this.translate(get(car, 'driveSuspension.gearbox', null)),
|
|
44
|
-
imagesCount:
|
|
47
|
+
imagesCount: carImages.length,
|
|
45
48
|
'customerType/sellerType': 'Händler',
|
|
46
49
|
usageState: this.translate(this.getUsageState(car)),
|
|
47
|
-
images:
|
|
50
|
+
images: carImages,
|
|
48
51
|
};
|
|
49
52
|
}
|
|
50
53
|
|
|
@@ -1,12 +1,17 @@
|
|
|
1
|
+
import { get, isEmpty, isNil, set, toString, upperFirst } from 'lodash';
|
|
2
|
+
|
|
1
3
|
import { Injectable } from '@nestjs/common';
|
|
4
|
+
|
|
5
|
+
import { CarDescriptionFactory, DescriptionTypeEnum } from '@bytebrand/car-description';
|
|
6
|
+
import { ImboImageResponseInterface } from '@bytebrand/chunkable';
|
|
7
|
+
import { LoggerService } from '@bytebrand/cronicle-helper';
|
|
2
8
|
import { DataSchemes } from '@bytebrand/car-schema';
|
|
3
|
-
|
|
9
|
+
|
|
4
10
|
import { MappingService, UserService, ImagesService } from '../services';
|
|
5
11
|
import { MappingRules } from '../interfaces/mapping-rules.interface';
|
|
6
|
-
import { CarDescriptionFactory, DescriptionTypeEnum } from '@bytebrand/car-description';
|
|
7
|
-
import { ConfigService } from '../services';
|
|
8
12
|
import { isNotEmptyArray } from '../utils/validator.utils';
|
|
9
|
-
import {
|
|
13
|
+
import { ConfigService } from '../services';
|
|
14
|
+
|
|
10
15
|
|
|
11
16
|
const vinGenerator = require('vin-generator');
|
|
12
17
|
|
|
@@ -19,9 +24,9 @@ export class MobileTransformer {
|
|
|
19
24
|
private userService: UserService,
|
|
20
25
|
private configService: ConfigService,
|
|
21
26
|
private imagesService: ImagesService,
|
|
22
|
-
) {}
|
|
27
|
+
) { }
|
|
23
28
|
|
|
24
|
-
async transform(carData: DataSchemes.Car, images:
|
|
29
|
+
async transform(carData: DataSchemes.Car, images: ImboImageResponseInterface[]): Promise<unknown> {
|
|
25
30
|
this.currentCar = carData;
|
|
26
31
|
const transformedCarData = {};
|
|
27
32
|
const rules = await this.mappingService.getRules();
|
|
@@ -17,7 +17,7 @@ export class OoyyoTransformer {
|
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
async transform(car: DataSchemes.Car, imboImages: ImboImageResponseInterface[]): Promise<OoyyoXmlItem> {
|
|
20
|
-
const
|
|
20
|
+
const carId = toString(get(car, '_id', ''));
|
|
21
21
|
const creationDate = get(car, 'metaData.creationDate') as number;
|
|
22
22
|
const constructionYear = get(car, 'mainData.constructionYear') as number;
|
|
23
23
|
const firstRegistration = get(car, 'mainData.firstRegistration') as number;
|
|
@@ -29,7 +29,7 @@ export class OoyyoTransformer {
|
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
return {
|
|
32
|
-
url: `https://www.${this.configService.config.domain}/search/vehicle/${
|
|
32
|
+
url: `https://www.${this.configService.config.domain}/search/vehicle/${carId}?source=classifieds&medium=listing&campaign=ooyyo`,
|
|
33
33
|
title: this.getTitle(car),
|
|
34
34
|
content: trim(toString(get(car, 'offer.offerDescription', ''))),
|
|
35
35
|
price: toString(get(car, 'price.currentSalesPrice', '')),
|