@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.
Files changed (97) hide show
  1. package/dist/app.module.js +7 -5
  2. package/dist/app.module.js.map +1 -1
  3. package/dist/configs/alleskralle.config.js +3 -1
  4. package/dist/configs/alleskralle.config.js.map +1 -1
  5. package/dist/configs/as24.config.js.map +1 -1
  6. package/dist/configs/autoboerse.config.js +1 -1
  7. package/dist/configs/autouncle.config.js +1 -1
  8. package/dist/configs/config.d.ts +3 -1
  9. package/dist/configs/config.js +6 -4
  10. package/dist/configs/config.js.map +1 -1
  11. package/dist/configs/criteo.config.js +2 -1
  12. package/dist/configs/criteo.config.js.map +1 -1
  13. package/dist/configs/dasparking.config.js +1 -1
  14. package/dist/configs/kleinanzeigefocus.config.js +2 -2
  15. package/dist/configs/kleinanzeigefocus.config.js.map +1 -1
  16. package/dist/configs/meinstadt.config.js +0 -1
  17. package/dist/configs/meinstadt.config.js.map +1 -1
  18. package/dist/configs/ooyyo.config.js +1 -0
  19. package/dist/configs/ooyyo.config.js.map +1 -1
  20. package/dist/constants/modix/index.d.ts +1 -0
  21. package/dist/constants/modix/index.js +1 -0
  22. package/dist/constants/modix/index.js.map +1 -1
  23. package/dist/enums/file-types.enum.js +0 -1
  24. package/dist/enums/file-types.enum.js.map +1 -1
  25. package/dist/enums/image-type.enum.d.ts +4 -0
  26. package/dist/enums/image-type.enum.js +9 -0
  27. package/dist/enums/image-type.enum.js.map +1 -0
  28. package/dist/enums/index.d.ts +1 -0
  29. package/dist/enums/index.js +1 -0
  30. package/dist/enums/index.js.map +1 -1
  31. package/dist/exporters/auto24.exporter.js +1 -1
  32. package/dist/exporters/auto24.exporter.js.map +1 -1
  33. package/dist/exporters/fb.exporter.js +1 -3
  34. package/dist/exporters/fb.exporter.js.map +1 -1
  35. package/dist/exporters/ooyyo.exporter.js +1 -1
  36. package/dist/exporters/ooyyo.exporter.js.map +1 -1
  37. package/dist/interfaces/params.interface.d.ts +1 -6
  38. package/dist/services/{marketing-images.service.d.ts → images.service.d.ts} +9 -5
  39. package/dist/services/images.service.js +151 -0
  40. package/dist/services/images.service.js.map +1 -0
  41. package/dist/services/index.d.ts +1 -1
  42. package/dist/services/index.js +1 -1
  43. package/dist/services/index.js.map +1 -1
  44. package/dist/transformers/auto24.transfomer.d.ts +4 -6
  45. package/dist/transformers/auto24.transfomer.js +10 -27
  46. package/dist/transformers/auto24.transfomer.js.map +1 -1
  47. package/dist/transformers/autouncle.transformer.d.ts +5 -5
  48. package/dist/transformers/autouncle.transformer.js +9 -33
  49. package/dist/transformers/autouncle.transformer.js.map +1 -1
  50. package/dist/transformers/fb.transformer.d.ts +2 -3
  51. package/dist/transformers/fb.transformer.js +8 -26
  52. package/dist/transformers/fb.transformer.js.map +1 -1
  53. package/dist/transformers/google.transformer.d.ts +5 -5
  54. package/dist/transformers/google.transformer.js +10 -26
  55. package/dist/transformers/google.transformer.js.map +1 -1
  56. package/dist/transformers/modix.transformer.js +1 -2
  57. package/dist/transformers/modix.transformer.js.map +1 -1
  58. package/dist/transformers/ooyyo.transformer.d.ts +4 -5
  59. package/dist/transformers/ooyyo.transformer.js +7 -17
  60. package/dist/transformers/ooyyo.transformer.js.map +1 -1
  61. package/dist/transformers/rubrikk.transformer.d.ts +4 -4
  62. package/dist/transformers/rubrikk.transformer.js +5 -13
  63. package/dist/transformers/rubrikk.transformer.js.map +1 -1
  64. package/dist/tsconfig.build.tsbuildinfo +1 -1
  65. package/package.json +2 -2
  66. package/src/app.module.ts +6 -12
  67. package/src/configs/alleskralle.config.ts +3 -1
  68. package/src/configs/as24.config.ts +1 -1
  69. package/src/configs/auto24.config.ts +1 -1
  70. package/src/configs/autoboerse.config.ts +2 -2
  71. package/src/configs/autouncle.config.ts +1 -1
  72. package/src/configs/config.ts +3 -2
  73. package/src/configs/criteo.config.ts +3 -2
  74. package/src/configs/dasparking.config.ts +1 -1
  75. package/src/configs/{kleinanzeigefocus.config.ts → kleinanzeigeFocus.config.ts} +3 -3
  76. package/src/configs/meinstadt.config.ts +1 -1
  77. package/src/configs/ooyyo.config.ts +2 -1
  78. package/src/constants/modix/index.ts +1 -0
  79. package/src/enums/file-types.enum.ts +1 -1
  80. package/src/enums/image-type.enum.ts +4 -0
  81. package/src/enums/index.ts +1 -0
  82. package/src/exporters/auto24.exporter.ts +2 -4
  83. package/src/exporters/fb.exporter.ts +3 -3
  84. package/src/exporters/ooyyo.exporter.ts +3 -4
  85. package/src/interfaces/params.interface.ts +1 -6
  86. package/src/services/images.service.ts +161 -0
  87. package/src/services/index.ts +1 -2
  88. package/src/transformers/auto24.transfomer.ts +8 -31
  89. package/src/transformers/autouncle.transformer.ts +9 -35
  90. package/src/transformers/fb.transformer.ts +16 -44
  91. package/src/transformers/google.transformer.ts +10 -28
  92. package/src/transformers/modix.transformer.ts +3 -2
  93. package/src/transformers/ooyyo.transformer.ts +4 -18
  94. package/src/transformers/rubrikk.transformer.ts +5 -16
  95. package/dist/services/marketing-images.service.js +0 -58
  96. package/dist/services/marketing-images.service.js.map +0 -1
  97. 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
