@accon/connect 0.0.1

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 (98) hide show
  1. package/LICENSE +25 -0
  2. package/README.md +60 -0
  3. package/coverage/clover.xml +232 -0
  4. package/coverage/coverage-final.json +21 -0
  5. package/coverage/lcov-report/base.css +224 -0
  6. package/coverage/lcov-report/block-navigation.js +87 -0
  7. package/coverage/lcov-report/favicon.png +0 -0
  8. package/coverage/lcov-report/index.html +236 -0
  9. package/coverage/lcov-report/prettify.css +1 -0
  10. package/coverage/lcov-report/prettify.js +2 -0
  11. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  12. package/coverage/lcov-report/sorter.js +196 -0
  13. package/coverage/lcov.info +387 -0
  14. package/dist/core/connect.module.d.ts +2 -0
  15. package/dist/core/connect.module.js +25 -0
  16. package/dist/core/connect.module.js.map +1 -0
  17. package/dist/core/connect.service.d.ts +16 -0
  18. package/dist/core/connect.service.js +60 -0
  19. package/dist/core/connect.service.js.map +1 -0
  20. package/dist/core/decorators/index.d.ts +1 -0
  21. package/dist/core/decorators/index.js +18 -0
  22. package/dist/core/decorators/index.js.map +1 -0
  23. package/dist/core/decorators/registry-integration.decorator.d.ts +3 -0
  24. package/dist/core/decorators/registry-integration.decorator.js +12 -0
  25. package/dist/core/decorators/registry-integration.decorator.js.map +1 -0
  26. package/dist/core/events/events.module.d.ts +2 -0
  27. package/dist/core/events/events.module.js +23 -0
  28. package/dist/core/events/events.module.js.map +1 -0
  29. package/dist/core/events/events.service.d.ts +9 -0
  30. package/dist/core/events/events.service.js +44 -0
  31. package/dist/core/events/events.service.js.map +1 -0
  32. package/dist/core/events/index.d.ts +2 -0
  33. package/dist/core/events/index.js +19 -0
  34. package/dist/core/events/index.js.map +1 -0
  35. package/dist/core/exceptions/index.d.ts +1 -0
  36. package/dist/core/exceptions/index.js +18 -0
  37. package/dist/core/exceptions/index.js.map +1 -0
  38. package/dist/core/exceptions/invalid-order.exception.d.ts +5 -0
  39. package/dist/core/exceptions/invalid-order.exception.js +12 -0
  40. package/dist/core/exceptions/invalid-order.exception.js.map +1 -0
  41. package/dist/core/index.d.ts +7 -0
  42. package/dist/core/index.js +24 -0
  43. package/dist/core/index.js.map +1 -0
  44. package/dist/core/integration-loader.d.ts +1 -0
  45. package/dist/core/integration-loader.js +14 -0
  46. package/dist/core/integration-loader.js.map +1 -0
  47. package/dist/core/integration-registry.service.d.ts +9 -0
  48. package/dist/core/integration-registry.service.js +31 -0
  49. package/dist/core/integration-registry.service.js.map +1 -0
  50. package/dist/core/interfaces/index.d.ts +2 -0
  51. package/dist/core/interfaces/index.js +19 -0
  52. package/dist/core/interfaces/index.js.map +1 -0
  53. package/dist/core/interfaces/integration-meta.interface.d.ts +13 -0
  54. package/dist/core/interfaces/integration-meta.interface.js +3 -0
  55. package/dist/core/interfaces/integration-meta.interface.js.map +1 -0
  56. package/dist/core/interfaces/order-output-integration.interface.d.ts +4 -0
  57. package/dist/core/interfaces/order-output-integration.interface.js +3 -0
  58. package/dist/core/interfaces/order-output-integration.interface.js.map +1 -0
  59. package/dist/core/types/index.d.ts +4 -0
  60. package/dist/core/types/index.js +21 -0
  61. package/dist/core/types/index.js.map +1 -0
  62. package/dist/core/types/integration-category.type.d.ts +1 -0
  63. package/dist/core/types/integration-category.type.js +3 -0
  64. package/dist/core/types/integration-category.type.js.map +1 -0
  65. package/dist/core/types/integration-event-dispatcher.type.d.ts +2 -0
  66. package/dist/core/types/integration-event-dispatcher.type.js +3 -0
  67. package/dist/core/types/integration-event-dispatcher.type.js.map +1 -0
  68. package/dist/core/types/integration-event.type.d.ts +13 -0
  69. package/dist/core/types/integration-event.type.js +13 -0
  70. package/dist/core/types/integration-event.type.js.map +1 -0
  71. package/dist/core/types/integration-type.type.d.ts +1 -0
  72. package/dist/core/types/integration-type.type.js +3 -0
  73. package/dist/core/types/integration-type.type.js.map +1 -0
  74. package/dist/core/types/order.type.d.ts +155 -0
  75. package/dist/core/types/order.type.js +3 -0
  76. package/dist/core/types/order.type.js.map +1 -0
  77. package/dist/index.d.ts +2 -0
  78. package/dist/index.js +19 -0
  79. package/dist/index.js.map +1 -0
  80. package/dist/logistics/foody/dto/create-foody-order-response.dto.d.ts +4 -0
  81. package/dist/logistics/foody/dto/create-foody-order-response.dto.js +9 -0
  82. package/dist/logistics/foody/dto/create-foody-order-response.dto.js.map +1 -0
  83. package/dist/logistics/foody/dto/create-foody-order.dto.d.ts +31 -0
  84. package/dist/logistics/foody/dto/create-foody-order.dto.js +19 -0
  85. package/dist/logistics/foody/dto/create-foody-order.dto.js.map +1 -0
  86. package/dist/logistics/foody/foody.config.d.ts +15 -0
  87. package/dist/logistics/foody/foody.config.js +17 -0
  88. package/dist/logistics/foody/foody.config.js.map +1 -0
  89. package/dist/logistics/foody/foody.order-output.d.ts +15 -0
  90. package/dist/logistics/foody/foody.order-output.js +148 -0
  91. package/dist/logistics/foody/foody.order-output.js.map +1 -0
  92. package/dist/tsconfig.build.tsbuildinfo +1 -0
  93. package/eslint.config.mjs +35 -0
  94. package/index.js +6 -0
  95. package/nest-cli.json +8 -0
  96. package/package.json +76 -0
  97. package/test/jest-e2e.json +9 -0
  98. package/tsconfig.build.json +4 -0
