@bytebrand/export-cars 1.5.1 → 1.6.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 (169) hide show
  1. package/api_export_cars_fb.xml +1108 -0
  2. package/dist/config/alleskralle.config.js +3 -5
  3. package/dist/config/alleskralle.config.js.map +1 -1
  4. package/dist/config/as24.config.js +3 -1
  5. package/dist/config/as24.config.js.map +1 -1
  6. package/dist/config/auto24.config.js +3 -3
  7. package/dist/config/auto24.config.js.map +1 -1
  8. package/dist/config/autoboerse.config.js +5 -5
  9. package/dist/config/autoboerse.config.js.map +1 -1
  10. package/dist/config/autouncle.config.js +3 -2
  11. package/dist/config/autouncle.config.js.map +1 -1
  12. package/dist/config/by-owner.config.js +0 -1
  13. package/dist/config/by-owner.config.js.map +1 -1
  14. package/dist/config/config.d.ts +8 -12
  15. package/dist/config/config.js +14 -20
  16. package/dist/config/config.js.map +1 -1
  17. package/dist/config/criteo.config.js +3 -1
  18. package/dist/config/criteo.config.js.map +1 -1
  19. package/dist/config/dasparking.config.js +2 -4
  20. package/dist/config/dasparking.config.js.map +1 -1
  21. package/dist/config/eauto.config.js +4 -3
  22. package/dist/config/eauto.config.js.map +1 -1
  23. package/dist/config/fb.config.js +2 -1
  24. package/dist/config/fb.config.js.map +1 -1
  25. package/dist/config/google.config.js +2 -1
  26. package/dist/config/google.config.js.map +1 -1
  27. package/dist/config/index.d.ts +16 -1
  28. package/dist/config/index.js +16 -1
  29. package/dist/config/index.js.map +1 -1
  30. package/dist/config/{kleinanzeigeFocus.config.js → kleinanzeigefocus.config.js} +2 -3
  31. package/dist/config/kleinanzeigefocus.config.js.map +1 -0
  32. package/dist/config/marktde.config.js +4 -3
  33. package/dist/config/marktde.config.js.map +1 -1
  34. package/dist/config/meinstadt.config.js +2 -3
  35. package/dist/config/meinstadt.config.js.map +1 -1
  36. package/dist/config/ooyyo.config.js +2 -3
  37. package/dist/config/ooyyo.config.js.map +1 -1
  38. package/dist/config/yescar.config.js +4 -3
  39. package/dist/config/yescar.config.js.map +1 -1
  40. package/dist/enums/export-type.enum.d.ts +0 -1
  41. package/dist/enums/export-type.enum.js +0 -1
  42. package/dist/enums/export-type.enum.js.map +1 -1
  43. package/dist/enums/file-types.enum.d.ts +7 -7
  44. package/dist/enums/file-types.enum.js +11 -10
  45. package/dist/enums/file-types.enum.js.map +1 -1
  46. package/dist/export.schema.d.ts +4 -33
  47. package/dist/export.schema.js +32 -61
  48. package/dist/export.schema.js.map +1 -1
  49. package/dist/exporters/as24.exporter.d.ts +3 -5
  50. package/dist/exporters/as24.exporter.js +20 -22
  51. package/dist/exporters/as24.exporter.js.map +1 -1
  52. package/dist/exporters/auto24.exporter.d.ts +1 -1
  53. package/dist/exporters/auto24.exporter.js +8 -17
  54. package/dist/exporters/auto24.exporter.js.map +1 -1
  55. package/dist/exporters/autouncle.exporter.d.ts +3 -5
  56. package/dist/exporters/autouncle.exporter.js +19 -35
  57. package/dist/exporters/autouncle.exporter.js.map +1 -1
  58. package/dist/exporters/by-owner.exporter.d.ts +2 -3
  59. package/dist/exporters/by-owner.exporter.js +4 -7
  60. package/dist/exporters/by-owner.exporter.js.map +1 -1
  61. package/dist/exporters/fb.exporter.d.ts +2 -3
  62. package/dist/exporters/fb.exporter.js +10 -16
  63. package/dist/exporters/fb.exporter.js.map +1 -1
  64. package/dist/exporters/google.exporter.d.ts +3 -4
  65. package/dist/exporters/google.exporter.js +13 -19
  66. package/dist/exporters/google.exporter.js.map +1 -1
  67. package/dist/exporters/index.d.ts +10 -1
  68. package/dist/exporters/index.js +10 -1
  69. package/dist/exporters/index.js.map +1 -1
  70. package/dist/exporters/meinstadt.exporter.d.ts +1 -1
  71. package/dist/exporters/meinstadt.exporter.js +18 -34
  72. package/dist/exporters/meinstadt.exporter.js.map +1 -1
  73. package/dist/exporters/mobile.exporter.d.ts +2 -5
  74. package/dist/exporters/mobile.exporter.js +14 -44
  75. package/dist/exporters/mobile.exporter.js.map +1 -1
  76. package/dist/exporters/modix.exporter.d.ts +2 -2
  77. package/dist/exporters/modix.exporter.js +7 -11
  78. package/dist/exporters/modix.exporter.js.map +1 -1
  79. package/dist/exporters/ooyyo.exporter.js +6 -9
  80. package/dist/exporters/ooyyo.exporter.js.map +1 -1
  81. package/dist/exporters/rubrikk.exporter.js +8 -14
  82. package/dist/exporters/rubrikk.exporter.js.map +1 -1
  83. package/dist/main.js +1 -1
  84. package/dist/main.js.map +1 -1
  85. package/dist/services/car.service.js +2 -5
  86. package/dist/services/car.service.js.map +1 -1
  87. package/dist/services/marketing-images.service.js.map +1 -1
  88. package/dist/services/user.service.d.ts +0 -2
  89. package/dist/services/user.service.js +0 -3
  90. package/dist/services/user.service.js.map +1 -1
  91. package/dist/transformers/as24.transformer.d.ts +4 -2
  92. package/dist/transformers/as24.transformer.js +25 -3
  93. package/dist/transformers/as24.transformer.js.map +1 -1
  94. package/dist/transformers/auto24.transfomer.js +1 -1
  95. package/dist/transformers/auto24.transfomer.js.map +1 -1
  96. package/dist/transformers/autouncle.transformer.js +1 -1
  97. package/dist/transformers/autouncle.transformer.js.map +1 -1
  98. package/dist/transformers/fb.transformer.d.ts +4 -3
  99. package/dist/transformers/fb.transformer.js +10 -6
  100. package/dist/transformers/fb.transformer.js.map +1 -1
  101. package/dist/transformers/google.transformer.js +3 -3
  102. package/dist/transformers/google.transformer.js.map +1 -1
  103. package/dist/transformers/meinstadt.transformer.js +1 -1
  104. package/dist/transformers/meinstadt.transformer.js.map +1 -1
  105. package/dist/transformers/mobile.transformer.js +1 -1
  106. package/dist/transformers/mobile.transformer.js.map +1 -1
  107. package/dist/transformers/modix.transformer.d.ts +1 -3
  108. package/dist/transformers/modix.transformer.js +4 -12
  109. package/dist/transformers/modix.transformer.js.map +1 -1
  110. package/dist/transformers/ooyyo.transformer.js +2 -2
  111. package/dist/transformers/ooyyo.transformer.js.map +1 -1
  112. package/dist/transformers/rubrikk.transformer.js +1 -1
  113. package/dist/transformers/rubrikk.transformer.js.map +1 -1
  114. package/dist/tsconfig.build.tsbuildinfo +1 -1
  115. package/package.json +11 -11
  116. package/src/config/alleskralle.config.ts +4 -6
  117. package/src/config/as24.config.ts +3 -1
  118. package/src/config/auto24.config.ts +4 -4
  119. package/src/config/autoboerse.config.ts +5 -5
  120. package/src/config/autouncle.config.ts +3 -2
  121. package/src/config/by-owner.config.ts +0 -1
  122. package/src/config/config.ts +14 -21
  123. package/src/config/criteo.config.ts +3 -1
  124. package/src/config/dasparking.config.ts +3 -5
  125. package/src/config/eauto.config.ts +4 -3
  126. package/src/config/fb.config.ts +2 -1
  127. package/src/config/google.config.ts +2 -1
  128. package/src/config/index.ts +16 -1
  129. package/src/config/kleinanzeigeFocus.config.ts +2 -3
  130. package/src/config/marktde.config.ts +4 -3
  131. package/src/config/meinstadt.config.ts +3 -4
  132. package/src/config/ooyyo.config.ts +3 -4
  133. package/src/config/yescar.config.ts +7 -3
  134. package/src/enums/export-type.enum.ts +12 -1
  135. package/src/enums/file-types.enum.ts +8 -8
  136. package/src/export.schema.ts +35 -33
  137. package/src/exporters/as24.exporter.ts +27 -30
  138. package/src/exporters/auto24.exporter.ts +15 -23
  139. package/src/exporters/autouncle.exporter.ts +27 -38
  140. package/src/exporters/by-owner.exporter.ts +7 -5
  141. package/src/exporters/fb.exporter.ts +11 -13
  142. package/src/exporters/google.exporter.ts +16 -17
  143. package/src/exporters/index.ts +10 -1
  144. package/src/exporters/meinstadt.exporter.ts +24 -41
  145. package/src/exporters/mobile.exporter.ts +21 -63
  146. package/src/exporters/modix.exporter.ts +15 -14
  147. package/src/exporters/ooyyo.exporter.ts +10 -11
  148. package/src/exporters/rubrikk.exporter.ts +11 -16
  149. package/src/main.ts +1 -1
  150. package/src/services/car.service.ts +4 -6
  151. package/src/services/marketing-images.service.ts +4 -1
  152. package/src/services/user.service.ts +1 -5
  153. package/src/transformers/as24.transformer.ts +29 -5
  154. package/src/transformers/auto24.transfomer.ts +1 -1
  155. package/src/transformers/autouncle.transformer.ts +1 -1
  156. package/src/transformers/fb.transformer.ts +9 -3
  157. package/src/transformers/google.transformer.ts +3 -3
  158. package/src/transformers/meinstadt.transformer.ts +1 -1
  159. package/src/transformers/mobile.transformer.ts +1 -1
  160. package/src/transformers/modix.transformer.ts +8 -17
  161. package/src/transformers/ooyyo.transformer.ts +2 -2
  162. package/src/transformers/rubrikk.transformer.ts +1 -1
  163. package/tsconfig.json +1 -1
  164. package/dist/config/autoborse.config.d.ts +0 -5
  165. package/dist/config/autoborse.config.js +0 -15
  166. package/dist/config/autoborse.config.js.map +0 -1
  167. package/dist/config/kleinanzeigeFocus.config.js.map +0 -1
  168. package/src/config/autoborse.config.ts +0 -12
  169. /package/dist/config/{kleinanzeigeFocus.config.d.ts → kleinanzeigefocus.config.d.ts} +0 -0