- toString,
7
+ includes,
8
+ isArray,
9
+ isBoolean,
6
10
  isEmpty,
7
- trim,
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 { MarketingImagesService } from '../services/marketing-images.service';
23
- import { ConfigService } from '../services/config.service';
22
+ import { ConfigService, ImagesService } from '../services';
24
23
  import { ImboImageResponseInterface } from '@bytebrand/chunkable';
25
- import { isNotEmptyArray, isValidVin } from '../utils/validator.utils';
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 marketingImages: MarketingImagesService;
44
+ private imagesService: ImagesService;
46
45
 
47
- constructor(
48
- private readonly configService: ConfigService,
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.getImagesField(autodeId, get(car, 'metaData.mainImageId', null), images),
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
- const items = {
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 { get, toString, trim, join, escape, round } from 'lodash';
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/user.service';
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(private userService: UserService, private configService: ConfigService) {
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.buildLargeImageUrl(carId, mainImageId),
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
- // await this.buildOptions(car, mappingRules);
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/config.service';
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.getImagesField(autodeid, imboImages),
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.getImagesLinks(autodeId, images),
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":";;;AAIA,MAAa,sBAAsB;IAEd;IACA;IAFnB,YACmB,aAA4B,EAC5B,WAAwB;QADxB,kBAAa,GAAb,aAAa,CAAe;QAC5B,gBAAW,GAAX,WAAW,CAAa;IACxC,CAAC;IAEJ,KAAK,CAAC,YAAY,CAAC,MAAW,EAAE,QAAgB,EAAE,KAAa;QAC7D,MAAM,iBAAiB,GAAG,IAAI,CAAC,8BAA8B,CAAC,MAAM,CAAC,CAAC;QACtE,MAAM,OAAO,GAAG,CAAC,MAAM,IAAI,CAAC,wBAAwB,EAAE,CAAQ,CAAC;QAC/D,MAAM,qBAAqB,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAEtD,MAAM,SAAS,GAAG,EAAE,CAAC;QAErB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,qBAAqB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACrD,MAAM,cAAc,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAAC;YAChD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,mBAAmB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAClE,MAAM,SAAS,GAAG,cAAc,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;gBACxD,MAAM,OAAO,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;gBAC7C,IAAI,OAAO,EAAE;oBACX,SAAS,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,0BAA0B,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;oBAC5F,MAAM;iBACP;aACF;SACF;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,wBAAwB;QAC5B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,wBAAwB,EAAE,CAAC;QAClE,MAAM,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;QAEzG,OAAO,IAAI,CAAC,WAAW,CAAC,uBAAuB,CAAC,EAAE,CAAC,CAAC;IACtD,CAAC;IAEO,8BAA8B,CAAC,MAAyC;QAC9E,MAAM,MAAM,GAAoC,EAAE,CAAC;QACnD,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACrB,MAAM,SAAS,GAAG,KAAK,CAAC,kBAAkB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACzD,MAAM,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC,eAAe,CAAC;QAC5C,CAAC,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,SAAS,CAAC,MAAqC;QACrD,OAAO,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE;YACjD,OAAO;gBACL,mBAAmB,EAAE,cAAc,CAAC,UAAU;aAC/C,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAES,cAAc,CAAC,QAAgB,EAAE,KAAa;QACtD,OAAO,GAAG,QAAQ,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IAC1E,CAAC;IAES,0BAA0B,CAClC,QAAgB,EAChB,KAAa,EACb,OAAe,EACf,MAAsC;QAEtC,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,GAAG,MAAM,CAAC;QAC/C,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,OAAO,IAAI,cAAc,EAAE,CAAC;IAClH,CAAC;CACF;AAjED,wDAiEC"}
@@ -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
- }