@bytebrand/export-cars 1.8.0 → 1.9.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 +7 -5
- package/dist/app.module.js.map +1 -1
- package/dist/configs/alleskralle.config.js +3 -1
- package/dist/configs/alleskralle.config.js.map +1 -1
- package/dist/configs/as24.config.js.map +1 -1
- package/dist/configs/autoboerse.config.js +1 -1
- package/dist/configs/autouncle.config.js +1 -1
- package/dist/configs/config.d.ts +3 -1
- package/dist/configs/config.js +6 -4
- package/dist/configs/config.js.map +1 -1
- package/dist/configs/criteo.config.js +2 -1
- package/dist/configs/criteo.config.js.map +1 -1
- package/dist/configs/dasparking.config.js +1 -1
- package/dist/configs/kleinanzeigefocus.config.js +2 -2
- package/dist/configs/kleinanzeigefocus.config.js.map +1 -1
- package/dist/configs/meinstadt.config.js +0 -1
- package/dist/configs/meinstadt.config.js.map +1 -1
- package/dist/configs/ooyyo.config.js +1 -0
- package/dist/configs/ooyyo.config.js.map +1 -1
- package/dist/constants/modix/index.d.ts +1 -0
- package/dist/constants/modix/index.js +1 -0
- package/dist/constants/modix/index.js.map +1 -1
- package/dist/enums/file-types.enum.js +0 -1
- package/dist/enums/file-types.enum.js.map +1 -1
- package/dist/enums/image-type.enum.d.ts +4 -0
- package/dist/enums/image-type.enum.js +9 -0
- package/dist/enums/image-type.enum.js.map +1 -0
- package/dist/enums/index.d.ts +1 -0
- package/dist/enums/index.js +1 -0
- package/dist/enums/index.js.map +1 -1
- package/dist/exporters/auto24.exporter.js +1 -1
- package/dist/exporters/auto24.exporter.js.map +1 -1
- package/dist/exporters/fb.exporter.js +1 -3
- package/dist/exporters/fb.exporter.js.map +1 -1
- package/dist/exporters/ooyyo.exporter.js +1 -1
- package/dist/exporters/ooyyo.exporter.js.map +1 -1
- package/dist/interfaces/params.interface.d.ts +1 -6
- package/dist/services/{marketing-images.service.d.ts → images.service.d.ts} +9 -5
- package/dist/services/images.service.js +151 -0
- package/dist/services/images.service.js.map +1 -0
- package/dist/services/index.d.ts +1 -1
- package/dist/services/index.js +1 -1
- package/dist/services/index.js.map +1 -1
- package/dist/transformers/auto24.transfomer.d.ts +4 -6
- package/dist/transformers/auto24.transfomer.js +10 -27
- package/dist/transformers/auto24.transfomer.js.map +1 -1
- package/dist/transformers/autouncle.transformer.d.ts +5 -5
- package/dist/transformers/autouncle.transformer.js +9 -33
- package/dist/transformers/autouncle.transformer.js.map +1 -1
- package/dist/transformers/fb.transformer.d.ts +2 -3
- package/dist/transformers/fb.transformer.js +8 -26
- package/dist/transformers/fb.transformer.js.map +1 -1
- package/dist/transformers/google.transformer.d.ts +5 -5
- package/dist/transformers/google.transformer.js +10 -26
- package/dist/transformers/google.transformer.js.map +1 -1
- package/dist/transformers/modix.transformer.js +1 -2
- package/dist/transformers/modix.transformer.js.map +1 -1
- package/dist/transformers/ooyyo.transformer.d.ts +4 -5
- package/dist/transformers/ooyyo.transformer.js +7 -17
- package/dist/transformers/ooyyo.transformer.js.map +1 -1
- package/dist/transformers/rubrikk.transformer.d.ts +4 -4
- package/dist/transformers/rubrikk.transformer.js +5 -13
- package/dist/transformers/rubrikk.transformer.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +2 -2
- package/src/app.module.ts +6 -12
- package/src/configs/alleskralle.config.ts +3 -1
- package/src/configs/as24.config.ts +1 -1
- package/src/configs/auto24.config.ts +1 -1
- package/src/configs/autoboerse.config.ts +2 -2
- package/src/configs/autouncle.config.ts +1 -1
- package/src/configs/config.ts +3 -2
- package/src/configs/criteo.config.ts +3 -2
- package/src/configs/dasparking.config.ts +1 -1
- package/src/configs/{kleinanzeigefocus.config.ts → kleinanzeigeFocus.config.ts} +3 -3
- package/src/configs/meinstadt.config.ts +1 -1
- package/src/configs/ooyyo.config.ts +2 -1
- package/src/constants/modix/index.ts +1 -0
- package/src/enums/file-types.enum.ts +1 -1
- package/src/enums/image-type.enum.ts +4 -0
- package/src/enums/index.ts +1 -0
- package/src/exporters/auto24.exporter.ts +2 -4
- package/src/exporters/fb.exporter.ts +3 -3
- package/src/exporters/ooyyo.exporter.ts +3 -4
- package/src/interfaces/params.interface.ts +1 -6
- package/src/services/images.service.ts +161 -0
- package/src/services/index.ts +1 -2
- package/src/transformers/auto24.transfomer.ts +8 -31
- package/src/transformers/autouncle.transformer.ts +9 -35
- package/src/transformers/fb.transformer.ts +16 -44
- package/src/transformers/google.transformer.ts +10 -28
- package/src/transformers/modix.transformer.ts +3 -2
- package/src/transformers/ooyyo.transformer.ts +4 -18
- package/src/transformers/rubrikk.transformer.ts +5 -16
- package/dist/services/marketing-images.service.js +0 -58
- package/dist/services/marketing-images.service.js.map +0 -1
- package/src/services/marketing-images.service.ts +0 -70
|
@@ -1,28 +1,27 @@
|
|
|
1
1
|
import { TranslatorExtended } from '@bytebrand/schema-tools';
|
|
2
2
|
import { de, deVehicleDetailsPage, deVehicleProps } from '@bytebrand/i18n-dictionaries';
|
|
3
3
|
import {
|
|
4
|
+
escape,
|
|
5
|
+
findIndex,
|
|
4
6
|
get,
|
|
5
|
-
|
|
7
|
+
includes,
|
|
8
|
+
isArray,
|
|
9
|
+
isBoolean,
|
|
6
10
|
isEmpty,
|
|
7
|
-
|
|
11
|
+
isString,
|
|
8
12
|
join,
|
|
9
|
-
escape,
|
|
10
13
|
toSafeInteger,
|
|
14
|
+
toString,
|
|
15
|
+
trim,
|
|
11
16
|
truncate,
|
|
12
|
-
isBoolean,
|
|
13
|
-
isString,
|
|
14
|
-
isArray,
|
|
15
|
-
includes,
|
|
16
|
-
findIndex,
|
|
17
17
|
} from 'lodash';
|
|
18
18
|
import * as moment from 'moment';
|
|
19
19
|
import { DataSchemes } from '@bytebrand/car-schema';
|
|
20
20
|
import { DePostalCodesService } from '@bytebrand/car-basic-data-scope';
|
|
21
21
|
import { DePostalCodesEntryInterface } from '@bytebrand/car-basic-data-scope/dist/interfaces/DePostalCodesInterface';
|
|
22
|
-
import {
|
|
23
|
-
import { ConfigService } from '../services/config.service';
|
|
22
|
+
import { ConfigService, ImagesService } from '../services';
|
|
24
23
|
import { ImboImageResponseInterface } from '@bytebrand/chunkable';
|
|
25
|
-
import {
|
|
24
|
+
import { isValidVin } from '../utils/validator.utils';
|
|
26
25
|
import { Injectable } from '@nestjs/common';
|
|
27
26
|
import { FbDescription } from './fb-description.transformer';
|
|
28
27
|
import { Description } from '../interfaces/description.interface';
|
|
@@ -31,24 +30,21 @@ import {
|
|
|
31
30
|
DEFAULT_ADDR1,
|
|
32
31
|
DEFAULT_CITY,
|
|
33
32
|
DEFAULT_ZIP,
|
|
34
|
-
FB_MAX_IMAGE_COUNT_FOR_DEAFULT,
|
|
35
33
|
FB_MAX_TRIM_LENGTH,
|
|
36
34
|
FB_MIN_MILEAGES,
|
|
37
35
|
TIMESTAMP_FIRST_YEAR,
|
|
38
36
|
} from '../constants/fb.constants';
|
|
39
37
|
import { UserService } from 'src/services';
|
|
38
|
+
import { ImageType } from '../enums';
|
|
40
39
|
|
|
41
40
|
@Injectable()
|
|
42
41
|
export class FbTransformer {
|
|
43
42
|
private translator: TranslatorExtended;
|
|
44
43
|
private postalCodesService: DePostalCodesService;
|
|
45
|
-
private
|
|
44
|
+
private imagesService: ImagesService;
|
|
46
45
|
|
|
47
|
-
constructor(
|
|
48
|
-
|
|
49
|
-
private readonly userService: UserService
|
|
50
|
-
) {
|
|
51
|
-
this.marketingImages = new MarketingImagesService(configService, userService);
|
|
46
|
+
constructor(private readonly configService: ConfigService, private readonly userService: UserService) {
|
|
47
|
+
this.imagesService = new ImagesService(configService, userService);
|
|
52
48
|
const dict = { ...de, ...deVehicleProps, ...deVehicleDetailsPage };
|
|
53
49
|
this.translator = new TranslatorExtended(dict);
|
|
54
50
|
this.postalCodesService = DePostalCodesService.getInstance();
|
|
@@ -81,7 +77,7 @@ export class FbTransformer {
|
|
|
81
77
|
make: toString(get(car, 'mainData.make', '')),
|
|
82
78
|
model: toString(get(car, 'mainData.model', '')),
|
|
83
79
|
trim: this.getTrim(car),
|
|
84
|
-
image: await this.
|
|
80
|
+
image: await this.imagesService.getImages(car, images, ImageType.marketing),
|
|
85
81
|
year: toString(year),
|
|
86
82
|
mileage: {
|
|
87
83
|
value: this.getMileage(car),
|
|
@@ -152,15 +148,13 @@ export class FbTransformer {
|
|
|
152
148
|
dealer_email: string;
|
|
153
149
|
dealer_phone: string;
|
|
154
150
|
} {
|
|
155
|
-
|
|
151
|
+
return {
|
|
156
152
|
dealer_communication_channel: 'LEAD_FORM',
|
|
157
153
|
dealer_id: get(car, 'metaData.ownerId'),
|
|
158
154
|
dealer_privacy_policy_url: 'https://www.auto.de/einwilligungserklaerung-datenschutz-agb/',
|
|
159
155
|
dealer_email: 'auto@auto.de',
|
|
160
156
|
dealer_phone: '+498000008300',
|
|
161
157
|
};
|
|
162
|
-
|
|
163
|
-
return items;
|
|
164
158
|
}
|
|
165
159
|
|
|
166
160
|
private getTitle(car: DataSchemes.Car): string {
|
|
@@ -372,28 +366,6 @@ export class FbTransformer {
|
|
|
372
366
|
return mileage <= FB_MIN_MILEAGES ? FB_MIN_MILEAGES + 1 : mileage;
|
|
373
367
|
}
|
|
374
368
|
|
|
375
|
-
private async getImagesField(
|
|
376
|
-
carId: string,
|
|
377
|
-
_mainImageId: string,
|
|
378
|
-
images: ImboImageResponseInterface[],
|
|
379
|
-
): Promise<{ url: string }[]> {
|
|
380
|
-
const defImages = [
|
|
381
|
-
{ url: 'https://images.auto.de/carimage/noimage/7pNvWELuWhZX/large-cached.jpeg' },
|
|
382
|
-
{ url: 'https://images.auto.de/carimage/noimage/GvyXmrpaf1D6/large-cached.jpeg' },
|
|
383
|
-
{ url: 'https://images.auto.de/carimage/noimage/gY1zF8PXzH2W/large-cached.jpeg' },
|
|
384
|
-
{ url: 'https://images.auto.de/carimage/noimage/pFyfBsqBHEso/large-cached.jpeg' },
|
|
385
|
-
];
|
|
386
|
-
if (isNotEmptyArray(images)) {
|
|
387
|
-
const imageList = await this.marketingImages.getImagesUrl(images, this.configService.config.imageUrl, carId);
|
|
388
|
-
|
|
389
|
-
if (imageList.length < FB_MAX_IMAGE_COUNT_FOR_DEAFULT) {
|
|
390
|
-
imageList.push(...defImages);
|
|
391
|
-
}
|
|
392
|
-
return imageList;
|
|
393
|
-
}
|
|
394
|
-
return defImages;
|
|
395
|
-
}
|
|
396
|
-
|
|
397
369
|
private getHighlights(car: DataSchemes.Car): { type: unknown; value: unknown }[] {
|
|
398
370
|
const facebookFeatures = [
|
|
399
371
|
{ key: 'assistants.abs', type: 'abs_brakes', value: 'ABS' },
|
|
@@ -1,25 +1,28 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { escape, get, join, round, toString, trim } from 'lodash';
|
|
2
2
|
import { CarDescriptionFactory, DescriptionTypeEnum } from '@bytebrand/car-description';
|
|
3
3
|
import { DataSchemes } from '@bytebrand/car-schema';
|
|
4
4
|
import { TranslatorExtended } from '@bytebrand/schema-tools';
|
|
5
5
|
import { de, deVehicleDetailsPage, deVehicleProps } from '@bytebrand/i18n-dictionaries';
|
|
6
6
|
import { Injectable } from '@nestjs/common';
|
|
7
|
-
import { UserService } from '../services
|
|
8
|
-
import { ConfigService } from '../services/config.service';
|
|
7
|
+
import { ConfigService, ImagesService, UserService } from '../services';
|
|
9
8
|
import { GoogleXmlItem } from '../interfaces';
|
|
9
|
+
import { ImageType } from '../enums';
|
|
10
10
|
|
|
11
11
|
@Injectable()
|
|
12
12
|
export class GoogleTransformer {
|
|
13
13
|
private translator: TranslatorExtended;
|
|
14
14
|
|
|
15
|
-
constructor(
|
|
15
|
+
constructor(
|
|
16
|
+
private userService: UserService,
|
|
17
|
+
private configService: ConfigService,
|
|
18
|
+
private imageService: ImagesService,
|
|
19
|
+
) {
|
|
16
20
|
const dict = { ...de, ...deVehicleProps, ...deVehicleDetailsPage };
|
|
17
21
|
this.translator = new TranslatorExtended(dict);
|
|
18
22
|
}
|
|
19
23
|
|
|
20
|
-
async transform({ car }: { car: DataSchemes.Car }): Promise<GoogleXmlItem> {
|
|
24
|
+
async transform({ car, images }: { car: DataSchemes.Car; images: Array<any> }): Promise<GoogleXmlItem> {
|
|
21
25
|
const carId = toString(get(car, '_id', ''));
|
|
22
|
-
const mainImageId = get(car, 'metaData.mainImageId', '');
|
|
23
26
|
|
|
24
27
|
return {
|
|
25
28
|
id: carId,
|
|
@@ -28,7 +31,7 @@ export class GoogleTransformer {
|
|
|
28
31
|
google_product_category: this.getBreadcrumbs(car),
|
|
29
32
|
product_type: this.getCategory(car),
|
|
30
33
|
link: this.getLink(car),
|
|
31
|
-
image_link: await this.
|
|
34
|
+
image_link: await this.imageService.getImages(car, images, ImageType.marketing)[0],
|
|
32
35
|
condition: this.mapState(car),
|
|
33
36
|
availability: this.getAvailability(car),
|
|
34
37
|
brand: get(car, 'mainData.make', ''),
|
|
@@ -98,27 +101,6 @@ export class GoogleTransformer {
|
|
|
98
101
|
return this.translator.translateVal(colorSelection);
|
|
99
102
|
}
|
|
100
103
|
|
|
101
|
-
private async buildLargeImageUrl(carId: string, imageId: string): Promise<string> {
|
|
102
|
-
if (this.configService.config.isCriteo) {
|
|
103
|
-
try {
|
|
104
|
-
const criteoConfig = await this.userService.getMarketingImageConfig(this.configService.config.criteoMarketingImagesConfigId);
|
|
105
|
-
return imageId
|
|
106
|
-
? `${this.configService.config.imageUrl}/generated_images/${[carId[0], carId[1], carId[2], carId].join(
|
|
107
|
-
'/',
|
|
108
|
-
)}/criteo-${imageId}.${criteoConfig.imageExtension}`
|
|
109
|
-
: 'https://images.auto.de/carimage/noimage/7pNvWELuWhZX/large';
|
|
110
|
-
} catch (e) {
|
|
111
|
-
console.log('Error: Failed to get criteoConfig');
|
|
112
|
-
return imageId
|
|
113
|
-
? `${this.configService.config.imageUrl}/carimage/${carId}/${imageId}/large`
|
|
114
|
-
: 'https://images.auto.de/carimage/noimage/7pNvWELuWhZX/large';
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
return imageId
|
|
118
|
-
? `${this.configService.config.imageUrl}/carimage/${carId}/${imageId}/large`
|
|
119
|
-
: 'https://images.auto.de/carimage/noimage/7pNvWELuWhZX/large';
|
|
120
|
-
}
|
|
121
|
-
|
|
122
104
|
private mapState(car: DataSchemes.Car): string {
|
|
123
105
|
const available = {
|
|
124
106
|
selector_condition_new: 'Neu',
|
|
@@ -11,7 +11,6 @@ import { DataSchemes } from '@bytebrand/car-schema';
|
|
|
11
11
|
|
|
12
12
|
import { imageItem, IModixWrapItem, ModixXmlItem } from '../interfaces';
|
|
13
13
|
import { isNotEmptyArray, isValidVin } from '../utils/validator.utils';
|
|
14
|
-
import { CategoryList } from '../constants/modix/category.constant';
|
|
15
14
|
import { ConfigService } from '../services';
|
|
16
15
|
import {
|
|
17
16
|
BodyColorList,
|
|
@@ -21,8 +20,10 @@ import {
|
|
|
21
20
|
TransmissionList,
|
|
22
21
|
UsageConditionList,
|
|
23
22
|
UsageTypeList,
|
|
23
|
+
CategoryList,
|
|
24
24
|
} from '../constants';
|
|
25
25
|
|
|
26
|
+
|
|
26
27
|
@Injectable()
|
|
27
28
|
export class ModixTransformer {
|
|
28
29
|
constructor(private readonly configService: ConfigService) {}
|
|
@@ -32,7 +33,7 @@ export class ModixTransformer {
|
|
|
32
33
|
mappingRules: MappingRulesInterface[],
|
|
33
34
|
): Promise<ModixXmlItem> {
|
|
34
35
|
const { car, images } = chunkData;
|
|
35
|
-
|
|
36
|
+
|
|
36
37
|
return {
|
|
37
38
|
//Main data
|
|
38
39
|
maindata: {
|
|
@@ -5,19 +5,18 @@ import * as moment from 'moment';
|
|
|
5
5
|
import { DataSchemes } from '@bytebrand/car-schema';
|
|
6
6
|
import { OoyyoXmlItem } from '../interfaces';
|
|
7
7
|
import { ImboImageResponseInterface } from '@bytebrand/chunkable';
|
|
8
|
-
import { ConfigService } from '../services
|
|
8
|
+
import { ConfigService, ImagesService } from '../services';
|
|
9
9
|
import { Injectable } from '@nestjs/common';
|
|
10
|
-
import { isNotEmptyArray } from '../utils/validator.utils';
|
|
11
10
|
|
|
12
11
|
@Injectable()
|
|
13
12
|
export class OoyyoTransformer {
|
|
14
13
|
private translator: Translator;
|
|
15
14
|
|
|
16
|
-
constructor(private configService: ConfigService) {
|
|
15
|
+
constructor(private configService: ConfigService, private imageService: ImagesService) {
|
|
17
16
|
this.translator = new Translator(de);
|
|
18
17
|
}
|
|
19
18
|
|
|
20
|
-
transform(car: DataSchemes.Car, imboImages: ImboImageResponseInterface[]): OoyyoXmlItem {
|
|
19
|
+
async transform(car: DataSchemes.Car, imboImages: ImboImageResponseInterface[]): Promise<OoyyoXmlItem> {
|
|
21
20
|
const autodeid = toString(get(car, '_id', ''));
|
|
22
21
|
const creationDate = get(car, 'metaData.creationDate') as number;
|
|
23
22
|
const constructionYear = get(car, 'mainData.constructionYear') as number;
|
|
@@ -49,7 +48,7 @@ export class OoyyoTransformer {
|
|
|
49
48
|
doors: toString(get(car, 'mainData.doors', '')),
|
|
50
49
|
seats: toString(get(car, 'mainData.seats', '')),
|
|
51
50
|
gears: toString(get(car, 'driveSuspension.gears', '')),
|
|
52
|
-
pictures: this.
|
|
51
|
+
pictures: await this.imageService.getImages(car, imboImages, this.configService.config.imageType),
|
|
53
52
|
location: {
|
|
54
53
|
city: toString(get(car, 'location.city', '')),
|
|
55
54
|
postcode: toString(get(car, 'location.zipCode', '')),
|
|
@@ -107,17 +106,4 @@ export class OoyyoTransformer {
|
|
|
107
106
|
const format = onlyTime ? 'hh:mm:ss' : 'DD/MM/YYYY';
|
|
108
107
|
return moment(timestamp * 1000).format(format);
|
|
109
108
|
}
|
|
110
|
-
|
|
111
|
-
private getImagesField(carId: string, images: ImboImageResponseInterface[]): string[] {
|
|
112
|
-
if (isNotEmptyArray(images)) {
|
|
113
|
-
return images.map((image: ImboImageResponseInterface) => {
|
|
114
|
-
return this.buildLargeImageUrl(carId, image.imageIdentifier);
|
|
115
|
-
});
|
|
116
|
-
}
|
|
117
|
-
return [];
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
private buildLargeImageUrl(carId: string, imageId: string): string {
|
|
121
|
-
return `${this.configService.config.imageUrl}/carimage/${carId}/${imageId}/large`;
|
|
122
|
-
}
|
|
123
109
|
}
|
|
@@ -3,21 +3,21 @@ import { Injectable } from '@nestjs/common';
|
|
|
3
3
|
|
|
4
4
|
import { de, deVehicleDetailsPage, deVehicleProps } from '@bytebrand/i18n-dictionaries';
|
|
5
5
|
import { DePostalCodesService } from '@bytebrand/car-basic-data-scope';
|
|
6
|
+
import { ImboImageResponseInterface } from '@bytebrand/chunkable';
|
|
6
7
|
import { TranslatorExtended } from '@bytebrand/schema-tools';
|
|
7
8
|
import { DataSchemes } from '@bytebrand/car-schema';
|
|
8
9
|
|
|
9
10
|
import { RubrikkXmlItem } from '../interfaces';
|
|
10
|
-
import { ConfigService } from '../services';
|
|
11
|
+
import { ConfigService, ImagesService } from '../services';
|
|
12
|
+
|
|
11
13
|
import * as moment from 'moment/moment';
|
|
12
|
-
import { ImboImageResponseInterface } from '@bytebrand/chunkable';
|
|
13
|
-
import { isNotEmptyArray } from '../utils/validator.utils';
|
|
14
14
|
|
|
15
15
|
@Injectable()
|
|
16
16
|
export class RubrikkTransformer {
|
|
17
17
|
private translator: TranslatorExtended;
|
|
18
18
|
private postalCodesService: DePostalCodesService;
|
|
19
19
|
|
|
20
|
-
constructor(private readonly configService: ConfigService) {
|
|
20
|
+
constructor(private readonly configService: ConfigService, private readonly imageService: ImagesService) {
|
|
21
21
|
const dict = { ...de, ...deVehicleProps, ...deVehicleDetailsPage };
|
|
22
22
|
this.postalCodesService = DePostalCodesService.getInstance();
|
|
23
23
|
this.translator = new TranslatorExtended(dict);
|
|
@@ -30,11 +30,9 @@ export class RubrikkTransformer {
|
|
|
30
30
|
car: DataSchemes.Car;
|
|
31
31
|
images: ImboImageResponseInterface[];
|
|
32
32
|
}): Promise<RubrikkXmlItem> {
|
|
33
|
-
const autodeId = toString(get(car, '_id', ''));
|
|
34
|
-
|
|
35
33
|
return {
|
|
36
34
|
//Common Fields
|
|
37
|
-
ad__all_imageurls: this.
|
|
35
|
+
ad__all_imageurls: await this.imageService.getImages(car, images, this.configService.config.imageType),
|
|
38
36
|
ad__condition_new_used_etc: this.getCondition(car),
|
|
39
37
|
ad__description: toString(get(car, 'offer.offerDescription', '')),
|
|
40
38
|
ad__headline: this.getTitle(car),
|
|
@@ -135,15 +133,6 @@ export class RubrikkTransformer {
|
|
|
135
133
|
: `${this.configService.config.baseImageUrl}/carimage/noimage/7pNvWELuWhZX/large-cached.jpeg`;
|
|
136
134
|
}
|
|
137
135
|
|
|
138
|
-
private getImagesLinks(carId: string, images: ImboImageResponseInterface[]): string[] {
|
|
139
|
-
if (isNotEmptyArray(images)) {
|
|
140
|
-
return images.map((image: ImboImageResponseInterface) => {
|
|
141
|
-
return `${this.configService.config.baseImageUrl}/carimage/${carId}/${image.imageIdentifier}/large`;
|
|
142
|
-
});
|
|
143
|
-
}
|
|
144
|
-
return [];
|
|
145
|
-
}
|
|
146
|
-
|
|
147
136
|
private getEnergyClass(car: DataSchemes.Car): string {
|
|
148
137
|
const available = {
|
|
149
138
|
selector_energyEfficiencyClass_a: 'A',
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.MarketingImagesService = void 0;
|
|
4
|
-
class MarketingImagesService {
|
|
5
|
-
configService;
|
|
6
|
-
userService;
|
|
7
|
-
constructor(configService, userService) {
|
|
8
|
-
this.configService = configService;
|
|
9
|
-
this.userService = userService;
|
|
10
|
-
}
|
|
11
|
-
async getImagesUrl(images, imageUrl, carId) {
|
|
12
|
-
const transformedImages = this.transformImagesArrayIntoObject(images);
|
|
13
|
-
const configs = (await this.getMarketingImageConfigs());
|
|
14
|
-
const marketingImageConfigs = this.transform(configs);
|
|
15
|
-
const imageUrls = [];
|
|
16
|
-
for (let i = 0; i < marketingImageConfigs.length; i++) {
|
|
17
|
-
const marketingImage = marketingImageConfigs[i];
|
|
18
|
-
for (let i = 0; i < marketingImage.marketingImageCodes.length; i++) {
|
|
19
|
-
const imageCode = marketingImage.marketingImageCodes[i];
|
|
20
|
-
const imageId = transformedImages[imageCode];
|
|
21
|
-
if (imageId) {
|
|
22
|
-
imageUrls.push({ url: this.getImagePathWithExtenstion(imageUrl, carId, imageId, configs) });
|
|
23
|
-
break;
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
return imageUrls;
|
|
28
|
-
}
|
|
29
|
-
async getMarketingImageConfigs() {
|
|
30
|
-
const configs = await this.userService.getMarketingImageConfigs();
|
|
31
|
-
const { id } = configs.find(config => config.channelCode.includes(this.configService.config.exportType));
|
|
32
|
-
return this.userService.getMarketingImageConfig(id);
|
|
33
|
-
}
|
|
34
|
-
transformImagesArrayIntoObject(images) {
|
|
35
|
-
const result = {};
|
|
36
|
-
images.forEach(image => {
|
|
37
|
-
const imageCode = image.imageCodePredicted.split('-')[0];
|
|
38
|
-
result[imageCode] = image.imageIdentifier;
|
|
39
|
-
});
|
|
40
|
-
return result;
|
|
41
|
-
}
|
|
42
|
-
transform(config) {
|
|
43
|
-
return config.marketingImages.map(marketingImage => {
|
|
44
|
-
return {
|
|
45
|
-
marketingImageCodes: marketingImage.imageCodes,
|
|
46
|
-
};
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
getChannelPath(imageUrl, carId) {
|
|
50
|
-
return `${imageUrl}/${[carId[0], carId[1], carId[2], carId].join('/')}`;
|
|
51
|
-
}
|
|
52
|
-
getImagePathWithExtenstion(imageUrl, carId, imageId, config) {
|
|
53
|
-
const { channelCode, imageExtension } = config;
|
|
54
|
-
return `${this.getChannelPath(imageUrl, carId)}/${channelCode.replace(/ /g, '-')}-${imageId}.${imageExtension}`;
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
exports.MarketingImagesService = MarketingImagesService;
|
|
58
|
-
//# sourceMappingURL=marketing-images.service.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"marketing-images.service.js","sourceRoot":"","sources":["../../src/services/marketing-images.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
import { MarketingImageConfigInterface, MarketingImageConfigsInterface } from '@bytebrand/autode-request';
|
|
2
|
-
import { ConfigService } from './config.service';
|
|
3
|
-
import { UserService } from './user.service';
|
|
4
|
-
|
|
5
|
-
export class MarketingImagesService {
|
|
6
|
-
constructor(
|
|
7
|
-
private readonly configService: ConfigService,
|
|
8
|
-
private readonly userService: UserService
|
|
9
|
-
) {}
|
|
10
|
-
|
|
11
|
-
async getImagesUrl(images: any, imageUrl: string, carId: string): Promise<{ url: string }[]> {
|
|
12
|
-
const transformedImages = this.transformImagesArrayIntoObject(images);
|
|
13
|
-
const configs = (await this.getMarketingImageConfigs()) as any;
|
|
14
|
-
const marketingImageConfigs = this.transform(configs);
|
|
15
|
-
|
|
16
|
-
const imageUrls = [];
|
|
17
|
-
|
|
18
|
-
for (let i = 0; i < marketingImageConfigs.length; i++) {
|
|
19
|
-
const marketingImage = marketingImageConfigs[i];
|
|
20
|
-
for (let i = 0; i < marketingImage.marketingImageCodes.length; i++) {
|
|
21
|
-
const imageCode = marketingImage.marketingImageCodes[i];
|
|
22
|
-
const imageId = transformedImages[imageCode];
|
|
23
|
-
if (imageId) {
|
|
24
|
-
imageUrls.push({ url: this.getImagePathWithExtenstion(imageUrl, carId, imageId, configs) });
|
|
25
|
-
break;
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
return imageUrls;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
async getMarketingImageConfigs(): Promise<MarketingImageConfigsInterface> {
|
|
34
|
-
const configs = await this.userService.getMarketingImageConfigs();
|
|
35
|
-
const { id } = configs.find(config => config.channelCode.includes(this.configService.config.exportType));
|
|
36
|
-
|
|
37
|
-
return this.userService.getMarketingImageConfig(id);
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
private transformImagesArrayIntoObject(images: { [imageCode: string]: string }[]) {
|
|
41
|
-
const result: { [imageCode: string]: string } = {};
|
|
42
|
-
images.forEach(image => {
|
|
43
|
-
const imageCode = image.imageCodePredicted.split('-')[0];
|
|
44
|
-
result[imageCode] = image.imageIdentifier;
|
|
45
|
-
});
|
|
46
|
-
return result;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
private transform(config: MarketingImageConfigInterface): { marketingImageCodes: string[] }[] {
|
|
50
|
-
return config.marketingImages.map(marketingImage => {
|
|
51
|
-
return {
|
|
52
|
-
marketingImageCodes: marketingImage.imageCodes,
|
|
53
|
-
};
|
|
54
|
-
});
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
protected getChannelPath(imageUrl: string, carId: string): string {
|
|
58
|
-
return `${imageUrl}/${[carId[0], carId[1], carId[2], carId].join('/')}`;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
protected getImagePathWithExtenstion(
|
|
62
|
-
imageUrl: string,
|
|
63
|
-
carId: string,
|
|
64
|
-
imageId: string,
|
|
65
|
-
config: MarketingImageConfigsInterface,
|
|
66
|
-
): string {
|
|
67
|
-
const { channelCode, imageExtension } = config;
|
|
68
|
-
return `${this.getChannelPath(imageUrl, carId)}/${channelCode.replace(/ /g, '-')}-${imageId}.${imageExtension}`;
|
|
69
|
-
}
|
|
70
|
-
}
|