@@ -1,12 +1,14 @@
1
1
  import { Injectable } from '@nestjs/common';
2
- import { Exporter } from '../interfaces/exporter.interface';
3
- import { CarService, ConfigService, LoaderService } from '../services';
4
2
  import { ModuleRef } from '@nestjs/core';
3
+
5
4
  import { CronicleUtils } from '@bytebrand/cronicle-helper';
6
- import { ModixXmlBuilder } from '../formats';
7
- import { ModixTransformer } from '../transformers';
8
5
  import { FsChunkInterface } from '@bytebrand/chunkable';
9
6
 
7
+ import { CarService, ConfigService, LoaderService } from '../services';
8
+ import { Exporter } from '../interfaces/exporter.interface';
9
+ import { ModixTransformer } from '../transformers';
10
+ import { ModixXmlBuilder } from '../formats';
11
+
10
12
  @Injectable()
11
13
  export class ModixExporter implements Exporter {
12
14
  constructor(
@@ -16,30 +18,29 @@ export class ModixExporter implements Exporter {
16
18
  private moduleRef: ModuleRef,
17
19
  ) {}
18
20
  async export(): Promise<void> {
19
- for (const file of this.configService.config.outputFiles) {
20
- const exists = await CronicleUtils.exists(file);
21
- exists && (await CronicleUtils.unlink(file));
22
- }
23
-
24
21
  const [fileXml] = this.configService.config.outputFiles;
22
+ await CronicleUtils.unlinkIfExists(fileXml);
25
23
 
26
24
  const modixXmlBuilder = new ModixXmlBuilder(fileXml);
25
+ await modixXmlBuilder.buildStart();
26
+
27
27
  const modixTransformer = await this.moduleRef.create(ModixTransformer);
28
28
 
29
- await modixXmlBuilder.buildStart();
30
29
  await this.loaderService.process(async (chunk: FsChunkInterface) => {
31
30
  if (chunk && chunk.data) {
32
31
  for (let i = 0; i < chunk.data.length; i += 1) {
33
32
  const data = chunk.data[i];
34
- const { car, images } = data;
35
33
 
36
- const transformed_car = await modixTransformer.transform({ car, images });
34
+ const transformed_car = await modixTransformer.transform(data);
37
35
  await modixXmlBuilder.addItem(transformed_car);
38
- this.carService.counter.countCar(images);
36
+
37
+ this.carService.counter.countCar(data.images);
39
38
  }
40
- chunk.data = null;
39
+
41
40
  }
42
41
  });
42
+
43
43
  await modixXmlBuilder.buildEnd();
44
+ console.log(this.carService.counter.getCountedCars())
44
45
  }
45
46
  }
@@ -16,20 +16,17 @@ export class OoyyoExporter implements Exporter {
16
16
  private loaderService: LoaderService,
17
17
  private moduleRef: ModuleRef,
18
18
  private rulesService: RulesService,
19
- ) {}
19
+ ) { }
20
20
 
