@bytebrand/export-cars 1.21.6 → 1.21.8

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 (160) hide show
  1. package/.editorconfig +8 -8
  2. package/.eslintignore +1 -1
  3. package/.eslintrc.js +24 -24
  4. package/.prettierrc.js +7 -7
  5. package/README.md +65 -65
  6. package/dist/configs/index.d.ts +1 -0
  7. package/dist/configs/index.js +1 -0
  8. package/dist/configs/index.js.map +1 -1
  9. package/dist/configs/santander.config.d.ts +5 -0
  10. package/dist/configs/santander.config.js +18 -0
  11. package/dist/configs/santander.config.js.map +1 -0
  12. package/dist/enums/export-type.enum.d.ts +1 -0
  13. package/dist/enums/export-type.enum.js +1 -0
  14. package/dist/enums/export-type.enum.js.map +1 -1
  15. package/dist/export.command.js +1 -1
  16. package/dist/export.command.js.map +1 -1
  17. package/dist/export.schema.d.ts +6 -2
  18. package/dist/export.schema.js +4 -0
  19. package/dist/export.schema.js.map +1 -1
  20. package/dist/exporters/autouncle.exporter.js +5 -1
  21. package/dist/exporters/autouncle.exporter.js.map +1 -1
  22. package/dist/exporters/fb.exporter.js +7 -1
  23. package/dist/exporters/fb.exporter.js.map +1 -1
  24. package/dist/exporters/index.d.ts +1 -0
  25. package/dist/exporters/index.js +1 -0
  26. package/dist/exporters/index.js.map +1 -1
  27. package/dist/exporters/santander.exporter.d.ts +12 -0
  28. package/dist/exporters/santander.exporter.js +63 -0
  29. package/dist/exporters/santander.exporter.js.map +1 -0
  30. package/dist/formats/auto24-xml.builder.js +2 -2
  31. package/dist/formats/google-xml.builder.js +3 -3
  32. package/dist/formats/modix-xml.builder.js +2 -2
  33. package/dist/formats/ooyyo-xml.builder.js +1 -1
  34. package/dist/formats/santander-csv.builder.d.ts +6 -0
  35. package/dist/formats/santander-csv.builder.js +17 -0
  36. package/dist/formats/santander-csv.builder.js.map +1 -0
  37. package/dist/tsconfig.build.tsbuildinfo +1 -1
  38. package/nest-cli.json +5 -5
  39. package/package.json +61 -61
  40. package/src/app.module.ts +38 -38
  41. package/src/configs/alleskralle.config.ts +15 -15
  42. package/src/configs/as24.config.ts +13 -13
  43. package/src/configs/auto24.config.ts +15 -15
  44. package/src/configs/autoboerse.config.ts +16 -16
  45. package/src/configs/autouncle.config.ts +14 -14
  46. package/src/configs/awin.config.ts +15 -15
  47. package/src/configs/by-owner.config.ts +14 -14
  48. package/src/configs/config.ts +83 -83
  49. package/src/configs/criteo.config.ts +17 -17
  50. package/src/configs/dasparking.config.ts +15 -15
  51. package/src/configs/eauto.config.ts +15 -15
  52. package/src/configs/evium.config.ts +18 -18
  53. package/src/configs/facebook-shop.config.ts +16 -16
  54. package/src/configs/fb.config.ts +16 -16
  55. package/src/configs/google.config.ts +14 -14
  56. package/src/configs/index.ts +22 -21
  57. package/src/configs/kleinanzeigeFocus.config.ts +14 -14
  58. package/src/configs/marktde.config.ts +18 -18
  59. package/src/configs/meinstadt.config.ts +15 -15
  60. package/src/configs/mitula.config.ts +14 -14
  61. package/src/configs/ooyyo.config.ts +15 -15
  62. package/src/configs/santander.config.ts +15 -0
  63. package/src/configs/trovit.config.ts +14 -14
  64. package/src/configs/yescar.config.ts +17 -17
  65. package/src/constants/autouncle.contants.ts +4 -4
  66. package/src/constants/fb.constants.ts +7 -7
  67. package/src/constants/index.ts +1 -1
  68. package/src/constants/modix/body-color-name.constant.ts +20 -20
  69. package/src/constants/modix/category.constant.ts +14 -14
  70. package/src/constants/modix/fuel.constant.ts +14 -14
  71. package/src/constants/modix/index.ts +7 -7
  72. package/src/constants/modix/manufacturers.constant.ts +7498 -7498
  73. package/src/constants/modix/transmission.constant.ts +8 -8
  74. package/src/constants/modix/usage-type.constant.ts +13 -13
  75. package/src/constants/modix/vehicle-class.constant.ts +17 -17
  76. package/src/enums/environment.enum.ts +5 -5
  77. package/src/enums/export-type.enum.ts +33 -32
  78. package/src/enums/file-types.enum.ts +8 -8
  79. package/src/enums/image-type.enum.ts +4 -4
  80. package/src/enums/index.ts +4 -4
  81. package/src/export.command.ts +37 -37
  82. package/src/export.schema.ts +134 -128
  83. package/src/exporters/as24.exporter.ts +69 -69
  84. package/src/exporters/auto24.exporter.ts +48 -48
  85. package/src/exporters/autouncle.exporter.ts +60 -58
  86. package/src/exporters/awin.exporter.ts +47 -47
  87. package/src/exporters/by-owner.exporter.ts +44 -44
  88. package/src/exporters/facebook-shop.exporter.ts +51 -51
  89. package/src/exporters/fb.exporter.ts +52 -50
  90. package/src/exporters/google.exporter.ts +45 -45
  91. package/src/exporters/index.ts +15 -14
  92. package/src/exporters/meinstadt.exporter.ts +55 -55
  93. package/src/exporters/mobile.exporter.ts +64 -64
  94. package/src/exporters/modix.exporter.ts +56 -56
  95. package/src/exporters/ooyyo.exporter.ts +48 -48
  96. package/src/exporters/rubrikk.exporter.ts +53 -53
  97. package/src/exporters/santander.exporter.ts +50 -0
  98. package/src/exporters/trovit.exporter.ts +51 -51
  99. package/src/formats/auto24-xml.builder.ts +54 -54
  100. package/src/formats/autouncle-json.builder.ts +20 -20
  101. package/src/formats/awin-csv.builder.ts +16 -16
  102. package/src/formats/facebook-shop.builder.ts +69 -69
  103. package/src/formats/fb-xml.builder.ts +71 -71
  104. package/src/formats/google-xml.builder.ts +35 -35
  105. package/src/formats/index.ts +5 -5
  106. package/src/formats/meinstadt-json.builder.ts +19 -19
  107. package/src/formats/modix-xml.builder.ts +180 -180
  108. package/src/formats/ooyyo-xml.builder.ts +48 -48
  109. package/src/formats/rubrikk-xml.builder.ts +27 -27
  110. package/src/formats/santander-csv.builder.ts +15 -0
  111. package/src/formats/trovit-xml.builder.ts +44 -44
  112. package/src/interfaces/atributes-wrap-item.intreface.ts +6 -6
  113. package/src/interfaces/dealers-mapping.interface.ts +7 -7
  114. package/src/interfaces/description.interface.ts +24 -24
  115. package/src/interfaces/export-item.interface.ts +366 -366
  116. package/src/interfaces/exporter.interface.ts +3 -3
  117. package/src/interfaces/index.ts +3 -3
  118. package/src/interfaces/input.interface.ts +6 -6
  119. package/src/interfaces/mapping-rules.interface.ts +11 -11
  120. package/src/interfaces/modix/index.ts +1 -1
  121. package/src/interfaces/modix/modix-item-list.interface.ts +5 -5
  122. package/src/interfaces/params.interface.ts +13 -13
  123. package/src/interfaces/rule-parser.interface.ts +3 -3
  124. package/src/main.ts +14 -14
  125. package/src/rules/abstract.rule.ts +37 -37
  126. package/src/rules/date.rule.ts +19 -19
  127. package/src/rules/number.rule.ts +15 -15
  128. package/src/rules/string.rule.ts +8 -8
  129. package/src/services/car.service.ts +49 -49
  130. package/src/services/config.service.ts +15 -15
  131. package/src/services/images.service.ts +207 -207
  132. package/src/services/index.ts +9 -9
  133. package/src/services/loader.service.ts +29 -29
  134. package/src/services/mapping.service.ts +91 -91
  135. package/src/services/request.service.ts +44 -44
  136. package/src/services/rules.service.ts +61 -61
  137. package/src/services/transformer.service.ts +129 -129
  138. package/src/services/user.service.ts +57 -57
  139. package/src/transformers/as24.transformer.ts +253 -253
  140. package/src/transformers/auto24.transfomer.ts +155 -155
  141. package/src/transformers/autouncle.transformer.ts +236 -236
  142. package/src/transformers/awin.transformer.ts +193 -193
  143. package/src/transformers/by-owner.transformer.ts +354 -354
  144. package/src/transformers/facebook-shop.transformer.ts +93 -93
  145. package/src/transformers/fb-description.transformer.ts +316 -316
  146. package/src/transformers/fb-equipment.transformer.ts +161 -161
  147. package/src/transformers/fb.transformer.ts +655 -655
  148. package/src/transformers/google.transformer.ts +169 -169
  149. package/src/transformers/index.ts +5 -5
  150. package/src/transformers/meinstadt.transformer.ts +92 -92
  151. package/src/transformers/mobile.transformer.ts +482 -482
  152. package/src/transformers/modix.transformer.ts +227 -227
  153. package/src/transformers/ooyyo.transformer.ts +109 -109
  154. package/src/transformers/rubrikk.transformer.ts +200 -200
  155. package/src/transformers/trovit.transformer.ts +63 -63
  156. package/src/utils/converter.utils.ts +15 -15
  157. package/src/utils/index.ts +2 -2
  158. package/src/utils/validator.utils.ts +7 -7
  159. package/tsconfig.build.json +4 -4
  160. package/tsconfig.json +29 -29