@@ -0,0 +1,155 @@
1
+ export type EventName = 'CREATED' | 'CONFIRMED' | 'PREPARATION_REQUESTED' | 'PREPARING' | 'DISPATCHED' | 'READY_FOR_PICKUP' | 'PICKUP_AREA_ASSIGNED' | 'PICKED_UP' | 'DELIVERED' | 'CONCLUDED' | 'CANCELLATION_REQUESTED' | 'CANCELLATION_REQUEST_DENIED' | 'CANCELLED' | 'ORDER_CANCELLATION_REQUEST' | 'CANCELLED_DENIED';
2
+ export type Price = {
3
+ value: number;
4
+ currency: 'BRL';
5
+ };
6
+ export type Unit = 'UN' | 'KG' | 'L' | 'OZ' | 'LB' | 'GAL';
7
+ export type Order = {
8
+ id: string;
9
+ type: 'DELIVERY' | 'TAKEOUT' | 'INDOOR';
10
+ displayId: string;
11
+ sourceAppId?: string;
12
+ salesChannel?: string;
13
+ virtualBrand?: string;
14
+ createdAt: string;
15
+ lastEvent?: EventName;
16
+ orderTiming: 'INSTANT' | 'SCHEDULED' | 'ONDEMAND';
17
+ preparationStartDateTime: string;
18
+ merchant: {
19
+ id: string;
20
+ name: string;
21
+ };
22
+ items: {
23
+ id: string;
24
+ index?: number;
25
+ name: string;
26
+ externalCode: string;
27
+ unit: Unit;
28
+ ean?: string;
29
+ quantity: number;
30
+ specialInstructions?: string;
31
+ unitPrice: Price;
32
+ originalPrice?: Price;
33
+ scalePriceApplied?: boolean;
34
+ optionsPrice?: Price;
35
+ subtotalPrice?: Price;
36
+ totalPrice: Price;
37
+ indoor?: {
38
+ productionPoint?: string;
39
+ };
40
+ options?: {
41
+ index?: number;
42
+ id: string;
43
+ name: string;
44
+ externalCode: string;
45
+ unit: Unit;
46
+ ean?: string;
47
+ quantity: number;
48
+ unitPrice: Price;
49
+ originalPrice?: Price;
50
+ subtotalPrice?: Price;
51
+ totalPrice: Price;
52
+ specialInstructions: string;
53
+ }[];
54
+ }[];
55
+ otherFees: {
56
+ name: string;
57
+ type: 'DELIVERY_FEE' | 'SERVICE_FEE' | 'TIP';
58
+ receivedBy: 'MARKETPLACE' | 'MERCHANT' | 'LOGISTIC_SERVICES';
59
+ receiverDocument?: string;
60
+ price: Price;
61
+ observation?: string;
62
+ }[];
63
+ discounts: {
64
+ amount: Price;
65
+ target: 'CART' | 'DELIVERY_FEE' | 'ITEM';
66
+ targetId?: string;
67
+ sponsorshipValues: {
68
+ name: string;
69
+ amount: Price;
70
+ discountCode?: string;
71
+ };
72
+ };
73
+ total: {
74
+ itemsPrice: Price;
75
+ otherFees: Price;
76
+ discount: Price;
77
+ orderAmount: Price;
78
+ };
79
+ payments: {
80
+ prepaid: number;
81
+ pending: number;
82
+ methods: {
83
+ value: number;
84
+ currency: string;
85
+ type: 'PREPAID' | 'PENDING';
86
+ method: 'CREDIT' | 'DEBIT' | 'MEAL_VOUCHER' | 'FOOD_VOUCHER' | 'DIGITAL_WALLET' | 'PIX' | 'CASH' | 'CREDIT_DEBIT' | 'COUPON' | 'REDEEM' | 'PREPAID_REDEEM' | 'OTHER';
87
+ brand?: 'VISA' | 'MASTERCARD' | 'DINERS' | 'AMEX' | 'HIPERCARD' | 'ELO' | 'AURA' | 'DISCOVER' | 'VR_BENEFICIOS' | 'SODEXO' | 'TICKET' | 'GOOD_CARD' | 'BANESCARD' | 'SOROCARD' | 'POLICARD' | 'VALECARD' | 'AGICARD' | 'JCB' | 'CREDSYSTEM' | 'CABAL' | 'GREEN_CARD' | 'VEROCHEQUE' | 'AVISTA' | 'OTHER';
88
+ methodInfo?: string;
89
+ transaction?: {
90
+ authorizationCode?: string;
91
+ acquirerDocument?: string;
92
+ };
93
+ changeFor: number;
94
+ }[];
95
+ };
96
+ taxInvoice?: {
97
+ issued?: boolean;
98
+ taxInvoiceURL?: string;
99
+ };
100
+ customer?: {
101
+ id: string;
102
+ name: string;
103
+ documentNumber?: string;
104
+ phone: {
105
+ number: string;
106
+ extension: string;
107
+ };
108
+ email?: string;
109
+ ordersCountOnMerchant: number;
110
+ };
111
+ schedule?: {
112
+ scheduledDateTimeStart: string;
113
+ scheduledDateTimeEnd: string;
114
+ };
115
+ orderPriority?: 'PRIORITY1' | 'PRIORITY2' | 'PRIORITY3' | 'PRIORITY4' | 'PRIORITY5';
116
+ delivery: {
117
+ deliveredBy: 'MERCHANT' | 'MARKETPLACE';
118
+ deliveryAddress: {
119
+ country: string;
120
+ state: string;
121
+ city: string;
122
+ district: string;
123
+ street: string;
124
+ number: string;
125
+ complement?: string;
126
+ reference?: string;
127
+ formattedAddress: string;
128
+ postalCode: string;
129
+ coordinates: {
130
+ latitude: number;
131
+ longitude: number;
132
+ };
133
+ };
134
+ estimatedDeliveryDateTime: string;
135
+ deliveryDateTime?: string;
136
+ pickupCode?: string;
137
+ };
138
+ takeout?: {
139
+ mode: 'DEFAULT' | 'PICKUP_AREA';
140
+ takeoutDateTime: string;
141
+ };
142
+ indoor?: {
143
+ mode: 'DEFAULT' | 'PLACE' | 'TAB' | 'TERMINAL';
144
+ indoorDateTime: string;
145
+ place?: string;
146
+ tab?: string;
147
+ seat?: string;
148
+ waiterCode?: string;
149
+ };
150
+ sendPreparing?: boolean;
151
+ sendDelivered?: boolean;
152
+ sendPickedUp?: boolean;
153
+ sendTracking?: boolean;
154
+ extraInfo?: string;
155
+ };
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=order.type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"order.type.js","sourceRoot":"","sources":["../../../lib/core/types/order.type.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export * from './core/connect.module';
2
+ export * from './core/connect.service';
package/dist/index.js ADDED
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./core/connect.module"), exports);
18
+ __exportStar(require("./core/connect.service"), exports);
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wDAAsC;AACtC,yDAAuC"}
@@ -0,0 +1,4 @@
1
+ import { CreateFoodyOrderDto } from './create-foody-order.dto';
2
+ export declare class CreateFoodyOrderResponseDto extends CreateFoodyOrderDto {
3
+ uid: string;
4
+ }
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CreateFoodyOrderResponseDto = void 0;
4
+ const create_foody_order_dto_1 = require("./create-foody-order.dto");
5
+ class CreateFoodyOrderResponseDto extends create_foody_order_dto_1.CreateFoodyOrderDto {
6
+ uid;
7
+ }
8
+ exports.CreateFoodyOrderResponseDto = CreateFoodyOrderResponseDto;
9
+ //# sourceMappingURL=create-foody-order-response.dto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-foody-order-response.dto.js","sourceRoot":"","sources":["../../../../lib/logistics/foody/dto/create-foody-order-response.dto.ts"],"names":[],"mappings":";;;AAAA,qEAA+D;AAE/D,MAAa,2BAA4B,SAAQ,4CAAmB;IAClE,GAAG,CAAS;CACb;AAFD,kEAEC"}
@@ -0,0 +1,31 @@
1
+ export declare class CreateFoodyOrderDto {
2
+ id: string;
3
+ status: 'open' | 'ready';
4
+ deliveryFee?: number;
5
+ paymentMethod?: 'money' | 'card' | 'online' | 'on_credit' | 'pix' | 'e_wallet';
6
+ notes?: string;
7
+ courierFee?: number;
8
+ orderTotal?: number;
9
+ orderDetails?: string;
10
+ ifoodLocalizer?: string;
11
+ deliveryPoint: {
12
+ address: string;
13
+ street?: string;
14
+ houseNumber?: string;
15
+ postalCode: string;
16
+ coordinates?: {
17
+ lat: number;
18
+ lng: number;
19
+ };
20
+ city?: string;
21
+ region?: string;
22
+ country?: string;
23
+ complement?: string;
24
+ };
25
+ customer?: {
26
+ customerPhone?: string;
27
+ customerName?: string;
28
+ customerEmail?: string;
29
+ };
30
+ date?: string;
31
+ }
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CreateFoodyOrderDto = void 0;
4
+ class CreateFoodyOrderDto {
5
+ id;
6
+ status;
7
+ deliveryFee;
8
+ paymentMethod;
9
+ notes;
10
+ courierFee;
11
+ orderTotal;
12
+ orderDetails;
13
+ ifoodLocalizer;
14
+ deliveryPoint;
15
+ customer;
16
+ date;
17
+ }
18
+ exports.CreateFoodyOrderDto = CreateFoodyOrderDto;
19
+ //# sourceMappingURL=create-foody-order.dto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-foody-order.dto.js","sourceRoot":"","sources":["../../../../lib/logistics/foody/dto/create-foody-order.dto.ts"],"names":[],"mappings":";;;AAAA,MAAa,mBAAmB;IAC9B,EAAE,CAAS;IACX,MAAM,CAAmB;IACzB,WAAW,CAAU;IACrB,aAAa,CAME;IACf,KAAK,CAAU;IACf,UAAU,CAAU;IACpB,UAAU,CAAU;IACpB,YAAY,CAAU;IACtB,cAAc,CAAU;IACxB,aAAa,CAaX;IACF,QAAQ,CAIN;IACF,IAAI,CAAU;CACf;AApCD,kDAoCC"}
@@ -0,0 +1,15 @@
1
+ import { FromSchema } from 'json-schema-to-ts';
2
+ export declare const FOODY_CONFIG_SCHEMA: {
3
+ readonly $schema: "http://json-schema.org/draft-07/schema#";
4
+ readonly title: "Foody Delivery Configuration";
5
+ readonly type: "object";
6
+ readonly properties: {
7
+ readonly authorizationToken: {
8
+ readonly type: "string";
9
+ readonly title: "Token de autorização";
10
+ readonly description: "Token de autorização a ser enviado no header 'Authorization'";
11
+ };
12
+ };
13
+ readonly required: readonly ["authorizationToken"];
14
+ };
15
+ export type FoodyConfig = FromSchema<typeof FOODY_CONFIG_SCHEMA>;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FOODY_CONFIG_SCHEMA = void 0;
4
+ exports.FOODY_CONFIG_SCHEMA = {
5
+ $schema: 'http://json-schema.org/draft-07/schema#',
6
+ title: 'Foody Delivery Configuration',
7
+ type: 'object',
8
+ properties: {
9
+ authorizationToken: {
10
+ type: 'string',
11
+ title: 'Token de autorização',
12
+ description: "Token de autorização a ser enviado no header 'Authorization'",
13
+ },
14
+ },
15
+ required: ['authorizationToken'],
16
+ };
17
+ //# sourceMappingURL=foody.config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"foody.config.js","sourceRoot":"","sources":["../../../lib/logistics/foody/foody.config.ts"],"names":[],"mappings":";;;AAEa,QAAA,mBAAmB,GAAG;IACjC,OAAO,EAAE,yCAAyC;IAClD,KAAK,EAAE,8BAA8B;IACrC,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,kBAAkB,EAAE;YAClB,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,sBAAsB;YAC7B,WAAW,EACT,8DAA8D;SACjE;KACF;IACD,QAAQ,EAAE,CAAC,oBAAoB,CAAC;CACH,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { EventsService, OrderOutputIntegration, Order } from '../../core/index.js';
2
+ import { FoodyConfig } from './foody.config';
3
+ import { CreateFoodyOrderDto } from './dto/create-foody-order.dto';
4
+ import { HttpService } from '@nestjs/axios';
5
+ export declare class FoodyOrderOutput implements OrderOutputIntegration<FoodyConfig> {
6
+ readonly eventsService: EventsService;
7
+ private readonly httpService;
8
+ private readonly logger;
9
+ private readonly BASE_URL;
10
+ private readonly dispatchEvent;
11
+ constructor(eventsService: EventsService, httpService: HttpService);
12
+ onOrderCreated(order: Order, config: FoodyConfig): Promise<void>;
13
+ transformPayment(order: Order): 'money' | 'card' | 'online' | 'on_credit' | 'pix' | 'e_wallet';
14
+ transformOrder(order: Order): CreateFoodyOrderDto;
15
+ }
@@ -0,0 +1,148 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var FoodyOrderOutput_1;
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.FoodyOrderOutput = void 0;
14
+ const common_1 = require("@nestjs/common");
15
+ const core_1 = require("../../core/index.js");
16
+ const foody_config_1 = require("./foody.config");
17
+ const axios_1 = require("@nestjs/axios");
18
+ const rxjs_1 = require("rxjs");
19
+ const axios_2 = require("axios");
20
+ let FoodyOrderOutput = FoodyOrderOutput_1 = class FoodyOrderOutput {
21
+ eventsService;
22
+ httpService;
23
+ logger = new common_1.Logger(FoodyOrderOutput_1.name);
24
+ BASE_URL = 'https://app.foodydelivery.com/rest/1.2';
25
+ dispatchEvent;
26
+ constructor(eventsService, httpService) {
27
+ this.eventsService = eventsService;
28
+ this.httpService = httpService;
29
+ this.dispatchEvent = eventsService.createDispatcherFor('Foody', 'OrderOutput');
30
+ }
31
+ async onOrderCreated(order, config) {
32
+ this.logger.verbose('onOrderCreated: iniciando integração');
33
+ if (order.type != 'DELIVERY') {
34
+ this.logger.verbose('Ignorando pedido com tipo diferente de DELIVERY');
35
+ return;
36
+ }
37
+ try {
38
+ this.dispatchEvent({ eventType: 'INTEGRATION_INITIATED' });
39
+ this.logger.debug(`onOrderCreated: Transformando o pedido com id: ${order.id}`);
40
+ this.dispatchEvent({ eventType: 'INTEGRATION_PROCESSING' });
41
+ const body = this.transformOrder(order);
42
+ this.logger.debug('onOrderCreated: Pedido transformado', body);
43
+ this.logger.verbose('onOrderCreated: Enviando requisição para Foody');
44
+ const { data } = await (0, rxjs_1.firstValueFrom)(this.httpService.post(`${this.BASE_URL}/orders`, body, {
45
+ headers: { Authorization: config.authorizationToken },
46
+ }));
47
+ this.logger.debug('onOrderCreated: Resposta do Foody', data);
48
+ this.dispatchEvent({
49
+ eventType: 'INTEGRATION_COMPLETED',
50
+ metadata: { data },
51
+ });
52
+ }
53
+ catch (error) {
54
+ if ((0, axios_2.isAxiosError)(error)) {
55
+ this.logger.error('onOrderCreated: falha ao realizar requisição no Foody', JSON.stringify(error.response?.data));
56
+ this.dispatchEvent({
57
+ eventType: 'INTEGRATION_FAILED',
58
+ metadata: { error: error.response?.data },
59
+ });
60
+ }
61
+ else {
62
+ this.dispatchEvent({
63
+ eventType: 'INTEGRATION_FAILED',
64
+ metadata: { error },
65
+ });
66
+ this.logger.error('onOrderCreated: falha ao criar pedido no Foody', error);
67
+ }
68
+ }
69
+ }
70
+ transformPayment(order) {
71
+ if (order.payments.prepaid && order.payments.pending === 0) {
72
+ return 'online';
73
+ }
74
+ if (order.payments.methods.length) {
75
+ const method = order.payments.methods[0];
76
+ switch (method.method) {
77
+ case 'CASH':
78
+ return 'money';
79
+ case 'DEBIT':
80
+ case 'MEAL_VOUCHER':
81
+ case 'FOOD_VOUCHER':
82
+ case 'CREDIT_DEBIT':
83
+ case 'COUPON':
84
+ case 'REDEEM':
85
+ case 'PREPAID_REDEEM':
86
+ case 'OTHER':
87
+ case 'CREDIT':
88
+ return 'card';
89
+ case 'DIGITAL_WALLET':
90
+ return 'e_wallet';
91
+ case 'PIX':
92
+ return 'pix';
93
+ }
94
+ }
95
+ this.logger.warn(`Não foi possível transformar o método de pagamento`, order.payments);
96
+ return 'card';
97
+ }
98
+ transformOrder(order) {
99
+ const { delivery } = order;
100
+ if (!delivery || !delivery.deliveryAddress) {
101
+ throw new core_1.InvalidOrderException('Pedido não contém informações sobre delivery', 'delivery');
102
+ }
103
+ const deliveryFee = order.otherFees.find((fee) => fee.type === 'SERVICE_FEE');
104
+ return {
105
+ id: order.id,
106
+ status: 'open',
107
+ deliveryFee: deliveryFee?.price.value,
108
+ paymentMethod: this.transformPayment(order),
109
+ deliveryPoint: {
110
+ address: delivery.deliveryAddress.formattedAddress,
111
+ street: delivery.deliveryAddress.street,
112
+ houseNumber: delivery.deliveryAddress.number,
113
+ city: delivery.deliveryAddress.city,
114
+ complement: delivery.deliveryAddress.complement,
115
+ region: delivery.deliveryAddress.district,
116
+ postalCode: delivery.deliveryAddress.postalCode.replace(/\D/g, ''),
117
+ country: 'BR',
118
+ coordinates: {
119
+ lat: delivery.deliveryAddress.coordinates.latitude,
120
+ lng: delivery.deliveryAddress.coordinates.longitude,
121
+ },
122
+ },
123
+ date: order.createdAt,
124
+ customer: {
125
+ customerName: order.customer?.name,
126
+ customerPhone: `+55${order.customer?.phone?.number?.replace(/\D/g, '')}`,
127
+ },
128
+ orderTotal: order.total.orderAmount.value,
129
+ };
130
+ }
131
+ };
132
+ exports.FoodyOrderOutput = FoodyOrderOutput;
133
+ exports.FoodyOrderOutput = FoodyOrderOutput = FoodyOrderOutput_1 = __decorate([
134
+ (0, core_1.RegistryIntegration)({
135
+ id: 'foody-delivery',
136
+ type: 'OrderOutput',
137
+ title: 'Foody Delivery',
138
+ category: 'Logistics',
139
+ description: 'Sistema de logística urbana pioneiro do mercado, simplificando operações desde 2015 para estabelecimentos de delivery e empresas de entregas',
140
+ logoUrl: 'https://foodydelivery.com/wp-content/uploads/2021/02/Logo-Foody-retangular-300x100.png',
141
+ websiteUrl: 'https://foodydelivery.com/',
142
+ configSchema: foody_config_1.FOODY_CONFIG_SCHEMA,
143
+ }),
144
+ (0, common_1.Injectable)(),
145
+ __metadata("design:paramtypes", [core_1.EventsService,
146
+ axios_1.HttpService])
147
+ ], FoodyOrderOutput);
148
+ //# sourceMappingURL=foody.order-output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"foody.order-output.js","sourceRoot":"","sources":["../../../lib/logistics/foody/foody.order-output.ts"],"names":[],"mappings":"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"}