21
21
  async export(): Promise<void> {
22
- for (const file of this.configService.config.outputFiles) {
23
- const exists = await CronicleUtils.exists(file);
24
- exists && (await CronicleUtils.unlink(file));
25
- }
22
+ const [fileXml, fileGZ] = this.configService.config.outputFiles;
23
+ await Promise.all([CronicleUtils.unlinkIfExists(fileXml), CronicleUtils.unlinkIfExists(fileGZ)]);
24
+
25
+ const ooyyoXmlBuilder = new OoyyoXmlBuilder(fileXml);
26
+ await ooyyoXmlBuilder.buildStart();
26
27
 
27
- const [fileCarXml, fileGZ] = this.configService.config.outputFiles;
28
- const ooyyoXmlBuilder = new OoyyoXmlBuilder(fileCarXml);
29
28
  const ooyyoTransformer = await this.moduleRef.create(OoyyoTransformer);
30
29
 
31
- await ooyyoXmlBuilder.buildStart();
32
-
33
30
  await this.loaderService.process(async (chunk: FsChunkInterface) => {
34
31
  const chunkData = chunk.data.filter(car => this.carService.filterCar(car, this.rulesService.rules));
35
32
 
@@ -38,14 +35,16 @@ export class OoyyoExporter implements Exporter {
38
35
  const data = chunk.data[i];
39
36
  const { car, images } = data;
40
37
  await ooyyoXmlBuilder.addItem(ooyyoTransformer.transform(car, images));
38
+
41
39
  this.carService.counter.countCar(images);
42
40
  }
43
- chunk.data = null;
41
+
44
42
  }
45
43
  });