@@ -1,91 +1,91 @@
1
- import { Injectable } from '@nestjs/common';
2
- import { MappingRules } from '../interfaces/mapping-rules.interface';
3
- import { GoogleSpreadsheet, GoogleSpreadsheetRow } from 'google-spreadsheet';
4
- import { ConfigService } from './config.service';
5
- import { DealersMapping } from '../interfaces/dealers-mapping.interface';
6
-
7
- @Injectable()
8
- export class MappingService {
9
- constructor(private configService: ConfigService) {}
10
- private rules: MappingRules[];
11
- private dealers: any;
12
-
13
- async getRules(): Promise<MappingRules[]> {
14
- if (!this.rules) {
15
- const spreadsheet = new GoogleSpreadsheet(this.configService.config.mappingSpreadsheetId);
16
- spreadsheet.useApiKey(this.configService.config.apikey);
17
- await spreadsheet.loadInfo();
18
- const rows = await spreadsheet.sheetsByTitle[this.configService.config.mappingSpreadsheetTitle].getRows();
19
- const mappingRules = this.rowsToRules(rows) as MappingRules[];
20
-
21
- mappingRules.map((rule, _i, selfRules) => {
22
- this.removeEmptyKeys(rule);
23
- if (rule.importFieldType && rule.importFieldType.includes('selector')) {
24
- this.groupSelectors(rule, selfRules);
25
- }
26
- });
27
-
28
- this.rules = this.filterResultedRows(mappingRules);
29
- }
30
- return this.rules;
31
- }
32
-
33
- async getDealersMapping(): Promise<DealersMapping[]> {
34
- if (!this.dealers) {
35
- const spreadsheet = new GoogleSpreadsheet(this.configService.config.dealersSpreadsheetId);
36
- spreadsheet.useApiKey(this.configService.config.apikey);
37
- await spreadsheet.loadInfo();
38
- const rows = await spreadsheet.sheetsByTitle[this.configService.config.dealersSpreadsheetTitle].getRows();
39
- this.dealers = this.rowsToRules(rows) as DealersMapping[];
40
- }
41
- return this.dealers;
42
- }
43
-
44
- private rowsToRules(rows: GoogleSpreadsheetRow[]): MappingRules[] | DealersMapping[] {
45
- return rows.map(row =>
46
- Object.assign(
47
- {},
48
- ...Object.entries(Object.getOwnPropertyDescriptors(row))
49
- .filter(([_key, descriptor]) => typeof descriptor.get === 'function')
50
- .map(([key, descriptor]) => ({
51
- [key]: descriptor.get() || '',
52
- })),
53
- ),
54
- );
55
- }
56
-
57
- private filterResultedRows(rows: MappingRules[]): MappingRules[] {
58
- return rows.filter((value, idx, self) => {
59
- const mapped = self.map((x: MappingRules) => x.importField);
60
- const equalSelectors =
61
- value.importFieldType && value.importFieldType.includes('selector')
62
- ? mapped.indexOf(value.importField) === idx
63
- : true;
64
- return value.autodeField && equalSelectors;
65
- });
66
- }
67
-
68
- private removeEmptyKeys(row: MappingRules): void {
69
- Object.keys(row).map(key => {
70
- if (row[key] === '') {
71
- delete row[key];
72
- }
73
- });
74
- }
75
-
76
- private groupSelectors(row: MappingRules, selfRows: MappingRules[]): void {
77
- for (let i = 0; i < selfRows.length; i += 1) {
78
- if (selfRows[i].importField === row.importField) {
79
- if (!selfRows[i].selectors) {
80
- selfRows[i].selectors = [];
81
- }
82
- if (row.autodeFieldSelector) {
83
- selfRows[i].selectors.push(`${row.importFieldSelector}:${row.autodeFieldSelector}`);
84
- }
85
- }
86
- }
87
-
88
- delete row.importFieldSelector;
89
- delete row.autodeFieldSelector;
90
- }
91
- }
1
+ import { Injectable } from '@nestjs/common';
2
+ import { MappingRules } from '../interfaces/mapping-rules.interface';
3
+ import { GoogleSpreadsheet, GoogleSpreadsheetRow } from 'google-spreadsheet';
4
+ import { ConfigService } from './config.service';
5
+ import { DealersMapping } from '../interfaces/dealers-mapping.interface';
6
+
7
+ @Injectable()
8
+ export class MappingService {
9
+ constructor(private configService: ConfigService) {}
10
+ private rules: MappingRules[];
11
+ private dealers: any;
12
+
13
+ async getRules(): Promise<MappingRules[]> {
14
+ if (!this.rules) {
15
+ const spreadsheet = new GoogleSpreadsheet(this.configService.config.mappingSpreadsheetId);
16
+ spreadsheet.useApiKey(this.configService.config.apikey);
17
+ await spreadsheet.loadInfo();
18
+ const rows = await spreadsheet.sheetsByTitle[this.configService.config.mappingSpreadsheetTitle].getRows();
19
+ const mappingRules = this.rowsToRules(rows) as MappingRules[];
20
+
21
+ mappingRules.map((rule, _i, selfRules) => {
22
+ this.removeEmptyKeys(rule);
23
+ if (rule.importFieldType && rule.importFieldType.includes('selector')) {
24
+ this.groupSelectors(rule, selfRules);
25
+ }
26
+ });
27
+
28
+ this.rules = this.filterResultedRows(mappingRules);
29
+ }
30
+ return this.rules;
31
+ }
32
+
33
+ async getDealersMapping(): Promise<DealersMapping[]> {
34
+ if (!this.dealers) {
35
+ const spreadsheet = new GoogleSpreadsheet(this.configService.config.dealersSpreadsheetId);
36
+ spreadsheet.useApiKey(this.configService.config.apikey);
37
+ await spreadsheet.loadInfo();
38
+ const rows = await spreadsheet.sheetsByTitle[this.configService.config.dealersSpreadsheetTitle].getRows();
39
+ this.dealers = this.rowsToRules(rows) as DealersMapping[];
40
+ }
41
+ return this.dealers;
42
+ }
43
+
44
+ private rowsToRules(rows: GoogleSpreadsheetRow[]): MappingRules[] | DealersMapping[] {
45
+ return rows.map(row =>
46
+ Object.assign(
47
+ {},
48
+ ...Object.entries(Object.getOwnPropertyDescriptors(row))
49
+ .filter(([_key, descriptor]) => typeof descriptor.get === 'function')
50
+ .map(([key, descriptor]) => ({
51
+ [key]: descriptor.get() || '',
52
+ })),
53
+ ),
54
+ );
55
+ }
56
+
57
+ private filterResultedRows(rows: MappingRules[]): MappingRules[] {
58
+ return rows.filter((value, idx, self) => {
59
+ const mapped = self.map((x: MappingRules) => x.importField);
60
+ const equalSelectors =
61
+ value.importFieldType && value.importFieldType.includes('selector')
62
+ ? mapped.indexOf(value.importField) === idx
63
+ : true;
64
+ return value.autodeField && equalSelectors;
65
+ });
66
+ }
67
+
68
+ private removeEmptyKeys(row: MappingRules): void {
69
+ Object.keys(row).map(key => {
70
+ if (row[key] === '') {
71
+ delete row[key];
72
+ }
73
+ });
74
+ }
75
+
76
+ private groupSelectors(row: MappingRules, selfRows: MappingRules[]): void {
77
+ for (let i = 0; i < selfRows.length; i += 1) {
78
+ if (selfRows[i].importField === row.importField) {
79
+ if (!selfRows[i].selectors) {
80
+ selfRows[i].selectors = [];
81
+ }
82
+ if (row.autodeFieldSelector) {
83
+ selfRows[i].selectors.push(`${row.importFieldSelector}:${row.autodeFieldSelector}`);
84
+ }
85
+ }
86
+ }
87
+
88
+ delete row.importFieldSelector;
89
+ delete row.autodeFieldSelector;
90
+ }
91
+ }
@@ -1,44 +1,44 @@
1
- import { Injectable } from '@nestjs/common';
2
- import { ImageImboRequest, UserActionsRequest, UserProfileAdminRequest } from '@bytebrand/autode-request';
3
- import { ConfigService } from './config.service';
4
-
5
- @Injectable()
6
- export class RequestService {
7
- constructor(private configService: ConfigService) {}
8
-
9
- private _upaRequest: UserProfileAdminRequest;
10
-
11
- get upaRequest() {
12
- if (!this._upaRequest) {
13
- this._upaRequest = new UserProfileAdminRequest(
14
- this.configService.config.apikey,
15
- this.configService.config.upaUrl,
16
- );
17
- }
18
- return this._upaRequest;
19
- }
20
-
21
- private _userActionsRequest: UserActionsRequest;
22
-
23
- get userActionsRequest() {
24
- if (!this._userActionsRequest) {
25
- this._userActionsRequest = new UserActionsRequest(
26
- this.configService.config.apikey,
27
- this.configService.config.userActionsUrl,
28
- );
29
- }
30
- return this._userActionsRequest;
31
- }
32
-
33
- private _imageImboRequest: ImageImboRequest;
34
-
35
- get imageImboRequest() {
36
- if (!this._imageImboRequest) {
37
- this._imageImboRequest = new ImageImboRequest(
38
- this.configService.config.apikey,
39
- this.configService.config.userActionsUrl,
40
- );
41
- }
42
- return this._imageImboRequest;
43
- }
44
- }
1
+ import { Injectable } from '@nestjs/common';
2
+ import { ImageImboRequest, UserActionsRequest, UserProfileAdminRequest } from '@bytebrand/autode-request';
3
+ import { ConfigService } from './config.service';
4
+
5
+ @Injectable()
6
+ export class RequestService {
7
+ constructor(private configService: ConfigService) {}
8
+
9
+ private _upaRequest: UserProfileAdminRequest;
10
+
11
+ get upaRequest() {
12
+ if (!this._upaRequest) {
13
+ this._upaRequest = new UserProfileAdminRequest(
14
+ this.configService.config.apikey,
15
+ this.configService.config.upaUrl,
16
+ );
17
+ }
18
+ return this._upaRequest;
19
+ }
20
+
21
+ private _userActionsRequest: UserActionsRequest;
22
+
23
+ get userActionsRequest() {
24
+ if (!this._userActionsRequest) {
25
+ this._userActionsRequest = new UserActionsRequest(
26
+ this.configService.config.apikey,
27
+ this.configService.config.userActionsUrl,
28
+ );
29
+ }
30
+ return this._userActionsRequest;
31
+ }
32
+
33
+ private _imageImboRequest: ImageImboRequest;
34
+
35
+ get imageImboRequest() {
36
+ if (!this._imageImboRequest) {
37
+ this._imageImboRequest = new ImageImboRequest(
38
+ this.configService.config.apikey,
39
+ this.configService.config.userActionsUrl,
40
+ );
41
+ }
42
+ return this._imageImboRequest;
43
+ }
44
+ }
@@ -1,61 +1,61 @@
1
- import { LoggerService } from '@bytebrand/cronicle-helper';
2
- import { Injectable } from '@nestjs/common';
3
- import { concat, toSafeInteger, toString } from 'lodash';
4
- import { DateRule } from '../rules/date.rule';
5
- import { NumberRule } from '../rules/number.rule';
6
- import { StringRule } from '../rules/string.rule';
7
- import { ConfigService } from './config.service';
8
-
9
- @Injectable()
10
- export class RulesService {
11
- constructor(private configService: ConfigService) {}
12
-
13
- private _rules: Array<StringRule | NumberRule | DateRule>;
14
-
15
- get rules() {
16
- if (!this._rules) {
17
- this._rules = concat(
18
- [],
19
- this.buildStringRules(this.configService.config.input.stringIN),
20
- this.buildNumberRules(this.configService.config.input.numberIN),
21
- this.buildDateRules(this.configService.config.input.dateIN),
22
- );
23
- }
24
- return this._rules;
25
- }
26
-
27
- private buildRules(
28
- value: string,
29
- ruleBuilder: (key: string, params: string) => StringRule | DateRule | NumberRule,
30
- ): Array<StringRule | NumberRule | DateRule> {
31
- const rulesArr: Array<StringRule | NumberRule | DateRule> = [];
32
- try {
33
- const expressions = value.split(';');
34
- if (expressions.length === 0) return [];
35
-
36
- expressions.forEach(e => {
37
- const values = e.split(':');
38
- if (values.length > 1) {
39
- const rule = ruleBuilder(values[0], values[1]);
40
- rulesArr.push(rule);
41
- }
42
- });
43
- return rulesArr;
44
- } catch (error) {
45
- LoggerService.error(error);
46
- return rulesArr;
47
- }
48
- }
49
-
50
- private buildStringRules(value: string): Array<StringRule | NumberRule | DateRule> {
51
- return this.buildRules(value, (key, params) => new StringRule(key, params, (e: string) => toString(e)));
52
- }
53
-
54
- private buildNumberRules(value: string): Array<StringRule | NumberRule | DateRule> {
55
- return this.buildRules(value, (key, params) => new NumberRule(key, params, (e: string) => toSafeInteger(e)));
56
- }
57
-
58
- private buildDateRules(value: string): Array<StringRule | NumberRule | DateRule> {
59
- return this.buildRules(value, (key, params) => new DateRule(key, params, (e: string) => toSafeInteger(e)));
60
- }
61
- }
1
+ import { LoggerService } from '@bytebrand/cronicle-helper';
2
+ import { Injectable } from '@nestjs/common';
3
+ import { concat, toSafeInteger, toString } from 'lodash';
4
+ import { DateRule } from '../rules/date.rule';
5
+ import { NumberRule } from '../rules/number.rule';
6
+ import { StringRule } from '../rules/string.rule';
7
+ import { ConfigService } from './config.service';
8
+
9
+ @Injectable()
10
+ export class RulesService {
11
+ constructor(private configService: ConfigService) {}
12
+
13
+ private _rules: Array<StringRule | NumberRule | DateRule>;
14
+
15
+ get rules() {
16
+ if (!this._rules) {
17
+ this._rules = concat(
18
+ [],
19
+ this.buildStringRules(this.configService.config.input.stringIN),
20
+ this.buildNumberRules(this.configService.config.input.numberIN),
21
+ this.buildDateRules(this.configService.config.input.dateIN),
22
+ );
23
+ }
24
+ return this._rules;
25
+ }
26
+
27
+ private buildRules(
28
+ value: string,
29
+ ruleBuilder: (key: string, params: string) => StringRule | DateRule | NumberRule,
30
+ ): Array<StringRule | NumberRule | DateRule> {
31
+ const rulesArr: Array<StringRule | NumberRule | DateRule> = [];
32
+ try {
33
+ const expressions = value.split(';');
34
+ if (expressions.length === 0) return [];
35
+
36
+ expressions.forEach(e => {
37
+ const values = e.split(':');
38
+ if (values.length > 1) {
39
+ const rule = ruleBuilder(values[0], values[1]);
40
+ rulesArr.push(rule);
41
+ }
42
+ });
43
+ return rulesArr;
44
+ } catch (error) {
45
+ LoggerService.error(error);
46
+ return rulesArr;
47
+ }
48
+ }
49
+
50
+ private buildStringRules(value: string): Array<StringRule | NumberRule | DateRule> {
51
+ return this.buildRules(value, (key, params) => new StringRule(key, params, (e: string) => toString(e)));
52
+ }
53
+
54
+ private buildNumberRules(value: string): Array<StringRule | NumberRule | DateRule> {
55
+ return this.buildRules(value, (key, params) => new NumberRule(key, params, (e: string) => toSafeInteger(e)));
56
+ }
57
+
58
+ private buildDateRules(value: string): Array<StringRule | NumberRule | DateRule> {
59
+ return this.buildRules(value, (key, params) => new DateRule(key, params, (e: string) => toSafeInteger(e)));
60
+ }
61
+ }
@@ -1,129 +1,129 @@
1
- import { DataSchemes } from '@bytebrand/car-schema';
2
- import { Injectable } from '@nestjs/common';
3
-
4
- import { escape, get, join, toNumber, toSafeInteger, toString, trim } from 'lodash';
5
- import * as moment from 'moment';
6
-
7
- import { BodyColorList, CategoryList, FuelList, TransmissionList } from '../constants';
8
- import { MIN_MILEAGES } from '../constants/autouncle.contants';
9
- import { ConfigService } from './config.service';
10
- import { isValidVin } from '../utils';
11
-
12
- @Injectable()
13
- export class TransformerService {
14
- constructor(private readonly configService: ConfigService) {}
15
-
16
- identifier(car: DataSchemes.Car): string {
17
- return get(car, 'metaData.vehicleId', '');
18
- }
19
-
20
- link(car: DataSchemes.Car, params?: string): string {
21
- return params
22
- ? `https://${this.configService.config.domain}/search/vehicle/${car._id}?${params}`
23
- : `https://${this.configService.config.domain}/search/vehicle/${car._id}`;
24
- }
25
-
26
- title(car: DataSchemes.Car): string {
27
- const make = toString(get(car, 'mainData.make', ''));
28
- const model = toString(get(car, 'mainData.model', ''));
29
- const subModel = toString(get(car, 'mainData.subModel', ''));
30
- return trim(escape(join([make, model, subModel], ' ')));
31
- }
32
-
33
- price(car: DataSchemes.Car): number {
34
- const price = get(car, 'price.currentSalesPrice', null);
35
- return toNumber(price);
36
- }
37
-
38
- postCode(car: DataSchemes.Car): string {
39
- return toString(get(car, 'location.zipCode', ''));
40
- }
41
-
42
- vinCode(car: DataSchemes.Car): string {
43
- const vin: string = get(car, 'metaData.vin', '');
44
- return isValidVin(vin) ? vin : get(car, 'marketing.fakeVIN', '');
45
- }
46
-
47
- make(car: DataSchemes.Car): string {
48
- return toString(get(car, 'mainData.make', ''));
49
- }
50
-
51
- model(car: DataSchemes.Car): string {
52
- return toString(get(car, 'mainData.model', ''));
53
- }
54
-
55
- color(car: DataSchemes.Car): string {
56
- const colorSelection = get(car, 'exterior.exteriorColor', 'selector_unknown');
57
- return <string>get(BodyColorList, colorSelection).value;
58
- }
59
-
60
- bodyStyle(car: DataSchemes.Car): string {
61
- const body_style_selector = get(car, 'mainData.category', 'selector_unknown');
62
- return <string>get(CategoryList, body_style_selector).value;
63
- }
64
- year(car: DataSchemes.Car): string {
65
- const firstRegistration = get(car, 'mainData.firstRegistration') as number;
66
- if (firstRegistration) {
67
- return moment(firstRegistration * 1000).format('YYYY');
68
- }
69
- return moment().format('YYYY');
70
- }
71
-
72
- mileage(car: DataSchemes.Car): number {
73
- const mileage = get(car, 'mainData.mileage', 0);
74
- return mileage <= MIN_MILEAGES ? MIN_MILEAGES + 1 : mileage;
75
- }
76
-
77
- doors(car: DataSchemes.Car): number {
78
- return toNumber(get(car, 'mainData.doors', null));
79
- }
80
-
81
- seats(car: DataSchemes.Car): number {
82
- return toNumber(get(car, 'mainData.seats', null));
83
- }
84
-
85
- engineSizeInCCM(car: DataSchemes.Car): number {
86
- return toNumber(get(car, 'engineData.cubicCapacity', null));
87
- }
88
-
89
- cylinders(car: DataSchemes.Car): number {
90
- return toNumber(get(car, 'engineData.cylinders', null));
91
- }
92
-
93
- fuelType(car: DataSchemes.Car): string {
94
- const fuel_selector = get(car, 'consumption.fuel', '');
95
- return <string>get(FuelList, fuel_selector).value;
96
- }
97
-
98
- transmission(car: DataSchemes.Car): string {
99
- const transmission_selector = get(car, 'driveSuspension.gearbox', 'selector_unknown');
100
- return <string>get(TransmissionList, transmission_selector).value;
101
- }
102
-
103
- powerKW(car: DataSchemes.Car): number {
104
- return toNumber(get(car, 'engineData.powerKW', null));
105
- }
106
-
107
- powerPS(car: DataSchemes.Car): number {
108
- return toNumber(get(car, 'engineData.powerPS', null));
109
- }
110
-
111
- fuelConsumption(car: DataSchemes.Car): number {
112
- return toNumber(get(car, 'consumption.consumptionCombined', null));
113
- }
114
-
115
- cO2Emission(car: DataSchemes.Car): number {
116
- return toNumber(get(car, 'environmentEmissions.co2', null));
117
- }
118
-
119
- isNewBoolean(car: DataSchemes.Car): number {
120
- const available = {
121
- selector_condition_new: 1,
122
- selector_condition_used: 0,
123
- selector_unknown: 0,
124
- };
125
-
126
- const condition = get(car, 'mainData.condition', 'selector_unknown');
127
- return get(available, condition);
128
- }
129
- }
1
+ import { DataSchemes } from '@bytebrand/car-schema';
2
+ import { Injectable } from '@nestjs/common';
3
+
4
+ import { escape, get, join, toNumber, toSafeInteger, toString, trim } from 'lodash';
5
+ import * as moment from 'moment';
6
+
7
+ import { BodyColorList, CategoryList, FuelList, TransmissionList } from '../constants';
8
+ import { MIN_MILEAGES } from '../constants/autouncle.contants';
9
+ import { ConfigService } from './config.service';
10
+ import { isValidVin } from '../utils';
11
+
12
+ @Injectable()
13
+ export class TransformerService {
14
+ constructor(private readonly configService: ConfigService) {}
15
+
16
+ identifier(car: DataSchemes.Car): string {
17
+ return get(car, 'metaData.vehicleId', '');
18
+ }
19
+
20
+ link(car: DataSchemes.Car, params?: string): string {
21
+ return params
22
+ ? `https://${this.configService.config.domain}/search/vehicle/${car._id}?${params}`
23
+ : `https://${this.configService.config.domain}/search/vehicle/${car._id}`;
24
+ }
25
+
26
+ title(car: DataSchemes.Car): string {
27
+ const make = toString(get(car, 'mainData.make', ''));
28
+ const model = toString(get(car, 'mainData.model', ''));
29
+ const subModel = toString(get(car, 'mainData.subModel', ''));
30
+ return trim(escape(join([make, model, subModel], ' ')));
31
+ }
32
+
33
+ price(car: DataSchemes.Car): number {
34
+ const price = get(car, 'price.currentSalesPrice', null);
35
+ return toNumber(price);
36
+ }
37
+
38
+ postCode(car: DataSchemes.Car): string {
39
+ return toString(get(car, 'location.zipCode', ''));
40
+ }
41
+
42
+ vinCode(car: DataSchemes.Car): string {
43
+ const vin: string = get(car, 'metaData.vin', '');
44
+ return isValidVin(vin) ? vin : get(car, 'marketing.fakeVIN', '');
45
+ }
46
+
47
+ make(car: DataSchemes.Car): string {
48
+ return toString(get(car, 'mainData.make', ''));
49
+ }
50
+
51
+ model(car: DataSchemes.Car): string {
52
+ return toString(get(car, 'mainData.model', ''));
53
+ }
54
+
55
+ color(car: DataSchemes.Car): string {
56
+ const colorSelection = get(car, 'exterior.exteriorColor', 'selector_unknown');
57
+ return <string>get(BodyColorList, colorSelection).value;
58
+ }
59
+
60
+ bodyStyle(car: DataSchemes.Car): string {
61
+ const body_style_selector = get(car, 'mainData.category', 'selector_unknown');
62
+ return <string>get(CategoryList, body_style_selector).value;
63
+ }
64
+ year(car: DataSchemes.Car): string {
65
+ const firstRegistration = get(car, 'mainData.firstRegistration') as number;
66
+ if (firstRegistration) {
67
+ return moment(firstRegistration * 1000).format('YYYY');
68
+ }
69
+ return moment().format('YYYY');
70
+ }
71
+
72
+ mileage(car: DataSchemes.Car): number {
73
+ const mileage = get(car, 'mainData.mileage', 0);
74
+ return mileage <= MIN_MILEAGES ? MIN_MILEAGES + 1 : mileage;
75
+ }
76
+
77
+ doors(car: DataSchemes.Car): number {
78
+ return toNumber(get(car, 'mainData.doors', null));
79
+ }
80
+
81
+ seats(car: DataSchemes.Car): number {
82
+ return toNumber(get(car, 'mainData.seats', null));
83
+ }
84
+
85
+ engineSizeInCCM(car: DataSchemes.Car): number {
86
+ return toNumber(get(car, 'engineData.cubicCapacity', null));
87
+ }
88
+
89
+ cylinders(car: DataSchemes.Car): number {
90
+ return toNumber(get(car, 'engineData.cylinders', null));
91
+ }
92
+
93
+ fuelType(car: DataSchemes.Car): string {
94
+ const fuel_selector = get(car, 'consumption.fuel', '');
95
+ return <string>get(FuelList, fuel_selector).value;
96
+ }
97
+
98
+ transmission(car: DataSchemes.Car): string {
99
+ const transmission_selector = get(car, 'driveSuspension.gearbox', 'selector_unknown');
100
+ return <string>get(TransmissionList, transmission_selector).value;
101
+ }
102
+
103
+ powerKW(car: DataSchemes.Car): number {
104
+ return toNumber(get(car, 'engineData.powerKW', null));
105
+ }
106
+
107
+ powerPS(car: DataSchemes.Car): number {
108
+ return toNumber(get(car, 'engineData.powerPS', null));
109
+ }
110
+
111
+ fuelConsumption(car: DataSchemes.Car): number {
112
+ return toNumber(get(car, 'consumption.consumptionCombined', null));
113
+ }
114
+
115
+ cO2Emission(car: DataSchemes.Car): number {
116
+ return toNumber(get(car, 'environmentEmissions.co2', null));
117
+ }
118
+
119
+ isNewBoolean(car: DataSchemes.Car): number {
120
+ const available = {
121
+ selector_condition_new: 1,
122
+ selector_condition_used: 0,
123
+ selector_unknown: 0,
124
+ };
125
+
126
+ const condition = get(car, 'mainData.condition', 'selector_unknown');
127
+ return get(available, condition);
128
+ }
129
+ }