46
44
 
47
45
  await ooyyoXmlBuilder.buildEnd();
46
+ console.log(this.carService.counter.getCountedCars());
48
47
 
49
- await Zipper.tar({ dest: fileGZ, fileList: [fileCarXml] });
48
+ await Zipper.tar({ dest: fileGZ, fileList: [fileXml] });
50
49
  }
51
50
  }
@@ -1,12 +1,12 @@
1
1
  import { Injectable } from '@nestjs/common';
2
2
  import { ModuleRef } from '@nestjs/core';
3
3
 
4
+ import { CronicleUtils } from '@bytebrand/cronicle-helper';
4
5
  import { FsChunkInterface } from '@bytebrand/chunkable';
5
6
  import { Zipper } from '@bytebrand/zipper';
6
7
 
7
8
  import { CarService, ConfigService, LoaderService, RulesService } from '../services';
8
9
  import { Exporter } from '../interfaces/exporter.interface';
9
- import { CronicleUtils } from '@bytebrand/cronicle-helper';
10
10
  import { RubrikkTransformer } from '../transformers';
11
11
  import { RubrikkXmlBuilder } from '../formats';
12
12
 
@@ -18,40 +18,35 @@ export class RubrikkExporter implements Exporter {
18
18
  private loaderService: LoaderService,
19
19
  private moduleRef: ModuleRef,
20
20
  private rulesService: RulesService,
21
- ) {}
21
+ ) { }
22
22
 
23
23
  async export(): Promise<void> {
24
- for (const file of this.configService.config.outputFiles) {
25
- const exists = await CronicleUtils.exists(file);
26
- exists && (await CronicleUtils.unlink(file));
27
- }
28
-
29
24
  const [fileXml, fileGZ] = this.configService.config.outputFiles;
25
+ await Promise.all([CronicleUtils.unlinkIfExists(fileXml), CronicleUtils.unlinkIfExists(fileGZ)]);
30
26
 
31
27
  const rubrikkXmlBuilder = new RubrikkXmlBuilder(fileXml);
28
+ await rubrikkXmlBuilder.buildStart();
29
+
32
30
  const rubrikkTransformer = await this.moduleRef.create(RubrikkTransformer);
33
31
 
34
- await rubrikkXmlBuilder.buildStart();
35
32
  await this.loaderService.process(async (chunk: FsChunkInterface) => {
36
33
  const chunkData = chunk.data.filter(car => this.carService.filterCar(car, this.rulesService.rules));
37
34
 
38
35
  if (chunk && chunkData) {
39
36
  for (let i = 0; i < chunk.data.length; i += 1) {
40
37
  const data = chunk.data[i];
41
- const { car, images } = data;
42
38
 
43
- const transformed_car = await rubrikkTransformer.transform({ car, images });
39
+ const transformedCar = await rubrikkTransformer.transform(data);
44
40
 
45
- await rubrikkXmlBuilder.addItem(transformed_car);
46
- this.carService.counter.countCar(images);
41
+ await rubrikkXmlBuilder.addItem(transformedCar);
42
+ this.carService.counter.countCar(data.images);
47
43
  }
48
- chunk.data = null;
49
44
  }
50
45
  });
46
+
51
47
  await rubrikkXmlBuilder.buildEnd();
52
48
 
53
- if (fileGZ) {
54
- await Zipper.tar({ dest: fileGZ, fileList: [fileXml] });
55
- }
49
+ fileGZ && await Zipper.tar({ dest: fileGZ, fileList: [fileXml] });
50
+ console.log(this.carService.counter.getCountedCars());
56
51
  }
57
52
  }
package/src/main.ts CHANGED
@@ -4,7 +4,7 @@ import { AppModule } from './app.module';
4
4
 
5
5
  async function bootstrap() {
6
6
  try {
7
- await CommandFactory.run(AppModule, console);
7
+ await CommandFactory.run(AppModule, false);
8
8
  LoggerService.complete();
9
9
  } catch (e) {
10
10
  LoggerService.exitError(e.message || e);
@@ -16,7 +16,7 @@ export class CarService {
16
16
  @Inject(CACHE_MANAGER) private cacheManager: Cache,
17
17
  private bottleneck: Bottleneck,
18
18
  private requestService: RequestService,
19
- ) {}
19
+ ) { }
20
20
 
21
21
  private _counter: CarsCounter;
22
22
 
@@ -31,6 +31,7 @@ export class CarService {
31
31
  return rules.every(e => e.applyRule(car));
32
32
  }
33
33
 
34
+ // deprecated
34
35
  isCarNew({ car }: { car: DataSchemes.Car }): boolean {
35
36
  if (car.mainData.mileage) return car.mainData.mileage <= 100;
36
37
  else return getMonthsDiff(new Date((car.mainData.firstRegistration as number) * 1000), new Date()) <= 12;
@@ -42,11 +43,8 @@ export class CarService {
42
43
  try {
43
44
  owner = await this.bottleneck.schedule(() => this.requestService.upaRequest.getDealerProfile(ownerId));
44
45
  } catch (e) {
45
- console.log(e);
46
- if (e.statusCode !== HttpStatus.NOT_FOUND) {
47
- throw e;
48
- }
49
- owner = null;
46
+ console.log(e.message);
47
+ throw e;
50
48
  } finally {
51
49
  await this.cacheManager.set(ownerId, owner);
52
50
  }
@@ -3,7 +3,10 @@ import { ConfigService } from './config.service';
3
3
  import { UserService } from './user.service';
4
4
 
5
5
  export class MarketingImagesService {
6
- constructor(private readonly configService: ConfigService, private readonly userService: UserService) {}
6
+ constructor(
7
+ private readonly configService: ConfigService,
8
+ private readonly userService: UserService
9
+ ) {}
7
10
 
8
11
  async getImagesUrl(images: any, imageUrl: string, carId: string): Promise<{ url: string }[]> {
9
12
  const transformedImages = this.transformImagesArrayIntoObject(images);
@@ -3,7 +3,7 @@ import { RequestService } from './request.service';
3
3
  import { Cache } from 'cache-manager';
4
4
  import { get } from 'lodash';
5
5
  import { MarketingImageConfigInterface, MarketingImageConfigsInterface } from '@bytebrand/autode-request';
6
- import { ExportType, FileTypes } from '../enums';
6
+ import { ExportType, FileType } from '../enums';
7
7
 
8
8
  @Injectable()
9
9
  export class UserService {
@@ -50,8 +50,4 @@ export class UserService {
50
50
 
51
51
  return result;
52
52
  }
53
-
54
- getFileName(exportType: ExportType, fileType: FileTypes): string {
55
- return `api_export_cars_${exportType}.${fileType}`;
56
- }
57
53
  }
@@ -1,4 +1,4 @@
1
- import { get, isEmpty, isNil, set, upperFirst } from 'lodash';
1
+ import { get, isEmpty, isNil, set, toNumber, toSafeInteger, upperFirst } from 'lodash';
2
2
  import { DataSchemes } from '@bytebrand/car-schema';
3
3
  import { CarDescriptionFactory, DescriptionTypeEnum } from '@bytebrand/car-description';
4
4
  import { MappingService } from '../services/mapping.service';
@@ -10,13 +10,10 @@ import { UserService } from '../services';
10
10
  @Injectable()
11
11
  export class As24Transformer {
12
12
  private currentCar: DataSchemes.Car;
13
- private descriptionSchemas: unknown;
14
-
15
13
  constructor(private mappingService: MappingService, private readonly userService: UserService) {}
16
14
 
17
- async transform(carData: DataSchemes.Car, descriptionSchemas: unknown): Promise<unknown> {
15
+ async transform(carData: DataSchemes.Car): Promise<unknown> {
18
16
  this.currentCar = carData;
19
- this.descriptionSchemas = descriptionSchemas;
20
17
  const transformedCarData = {};
21
18
  const rules = await this.mappingService.getRules();
22
19
  for (const rule of rules) {
@@ -97,12 +94,39 @@ export class As24Transformer {
97
94
  case 'selectorToCategoryOrClass_selector': {
98
95
  return this.selectorToCategoryOrClass_selector(fieldValue, rule);
99
96
  }
97
+ case 'numberToNumber': {
98
+ return this.numberToNumber(fieldValue).toString();
99
+ }
100
+ case 'numberToInteger': {
101
+ return this.numberToInteger(fieldValue).toString();
102
+ }
103
+ case 'integerToNumber': {
104
+ return this.numberToNumber(fieldValue).toString();
105
+ }
106
+ case 'stringToInteger': {
107
+ return this.stringToInteger(fieldValue).toString();
108
+ }
100
109
  default:
101
110
  LoggerService.log(`missing transform: ${transformProcedureName}`);
102
111
  break;
103
112
  }
104
113
  }
105
114
 
115
+ protected numberToNumber(field: number): number {
116
+ const result = isNil(field) ? null : toNumber(field);
117
+ return (result < 0 || isNaN(result)) ? undefined : result;
118
+ }
119
+
120
+ protected numberToInteger(field: number): number {
121
+ const result = isNil(field) ? null : toSafeInteger(field);
122
+ return result < 0 ? null : result;
123
+ }
124
+
125
+ protected stringToInteger(field: string): number {
126
+ const result = isEmpty(field) ? null : toSafeInteger(field);
127
+ return result < 0 ? null : result;
128
+ }
129
+
106
130
  private async customTransformers(rule: MappingRules, car: DataSchemes.Car): Promise<any> {
107
131
  switch (rule.autodeField) {
108
132
  case 'price.vatDeductible': {
@@ -20,7 +20,7 @@ export class Auto24Transformer {
20
20
  transform(car: DataSchemes.Car, imboImages: ImboImageResponseInterface[]): Auto24XmlItem {
21
21
  const carId = toString(get(car, '_id', ''));
22
22
 
23
- let userlink = `https://www.${this.configService.config.url}/search/vehicle/${carId}`;
23
+ let userlink = `https://www.${this.configService.config.domain}/search/vehicle/${carId}`;
24
24
  if (this.configService.config.campaign) {
25
25
  userlink += `?source=classifieds&medium=listing&campaign=${this.configService.config.campaign}`;
26
26
  }
@@ -36,7 +36,7 @@ export class AutouncleTransformer {
36
36
  const address = await this.getAddress(car, owner);
37
37
 
38
38
  return {
39
- back_link: `https://www.${this.configService.config.url}/search/vehicle/${autodeId}?source=classifieds&medium=cpc&campaign=autouncle`,
39
+ back_link: `https://www.${this.configService.config.domain}/search/vehicle/${autodeId}?source=classifieds&medium=cpc&campaign=autouncle`,
40
40
  make: toString(get(car, 'mainData.make', '')),
41
41
  model_name: toString(get(car, 'mainData.model', '')),
42
42
  model_variant: toString(get(car, 'mainData.subModel', '')),
@@ -36,13 +36,19 @@ import {
36
36
  FB_MIN_MILEAGES,
37
37
  TIMESTAMP_FIRST_YEAR,
38
38
  } from '../constants/fb.constants';
39
+ import { UserService } from 'src/services';
39
40
 
40
41
  @Injectable()
41
42
  export class FbTransformer {
42
43
  private translator: TranslatorExtended;
43
44
  private postalCodesService: DePostalCodesService;
45
+ private marketingImages: MarketingImagesService;
44
46
 
45
- constructor(private readonly configService: ConfigService, private readonly marketingImages: MarketingImagesService) {
47
+ constructor(
48
+ private readonly configService: ConfigService,
49
+ private readonly userService: UserService
50
+ ) {
51
+ this.marketingImages = new MarketingImagesService(configService, userService);
46
52
  const dict = { ...de, ...deVehicleProps, ...deVehicleDetailsPage };
47
53
  this.translator = new TranslatorExtended(dict);
48
54
  this.postalCodesService = DePostalCodesService.getInstance();
@@ -70,8 +76,8 @@ export class FbTransformer {
70
76
  title: this.getTitle(car),
71
77
  features: this.getHighlights(car),
72
78
  description: this.getDescription(car), // be careful it changes car object
73
- url: `https://www.${this.configService.config.url}/search/vehicle/${autodeId}`,
74
- dealer_url: `https://www.${this.configService.config.url}/search/vehicle/${autodeId}?source=FACEBOOK&medium=direkt&campaign=marketplace_link`,
79
+ url: `https://www.${this.configService.config.domain}/search/vehicle/${autodeId}`,
80
+ dealer_url: `https://www.${this.configService.config.domain}/search/vehicle/${autodeId}?source=FACEBOOK&medium=direkt&campaign=marketplace_link`,
75
81
  make: toString(get(car, 'mainData.make', '')),
76
82
  model: toString(get(car, 'mainData.model', '')),
77
83
  trim: this.getTrim(car),
@@ -72,9 +72,9 @@ export class GoogleTransformer {
72
72
  private getLink(car: DataSchemes.Car): string {
73
73
  const autodeId = get(car, '_id', '');
74
74
  if (this.configService.config.isCriteo) {
75
- return `https://www.${this.configService.config.url}/search/vehicle/${autodeId}?source=criteo&medium=cpc&campaign=retargeting`;
75
+ return `https://www.${this.configService.config.domain}/search/vehicle/${autodeId}?source=criteo&medium=cpc&campaign=retargeting`;
76
76
  }
77
- return `https://www.${this.configService.config.url}/search/vehicle/${autodeId}`;
77
+ return `https://www.${this.configService.config.domain}/search/vehicle/${autodeId}`;
78
78
  }
79
79
 
80
80
  private getRetailPrice(car: DataSchemes.Car): string {
@@ -101,7 +101,7 @@ export class GoogleTransformer {
101
101
  private async buildLargeImageUrl(carId: string, imageId: string): Promise<string> {
102
102
  if (this.configService.config.isCriteo) {
103
103
  try {
104
- const criteoConfig = await this.userService.getMarketingImageConfig(this.configService.config.criteoId);
104
+ const criteoConfig = await this.userService.getMarketingImageConfig(this.configService.config.criteoMarketingImagesConfigId);
105
105
  return imageId
106
106
  ? `${this.configService.config.imageUrl}/generated_images/${[carId[0], carId[1], carId[2], carId].join(
107
107
  '/',
@@ -21,7 +21,7 @@ export class MeinstadtTransformer {
21
21
  make: get(car, 'mainData.make', null),
22
22
  model: get(car, 'mainData.model', null),
23
23
  cpc: get(this.configService.config, 'cpc', '0.08'),
24
- listingUrl: `https://www.${this.configService.config.url}/search/vehicle/${autodeId}?source=classifieds&medium=listing&campaign=meinestadt`,
24
+ listingUrl: `https://www.${this.configService.config.domain}/search/vehicle/${autodeId}?source=classifieds&medium=listing&campaign=meinestadt`,
25
25
  title: this.getTitle(car),
26
26
  accidentFree: get(car, 'mainData.accidentDamaged', null),
27
27
  mileage: get(car, 'mainData.mileage', null),
@@ -344,7 +344,7 @@ export class MobileTransformer {
344
344
  }
345
345
 
346
346
  private getAutodeUrl(car: DataSchemes.Car): string {
347
- return `${this.configService.config.url}${car._id}?source=classifieds&medium=listing&campaign=${this.configService.config.campaign}`;
347
+ return `https://www.${this.configService.config.domain}${car._id}?source=classifieds&medium=listing&campaign=${this.configService.config.campaign}`;
348
348
  }
349
349
 
350
350
  private getImages(car: DataSchemes.Car, images: unknown[]): string | null {
@@ -1,15 +1,12 @@
1
1
  import { findLast, get, toNumber, toSafeInteger, toString } from 'lodash';
2
- import { Injectable } from '@nestjs/common';
3
2
  import * as moment from 'moment/moment';
4
3
 
5
- import { de, deVehicleDetailsPage, deVehicleProps } from '@bytebrand/i18n-dictionaries';
4
+ import { Injectable } from '@nestjs/common';
5
+
6
6
  import { toLowercase } from '@bytebrand/schema-tools/dist/transform/utils';
7
- import { DePostalCodesService } from '@bytebrand/car-basic-data-scope';
8
7
  import { ImboImageResponseInterface } from '@bytebrand/chunkable';
9
- import { TranslatorExtended } from '@bytebrand/schema-tools';
10
8
  import { DataSchemes } from '@bytebrand/car-schema';
11
9
 
12
- import { imageItem, IModixWrapItem, ModixXmlItem } from '../interfaces';
13
10
 
14
11
  import {
15
12
  BodyColorList,
@@ -20,28 +17,22 @@ import {
20
17
  UsageConditionList,
21
18
  UsageTypeList,
22
19
  } from '../constants';
23
- import { CategoryList } from '../constants/modix/category.constant';
20
+ import { imageItem, IModixWrapItem, ModixXmlItem } from '../interfaces';
24
21
  import { isNotEmptyArray, isValidVin } from '../utils/validator.utils';
22
+ import { CategoryList } from '../constants/modix/category.constant';
25
23
  import { ConfigService } from '../services/config.service';
26
24
 
27
25
  @Injectable()
28
26
  export class ModixTransformer {
29
- private translator: TranslatorExtended;
30
- private postalCodesService: DePostalCodesService;
31
-
32
- constructor(private readonly configService: ConfigService) {
33
- const dict = { ...de, ...deVehicleProps, ...deVehicleDetailsPage };
34
- this.postalCodesService = DePostalCodesService.getInstance();
35
- this.translator = new TranslatorExtended(dict);
36
- }
27
+ constructor(private readonly configService: ConfigService) { }
37
28
 
38
- async transform({
29
+ transform({
39
30
  car,
40
31
  images,
41
32
  }: {
42
33
  car: DataSchemes.Car;
43
34
  images: ImboImageResponseInterface[];
44
- }): Promise<ModixXmlItem> {
35
+ }): ModixXmlItem {
45
36
  return {
46
37
  //Main data
47
38
  maindata: {
@@ -204,7 +195,7 @@ export class ModixTransformer {
204
195
 
205
196
  private getImagesLinks(car: DataSchemes.Car, images: ImboImageResponseInterface[]): imageItem {
206
197
  const car_id = toString(get(car, '_id', ''));
207
- const url = `https://${this.configService.config.url}/carimage/${car_id}`;
198
+ const url = `https://${this.configService.config.imageUrl}/carimage/${car_id}`;
208
199
 
209
200
  const imageList: IModixWrapItem[] = [];
210
201
 
@@ -30,7 +30,7 @@ export class OoyyoTransformer {
30
30
  }
31
31
 
32
32
  return {
33
- url: `https://www.${this.configService.config.url}/search/vehicle/${autodeid}?source=classifieds&medium=listing&campaign=ooyyo`,
33
+ url: `https://www.${this.configService.config.domain}/search/vehicle/${autodeid}?source=classifieds&medium=listing&campaign=ooyyo`,
34
34
  title: this.getTitle(car),
35
35
  content: trim(toString(get(car, 'offer.offerDescription', ''))),
36
36
  price: toString(get(car, 'price.currentSalesPrice', '')),
@@ -118,6 +118,6 @@ export class OoyyoTransformer {
118
118
  }
119
119
 
120
120
  private buildLargeImageUrl(carId: string, imageId: string): string {
121
- return `${this.configService.config.url}/carimage/${carId}/${imageId}/large`;
121
+ return `${this.configService.config.imageUrl}/carimage/${carId}/${imageId}/large`;
122
122
  }
123
123
  }
@@ -125,7 +125,7 @@ export class RubrikkTransformer {
125
125
 
126
126
  private getCarLink(car: DataSchemes.Car): string {
127
127
  const autodeId = toString(get(car, '_id', ''));
128
- return `https://${this.configService.config.url}/search/vehicle/${autodeId}?source=classifieds&medium=listing&campaign=focus`;
128
+ return `https://${this.configService.config.imageUrl}/search/vehicle/${autodeId}?source=classifieds&medium=listing&campaign=focus`;
129
129
  }
130
130
 
131
131
  private getImageLink(car: DataSchemes.Car): string {
package/tsconfig.json CHANGED
@@ -24,5 +24,5 @@
24
24
  "include": [
25
25
  "src/**/*.ts",
26
26
  "test/**/*.ts"
27
- ]
27
+ , "src/config/autoboerse.config.tsdep" ]
28
28
  }
@@ -1,5 +0,0 @@
1
- import { Params } from '../interfaces/params.interface';
2
- import { Config } from './config';
3
- export declare class AutoborseConfig extends Config {
4
- constructor(params: Params);
5
- }
@@ -1,15 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AutoborseConfig = void 0;
4
- const config_1 = require("./config");
5
- class AutoborseConfig extends config_1.Config {
6
- constructor(params) {
7
- super(params);
8
- this.pathesConfig.localConvertedDirectory = this.environmentConfig[params.environment].localConvertedDirectory;
9
- this.pathesConfig.remoteDirectory = this.environmentConfig[params.environment].remoteDirectory;
10
- this.imageUrl = this.environmentConfig[params.environment].imageUrl;
11
- this.outputFiles = ['api_export_cars_AUTBORSE.xml'];
12
- }
13
- }
14
- exports.AutoborseConfig = AutoborseConfig;
15
- //# sourceMappingURL=autoborse.config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"autoborse.config.js","sourceRoot":"","sources":["../../src/config/autoborse.config.ts"],"names":[],"mappings":";;;AACA,qCAAkC;AAElC,MAAa,eAAgB,SAAQ,eAAM;IACzC,YAAY,MAAc;QACxB,KAAK,CAAC,MAAM,CAAC,CAAC;QACd,IAAI,CAAC,YAAY,CAAC,uBAAuB,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,uBAAuB,CAAC;QAC/G,IAAI,CAAC,YAAY,CAAC,eAAe,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,eAAe,CAAC;QAC/F,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC;QACpE,IAAI,CAAC,WAAW,GAAG,CAAC,8BAA8B,CAAC,CAAC;IACtD,CAAC;CACF;AARD,0CAQC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"kleinanzeigeFocus.config.js","sourceRoot":"","sources":["../../src/config/kleinanzeigeFocus.config.ts"],"names":[],"mappings":";;;AACA,qCAAkC;AAClC,oCAAiD;AAEjD,MAAa,uBAAwB,SAAQ,eAAM;IACjD,YAAY,MAAc;QACxB,KAAK,CAAC,MAAM,CAAC,CAAC;QACd,IAAI,CAAC,YAAY,CAAC,uBAAuB,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,uBAAuB,CAAC;QAC/G,IAAI,CAAC,YAAY,CAAC,eAAe,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,eAAe,CAAC;QAC/F,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,YAAY,CAAC;QACxE,IAAI,CAAC,WAAW,GAAG,CAAC,mBAAmB,kBAAU,CAAC,kBAAkB,IAAI,iBAAS,CAAC,GAAG,EAAE,CAAC,CAAC;IAC3F,CAAC;CACF;AARD,0DAQC"}
@@ -1,12 +0,0 @@
1
- import { Params } from '../interfaces/params.interface';
2
- import { Config } from './config';
3
-
4
- export class AutoborseConfig extends Config {
5
- constructor(params: Params) {
6
- super(params);
7
- this.pathesConfig.localConvertedDirectory = this.environmentConfig[params.environment].localConvertedDirectory;
8
- this.pathesConfig.remoteDirectory = this.environmentConfig[params.environment].remoteDirectory;
9
- this.imageUrl = this.environmentConfig[params.environment].imageUrl;
10
- this.outputFiles = ['api_export_cars_AUTBORSE.xml'];
11
- }
12
- }