@novha/anlia-core-lib 0.1.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 (233) hide show
  1. package/cdk/bin/infrastructure.ts +18 -0
  2. package/cdk/bin/project-names.ts +7 -0
  3. package/cdk/lib/infrastructure.ts +37 -0
  4. package/cdk.json +70 -0
  5. package/dist/cdk/bin/infrastructure.d.ts +1 -0
  6. package/dist/cdk/bin/infrastructure.js +20 -0
  7. package/dist/cdk/bin/project-names.d.ts +6 -0
  8. package/dist/cdk/bin/project-names.js +4 -0
  9. package/dist/cdk/lib/infrastructure.d.ts +6 -0
  10. package/dist/cdk/lib/infrastructure.js +32 -0
  11. package/dist/src/enums/domain/DayOfWeek.d.ts +9 -0
  12. package/dist/src/enums/domain/DayOfWeek.js +13 -0
  13. package/dist/src/enums/domain/Delivery.d.ts +19 -0
  14. package/dist/src/enums/domain/Delivery.js +24 -0
  15. package/dist/src/enums/domain/Employee.d.ts +12 -0
  16. package/dist/src/enums/domain/Employee.js +16 -0
  17. package/dist/src/enums/domain/Ingredient.d.ts +31 -0
  18. package/dist/src/enums/domain/Ingredient.js +37 -0
  19. package/dist/src/enums/domain/Inventory.d.ts +29 -0
  20. package/dist/src/enums/domain/Inventory.js +36 -0
  21. package/dist/src/enums/domain/Kitchen.d.ts +49 -0
  22. package/dist/src/enums/domain/Kitchen.js +59 -0
  23. package/dist/src/enums/domain/Menu.d.ts +13 -0
  24. package/dist/src/enums/domain/Menu.js +18 -0
  25. package/dist/src/enums/domain/Payments.d.ts +21 -0
  26. package/dist/src/enums/domain/Payments.js +26 -0
  27. package/dist/src/enums/domain/Recipe.d.ts +14 -0
  28. package/dist/src/enums/domain/Recipe.js +19 -0
  29. package/dist/src/enums/domain/Reservation.d.ts +17 -0
  30. package/dist/src/enums/domain/Reservation.js +22 -0
  31. package/dist/src/enums/domain/Restaurant.d.ts +39 -0
  32. package/dist/src/enums/domain/Restaurant.js +45 -0
  33. package/dist/src/enums/domain/Table.d.ts +23 -0
  34. package/dist/src/enums/domain/Table.js +29 -0
  35. package/dist/src/enums/domain/Vendors.d.ts +29 -0
  36. package/dist/src/enums/domain/Vendors.js +35 -0
  37. package/dist/src/enums/index.d.ts +13 -0
  38. package/dist/src/enums/index.js +29 -0
  39. package/dist/src/eventBridge/EventBridgeModule.d.ts +2 -0
  40. package/dist/src/eventBridge/EventBridgeModule.js +26 -0
  41. package/dist/src/eventBridge/domain/EventBridgeOptions.d.ts +8 -0
  42. package/dist/src/eventBridge/domain/EventBridgeOptions.js +2 -0
  43. package/dist/src/eventBridge/ioc/index.d.ts +3 -0
  44. package/dist/src/eventBridge/ioc/index.js +6 -0
  45. package/dist/src/eventBridge/ioc.d.ts +3 -0
  46. package/dist/src/eventBridge/ioc.js +6 -0
  47. package/dist/src/eventBridge/service/EventBridgeService.d.ts +5 -0
  48. package/dist/src/eventBridge/service/EventBridgeService.js +2 -0
  49. package/dist/src/eventBridge/service/EventBridgeServiceImpl.d.ts +13 -0
  50. package/dist/src/eventBridge/service/EventBridgeServiceImpl.js +63 -0
  51. package/dist/src/events/domain/CustomerEvents.d.ts +54 -0
  52. package/dist/src/events/domain/CustomerEvents.js +2 -0
  53. package/dist/src/events/domain/DeliveryEvents.d.ts +61 -0
  54. package/dist/src/events/domain/DeliveryEvents.js +2 -0
  55. package/dist/src/events/domain/DomainEvent.d.ts +12 -0
  56. package/dist/src/events/domain/DomainEvent.js +2 -0
  57. package/dist/src/events/domain/DomainEventType.d.ts +119 -0
  58. package/dist/src/events/domain/DomainEventType.js +136 -0
  59. package/dist/src/events/domain/EmployeeEvents.d.ts +51 -0
  60. package/dist/src/events/domain/EmployeeEvents.js +2 -0
  61. package/dist/src/events/domain/InventoryEvents.d.ts +141 -0
  62. package/dist/src/events/domain/InventoryEvents.js +2 -0
  63. package/dist/src/events/domain/OrderEvents.d.ts +105 -0
  64. package/dist/src/events/domain/OrderEvents.js +2 -0
  65. package/dist/src/events/domain/PaymentEvents.d.ts +73 -0
  66. package/dist/src/events/domain/PaymentEvents.js +2 -0
  67. package/dist/src/events/domain/RecipeEvents.d.ts +45 -0
  68. package/dist/src/events/domain/RecipeEvents.js +2 -0
  69. package/dist/src/events/domain/ReservationEvents.d.ts +93 -0
  70. package/dist/src/events/domain/ReservationEvents.js +2 -0
  71. package/dist/src/events/domain/RestaurantEvents.d.ts +62 -0
  72. package/dist/src/events/domain/RestaurantEvents.js +2 -0
  73. package/dist/src/events/domain/TableEvents.d.ts +71 -0
  74. package/dist/src/events/domain/TableEvents.js +2 -0
  75. package/dist/src/events/domain/VendorEvents.d.ts +28 -0
  76. package/dist/src/events/domain/VendorEvents.js +2 -0
  77. package/dist/src/events/index.d.ts +13 -0
  78. package/dist/src/events/index.js +29 -0
  79. package/dist/src/index.d.ts +4 -0
  80. package/dist/src/index.js +20 -0
  81. package/dist/src/interfaces/Address.d.ts +7 -0
  82. package/dist/src/interfaces/Address.js +2 -0
  83. package/dist/src/interfaces/Customer.d.ts +21 -0
  84. package/dist/src/interfaces/Customer.js +2 -0
  85. package/dist/src/interfaces/Delivery.d.ts +62 -0
  86. package/dist/src/interfaces/Delivery.js +2 -0
  87. package/dist/src/interfaces/Employee.d.ts +19 -0
  88. package/dist/src/interfaces/Employee.js +2 -0
  89. package/dist/src/interfaces/Ingredient.d.ts +42 -0
  90. package/dist/src/interfaces/Ingredient.js +2 -0
  91. package/dist/src/interfaces/Inventory.d.ts +26 -0
  92. package/dist/src/interfaces/Inventory.js +2 -0
  93. package/dist/src/interfaces/Kitchen.d.ts +72 -0
  94. package/dist/src/interfaces/Kitchen.js +2 -0
  95. package/dist/src/interfaces/Location.d.ts +14 -0
  96. package/dist/src/interfaces/Location.js +2 -0
  97. package/dist/src/interfaces/Menu.d.ts +72 -0
  98. package/dist/src/interfaces/Menu.js +2 -0
  99. package/dist/src/interfaces/Money.d.ts +5 -0
  100. package/dist/src/interfaces/Money.js +2 -0
  101. package/dist/src/interfaces/OpeningHours.d.ts +7 -0
  102. package/dist/src/interfaces/OpeningHours.js +2 -0
  103. package/dist/src/interfaces/Payment.d.ts +36 -0
  104. package/dist/src/interfaces/Payment.js +2 -0
  105. package/dist/src/interfaces/Recipe.d.ts +58 -0
  106. package/dist/src/interfaces/Recipe.js +2 -0
  107. package/dist/src/interfaces/Resevation.d.ts +25 -0
  108. package/dist/src/interfaces/Resevation.js +2 -0
  109. package/dist/src/interfaces/Restaurant.d.ts +24 -0
  110. package/dist/src/interfaces/Restaurant.js +2 -0
  111. package/dist/src/interfaces/Table.d.ts +54 -0
  112. package/dist/src/interfaces/Table.js +2 -0
  113. package/dist/src/interfaces/Vendor.d.ts +19 -0
  114. package/dist/src/interfaces/Vendor.js +2 -0
  115. package/dist/src/interfaces/domain/Address.d.ts +7 -0
  116. package/dist/src/interfaces/domain/Address.js +2 -0
  117. package/dist/src/interfaces/domain/Customer.d.ts +21 -0
  118. package/dist/src/interfaces/domain/Customer.js +2 -0
  119. package/dist/src/interfaces/domain/Delivery.d.ts +62 -0
  120. package/dist/src/interfaces/domain/Delivery.js +2 -0
  121. package/dist/src/interfaces/domain/Employee.d.ts +19 -0
  122. package/dist/src/interfaces/domain/Employee.js +2 -0
  123. package/dist/src/interfaces/domain/Ingredient.d.ts +42 -0
  124. package/dist/src/interfaces/domain/Ingredient.js +2 -0
  125. package/dist/src/interfaces/domain/Inventory.d.ts +26 -0
  126. package/dist/src/interfaces/domain/Inventory.js +2 -0
  127. package/dist/src/interfaces/domain/Kitchen.d.ts +72 -0
  128. package/dist/src/interfaces/domain/Kitchen.js +2 -0
  129. package/dist/src/interfaces/domain/Location.d.ts +14 -0
  130. package/dist/src/interfaces/domain/Location.js +2 -0
  131. package/dist/src/interfaces/domain/Menu.d.ts +72 -0
  132. package/dist/src/interfaces/domain/Menu.js +2 -0
  133. package/dist/src/interfaces/domain/Money.d.ts +5 -0
  134. package/dist/src/interfaces/domain/Money.js +2 -0
  135. package/dist/src/interfaces/domain/OpeningHours.d.ts +7 -0
  136. package/dist/src/interfaces/domain/OpeningHours.js +2 -0
  137. package/dist/src/interfaces/domain/Payment.d.ts +36 -0
  138. package/dist/src/interfaces/domain/Payment.js +2 -0
  139. package/dist/src/interfaces/domain/Recipe.d.ts +58 -0
  140. package/dist/src/interfaces/domain/Recipe.js +2 -0
  141. package/dist/src/interfaces/domain/Reservation.d.ts +25 -0
  142. package/dist/src/interfaces/domain/Reservation.js +2 -0
  143. package/dist/src/interfaces/domain/Restaurant.d.ts +24 -0
  144. package/dist/src/interfaces/domain/Restaurant.js +2 -0
  145. package/dist/src/interfaces/domain/Table.d.ts +54 -0
  146. package/dist/src/interfaces/domain/Table.js +2 -0
  147. package/dist/src/interfaces/domain/Vendor.d.ts +19 -0
  148. package/dist/src/interfaces/domain/Vendor.js +2 -0
  149. package/dist/src/interfaces/index.d.ts +17 -0
  150. package/dist/src/interfaces/index.js +33 -0
  151. package/dist/src/orders/OrderModule.d.ts +2 -0
  152. package/dist/src/orders/OrderModule.js +28 -0
  153. package/dist/src/orders/domain/Enums.d.ts +16 -0
  154. package/dist/src/orders/domain/Enums.js +21 -0
  155. package/dist/src/orders/domain/Order.d.ts +89 -0
  156. package/dist/src/orders/domain/Order.js +2 -0
  157. package/dist/src/orders/domain/OrderItem.d.ts +53 -0
  158. package/dist/src/orders/domain/OrderItem.js +2 -0
  159. package/dist/src/orders/domain/posDto/SquareOrder.d.ts +347 -0
  160. package/dist/src/orders/domain/posDto/SquareOrder.js +8 -0
  161. package/dist/src/orders/index.d.ts +7 -0
  162. package/dist/src/orders/index.js +25 -0
  163. package/dist/src/orders/ioc/index.d.ts +3 -0
  164. package/dist/src/orders/ioc/index.js +6 -0
  165. package/dist/src/orders/services/square/SquareOrderService.d.ts +22 -0
  166. package/dist/src/orders/services/square/SquareOrderService.js +4 -0
  167. package/dist/src/orders/services/square/SquareOrderServiceImpl.d.ts +32 -0
  168. package/dist/src/orders/services/square/SquareOrderServiceImpl.js +308 -0
  169. package/jest.config.js +8 -0
  170. package/package.json +43 -0
  171. package/src/enums/domain/DayOfWeek.ts +9 -0
  172. package/src/enums/domain/Delivery.ts +20 -0
  173. package/src/enums/domain/Employee.ts +12 -0
  174. package/src/enums/domain/Ingredient.ts +33 -0
  175. package/src/enums/domain/Inventory.ts +39 -0
  176. package/src/enums/domain/Kitchen.ts +89 -0
  177. package/src/enums/domain/Menu.ts +14 -0
  178. package/src/enums/domain/Payments.ts +41 -0
  179. package/src/enums/domain/Recipe.ts +15 -0
  180. package/src/enums/domain/Reservation.ts +18 -0
  181. package/src/enums/domain/Restaurant.ts +41 -0
  182. package/src/enums/domain/Table.ts +39 -0
  183. package/src/enums/domain/Vendors.ts +45 -0
  184. package/src/enums/index.ts +13 -0
  185. package/src/eventBridge/EventBridgeModule.ts +14 -0
  186. package/src/eventBridge/domain/EventBridgeOptions.ts +8 -0
  187. package/src/eventBridge/ioc/index.ts +3 -0
  188. package/src/eventBridge/ioc.ts +3 -0
  189. package/src/eventBridge/service/EventBridgeService.ts +8 -0
  190. package/src/eventBridge/service/EventBridgeServiceImpl.ts +67 -0
  191. package/src/events/domain/CustomerEvents.ts +79 -0
  192. package/src/events/domain/DeliveryEvents.ts +82 -0
  193. package/src/events/domain/DomainEvent.ts +17 -0
  194. package/src/events/domain/DomainEventType.ts +143 -0
  195. package/src/events/domain/EmployeeEvents.ts +74 -0
  196. package/src/events/domain/InventoryEvents.ts +184 -0
  197. package/src/events/domain/OrderEvents.ts +142 -0
  198. package/src/events/domain/PaymentEvents.ts +92 -0
  199. package/src/events/domain/RecipeEvents.ts +64 -0
  200. package/src/events/domain/ReservationEvents.ts +133 -0
  201. package/src/events/domain/RestaurantEvents.ts +89 -0
  202. package/src/events/domain/TableEvents.ts +102 -0
  203. package/src/events/domain/VendorEvents.ts +42 -0
  204. package/src/events/index.ts +13 -0
  205. package/src/index.ts +4 -0
  206. package/src/interfaces/domain/Address.ts +7 -0
  207. package/src/interfaces/domain/Customer.ts +33 -0
  208. package/src/interfaces/domain/Delivery.ts +96 -0
  209. package/src/interfaces/domain/Employee.ts +29 -0
  210. package/src/interfaces/domain/Ingredient.ts +68 -0
  211. package/src/interfaces/domain/Inventory.ts +52 -0
  212. package/src/interfaces/domain/Kitchen.ts +128 -0
  213. package/src/interfaces/domain/Location.ts +20 -0
  214. package/src/interfaces/domain/Menu.ts +121 -0
  215. package/src/interfaces/domain/Money.ts +6 -0
  216. package/src/interfaces/domain/OpeningHours.ts +11 -0
  217. package/src/interfaces/domain/Payment.ts +45 -0
  218. package/src/interfaces/domain/Recipe.ts +91 -0
  219. package/src/interfaces/domain/Reservation.ts +45 -0
  220. package/src/interfaces/domain/Restaurant.ts +45 -0
  221. package/src/interfaces/domain/Table.ts +69 -0
  222. package/src/interfaces/domain/Vendor.ts +35 -0
  223. package/src/interfaces/index.ts +17 -0
  224. package/src/orders/OrderModule.ts +17 -0
  225. package/src/orders/domain/Enums.ts +17 -0
  226. package/src/orders/domain/Order.ts +109 -0
  227. package/src/orders/domain/OrderItem.ts +68 -0
  228. package/src/orders/domain/posDto/SquareOrder.ts +346 -0
  229. package/src/orders/index.ts +7 -0
  230. package/src/orders/ioc/index.ts +3 -0
  231. package/src/orders/services/square/SquareOrderService.ts +27 -0
  232. package/src/orders/services/square/SquareOrderServiceImpl.ts +330 -0
  233. package/tsconfig.json +18 -0
@@ -0,0 +1,308 @@
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 __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.SquareOrderServiceImpl = void 0;
16
+ const common_1 = require("@nestjs/common");
17
+ const crypto_1 = require("crypto");
18
+ const Enums_1 = require("../../domain/Enums");
19
+ const Payments_1 = require("../../../enums/domain/Payments");
20
+ const Vendors_1 = require("../../../enums/domain/Vendors");
21
+ const ioc_1 = require("../../../eventBridge/ioc");
22
+ const DomainEventType_1 = require("../../../events/domain/DomainEventType");
23
+ let SquareOrderServiceImpl = class SquareOrderServiceImpl {
24
+ constructor(eventBridge) {
25
+ this.eventBridge = eventBridge;
26
+ }
27
+ // ─── Order lifecycle ──────────────────────────────────────────────────────
28
+ async createOrder(order) {
29
+ const items = (order.line_items ?? []).map((item, i) => this.mapSquareLineItem(item, i));
30
+ const payments = this.mapSquarePayments(order);
31
+ const net = order.net_amounts;
32
+ const result = {
33
+ id: order.id,
34
+ externalId: order.id,
35
+ restaurantId: order.location_id,
36
+ locationId: order.location_id,
37
+ vendor: {
38
+ id: Vendors_1.Vendor.SQUARE,
39
+ restaurantId: order.location_id,
40
+ name: "Square",
41
+ vendorCode: Vendors_1.Vendor.SQUARE,
42
+ type: Vendors_1.VendorType.TECHNOLOGY,
43
+ status: Vendors_1.VendorStatus.ACTIVE,
44
+ createdAt: new Date(),
45
+ updatedAt: new Date(),
46
+ },
47
+ customer: order.customer_id ? { id: order.customer_id } : undefined,
48
+ items,
49
+ status: this.mapSquareOrderStatus(order.state),
50
+ type: this.mapSquareOrderType(order),
51
+ subtotal: this.toMoney(net?.total_money ?? order.total_money),
52
+ discount: this.toMoney(net?.discount_money ?? order.total_discount_money),
53
+ tax: this.toMoney(net?.tax_money ?? order.total_tax_money),
54
+ tip: this.toMoney(net?.tip_money ?? order.total_tip_money),
55
+ total: this.toMoney(order.total_money),
56
+ payments,
57
+ createdAt: order.created_at ? new Date(order.created_at) : new Date(),
58
+ updatedAt: order.updated_at ? new Date(order.updated_at) : new Date(),
59
+ completedAt: order.closed_at ? new Date(order.closed_at) : undefined,
60
+ };
61
+ const event = {
62
+ ...this.baseEvent(result.id, result.restaurantId),
63
+ eventType: DomainEventType_1.DomainEventType.OrderCreated,
64
+ aggregateType: DomainEventType_1.AggregateType.Order,
65
+ order: result,
66
+ };
67
+ await this.eventBridge.publish(event);
68
+ return result;
69
+ }
70
+ async updateOrder(orderId, restaurantId, before, after) {
71
+ const event = {
72
+ ...this.baseEvent(orderId, restaurantId),
73
+ eventType: DomainEventType_1.DomainEventType.OrderUpdated,
74
+ aggregateType: DomainEventType_1.AggregateType.Order,
75
+ before,
76
+ after,
77
+ };
78
+ await this.eventBridge.publish(event);
79
+ }
80
+ async submitOrder(orderId, restaurantId, submittedBy) {
81
+ const event = {
82
+ ...this.baseEvent(orderId, restaurantId),
83
+ eventType: DomainEventType_1.DomainEventType.OrderSubmitted,
84
+ aggregateType: DomainEventType_1.AggregateType.Order,
85
+ submittedAt: new Date(),
86
+ submittedBy,
87
+ };
88
+ await this.eventBridge.publish(event);
89
+ }
90
+ async confirmOrder(orderId, restaurantId, confirmedBy) {
91
+ const event = {
92
+ ...this.baseEvent(orderId, restaurantId),
93
+ eventType: DomainEventType_1.DomainEventType.OrderConfirmed,
94
+ aggregateType: DomainEventType_1.AggregateType.Order,
95
+ confirmedAt: new Date(),
96
+ confirmedBy,
97
+ };
98
+ await this.eventBridge.publish(event);
99
+ }
100
+ async rejectOrder(orderId, restaurantId, reason, rejectedBy) {
101
+ const event = {
102
+ ...this.baseEvent(orderId, restaurantId),
103
+ eventType: DomainEventType_1.DomainEventType.OrderRejected,
104
+ aggregateType: DomainEventType_1.AggregateType.Order,
105
+ reason,
106
+ rejectedAt: new Date(),
107
+ rejectedBy,
108
+ };
109
+ await this.eventBridge.publish(event);
110
+ }
111
+ async cancelOrder(orderId, restaurantId, previousStatus, reason, cancelledBy) {
112
+ const event = {
113
+ ...this.baseEvent(orderId, restaurantId),
114
+ eventType: DomainEventType_1.DomainEventType.OrderCancelled,
115
+ aggregateType: DomainEventType_1.AggregateType.Order,
116
+ previousStatus,
117
+ reason,
118
+ cancelledAt: new Date(),
119
+ cancelledBy,
120
+ };
121
+ await this.eventBridge.publish(event);
122
+ }
123
+ async completeOrder(orderId, restaurantId, completedBy) {
124
+ const event = {
125
+ ...this.baseEvent(orderId, restaurantId),
126
+ eventType: DomainEventType_1.DomainEventType.OrderCompleted,
127
+ aggregateType: DomainEventType_1.AggregateType.Order,
128
+ completedAt: new Date(),
129
+ completedBy,
130
+ };
131
+ await this.eventBridge.publish(event);
132
+ }
133
+ async reopenOrder(orderId, restaurantId, previousStatus, reason, reopenedBy) {
134
+ const event = {
135
+ ...this.baseEvent(orderId, restaurantId),
136
+ eventType: DomainEventType_1.DomainEventType.OrderReopened,
137
+ aggregateType: DomainEventType_1.AggregateType.Order,
138
+ previousStatus,
139
+ reason,
140
+ reopenedAt: new Date(),
141
+ reopenedBy,
142
+ };
143
+ await this.eventBridge.publish(event);
144
+ }
145
+ async closeOrder(orderId, restaurantId, closedBy) {
146
+ const event = {
147
+ ...this.baseEvent(orderId, restaurantId),
148
+ eventType: DomainEventType_1.DomainEventType.OrderClosed,
149
+ aggregateType: DomainEventType_1.AggregateType.Order,
150
+ closedAt: new Date(),
151
+ closedBy,
152
+ };
153
+ await this.eventBridge.publish(event);
154
+ }
155
+ // ─── Order items ──────────────────────────────────────────────────────────
156
+ async addOrderItem(orderId, restaurantId, item, addedBy) {
157
+ const event = {
158
+ ...this.baseEvent(orderId, restaurantId),
159
+ eventType: DomainEventType_1.DomainEventType.OrderItemAdded,
160
+ aggregateType: DomainEventType_1.AggregateType.Order,
161
+ item,
162
+ addedBy,
163
+ };
164
+ await this.eventBridge.publish(event);
165
+ }
166
+ async updateOrderItem(orderId, restaurantId, before, after, updatedBy) {
167
+ const event = {
168
+ ...this.baseEvent(orderId, restaurantId),
169
+ eventType: DomainEventType_1.DomainEventType.OrderItemUpdated,
170
+ aggregateType: DomainEventType_1.AggregateType.Order,
171
+ before,
172
+ after,
173
+ updatedBy,
174
+ };
175
+ await this.eventBridge.publish(event);
176
+ }
177
+ async removeOrderItem(orderId, restaurantId, itemId, reason, removedBy) {
178
+ const event = {
179
+ ...this.baseEvent(orderId, restaurantId),
180
+ eventType: DomainEventType_1.DomainEventType.OrderItemRemoved,
181
+ aggregateType: DomainEventType_1.AggregateType.Order,
182
+ itemId,
183
+ reason,
184
+ removedBy,
185
+ };
186
+ await this.eventBridge.publish(event);
187
+ }
188
+ async markOrderItemPrepared(orderId, restaurantId, itemId, preparedBy) {
189
+ const event = {
190
+ ...this.baseEvent(orderId, restaurantId),
191
+ eventType: DomainEventType_1.DomainEventType.OrderItemPrepared,
192
+ aggregateType: DomainEventType_1.AggregateType.Order,
193
+ itemId,
194
+ preparedAt: new Date(),
195
+ preparedBy,
196
+ };
197
+ await this.eventBridge.publish(event);
198
+ }
199
+ async markOrderItemServed(orderId, restaurantId, itemId, servedBy) {
200
+ const event = {
201
+ ...this.baseEvent(orderId, restaurantId),
202
+ eventType: DomainEventType_1.DomainEventType.OrderItemServed,
203
+ aggregateType: DomainEventType_1.AggregateType.Order,
204
+ itemId,
205
+ servedAt: new Date(),
206
+ servedBy,
207
+ };
208
+ await this.eventBridge.publish(event);
209
+ }
210
+ async voidOrderItem(orderId, restaurantId, itemId, reason, voidedBy) {
211
+ const event = {
212
+ ...this.baseEvent(orderId, restaurantId),
213
+ eventType: DomainEventType_1.DomainEventType.OrderItemVoided,
214
+ aggregateType: DomainEventType_1.AggregateType.Order,
215
+ itemId,
216
+ reason,
217
+ voidedAt: new Date(),
218
+ voidedBy,
219
+ };
220
+ await this.eventBridge.publish(event);
221
+ }
222
+ // ─── Private helpers ──────────────────────────────────────────────────────
223
+ baseEvent(aggregateId, restaurantId) {
224
+ return {
225
+ eventId: (0, crypto_1.randomUUID)(),
226
+ aggregateId,
227
+ restaurantId,
228
+ version: 1,
229
+ occurredAt: new Date(),
230
+ };
231
+ }
232
+ toMoney(m) {
233
+ return {
234
+ amount: m?.amount ?? 0,
235
+ currency: (m?.currency ?? "USD"),
236
+ };
237
+ }
238
+ mapSquareOrderType(order) {
239
+ const fulfillment = order.fulfillments?.[0];
240
+ switch (fulfillment?.type) {
241
+ case "DELIVERY":
242
+ case "SHIPMENT": return Enums_1.OrderType.DELIVERY;
243
+ case "PICKUP": {
244
+ if (fulfillment.pickup_details?.is_curbside_pickup)
245
+ return Enums_1.OrderType.CURBSIDE;
246
+ return Enums_1.OrderType.TAKEAWAY;
247
+ }
248
+ default: return Enums_1.OrderType.DINE_IN;
249
+ }
250
+ }
251
+ mapSquareOrderStatus(state) {
252
+ switch (state) {
253
+ case "OPEN": return Enums_1.OrderStatus.IN_PROGRESS;
254
+ case "COMPLETED": return Enums_1.OrderStatus.COMPLETED;
255
+ case "CANCELED": return Enums_1.OrderStatus.CANCELLED;
256
+ default: return Enums_1.OrderStatus.PENDING;
257
+ }
258
+ }
259
+ mapSquareTenderType(type) {
260
+ switch (type) {
261
+ case "CASH": return Payments_1.PaymentMethod.CASH;
262
+ case "CARD":
263
+ case "THIRD_PARTY_CARD": return Payments_1.PaymentMethod.CREDIT_CARD;
264
+ case "SQUARE_GIFT_CARD": return Payments_1.PaymentMethod.GIFT_CARD;
265
+ case "WALLET": return Payments_1.PaymentMethod.MOBILE_PAYMENT;
266
+ case "BANK_ACCOUNT": return Payments_1.PaymentMethod.BANK_TRANSFER;
267
+ default: return Payments_1.PaymentMethod.OTHER;
268
+ }
269
+ }
270
+ mapSquareLineItem(item, index) {
271
+ const modifiers = (item.modifiers ?? []).map((mod, i) => ({
272
+ id: mod.uid ?? `mod-${i}`,
273
+ name: mod.name ?? "",
274
+ quantity: mod.quantity !== undefined ? parseFloat(mod.quantity) : undefined,
275
+ price: mod.base_price_money ? this.toMoney(mod.base_price_money) : undefined,
276
+ }));
277
+ return {
278
+ id: item.uid ?? `item-${index}`,
279
+ productId: item.catalog_object_id ?? item.uid ?? `item-${index}`,
280
+ name: item.name ?? "",
281
+ quantity: parseFloat(item.quantity ?? "1"),
282
+ unitPrice: this.toMoney(item.base_price_money),
283
+ discount: this.toMoney(item.total_discount_money),
284
+ tax: this.toMoney(item.total_tax_money),
285
+ total: this.toMoney(item.total_money),
286
+ notes: undefined,
287
+ modifiers: modifiers.length > 0 ? modifiers : undefined,
288
+ };
289
+ }
290
+ mapSquarePayments(order) {
291
+ return (order.tenders ?? []).map((tender, i) => ({
292
+ id: tender.id ?? `tender-${i}`,
293
+ externalId: tender.id,
294
+ method: this.mapSquareTenderType(tender.type),
295
+ amount: this.toMoney(tender.amount_money),
296
+ status: Payments_1.PaymentStatus.COMPLETED,
297
+ authorizationCode: tender.card_details?.card?.fingerprint,
298
+ reference: tender.transaction_id,
299
+ paidAt: tender.created_at ? new Date(tender.created_at) : new Date(),
300
+ }));
301
+ }
302
+ };
303
+ exports.SquareOrderServiceImpl = SquareOrderServiceImpl;
304
+ exports.SquareOrderServiceImpl = SquareOrderServiceImpl = __decorate([
305
+ (0, common_1.Injectable)(),
306
+ __param(0, (0, common_1.Inject)(ioc_1.EventBridgeSymbols.EventBridgeService)),
307
+ __metadata("design:paramtypes", [Object])
308
+ ], SquareOrderServiceImpl);
package/jest.config.js ADDED
@@ -0,0 +1,8 @@
1
+ module.exports = {
2
+ testEnvironment: 'node',
3
+ roots: ['<rootDir>/test'],
4
+ testMatch: ['**/*.test.ts'],
5
+ transform: {
6
+ '^.+\\.tsx?$': 'ts-jest'
7
+ }
8
+ };
package/package.json ADDED
@@ -0,0 +1,43 @@
1
+ {
2
+ "name": "@novha/anlia-core-lib",
3
+ "version": "0.1.0",
4
+ "private": false,
5
+ "main": "dist/index.js",
6
+ "types": "dist/types/index.d.ts",
7
+ "bin": {
8
+ "anlia-core-lib.js": "bin/anlia-core-lib.js"
9
+ },
10
+ "scripts": {
11
+ "build": "tsc",
12
+ "watch": "tsc -w",
13
+ "test": "jest",
14
+ "cdk": "cdk"
15
+ },
16
+ "devDependencies": {
17
+ "@types/jest": "^29.5.12",
18
+ "@types/node": "20.12.7",
19
+ "aws-cdk": "2.142.1",
20
+ "jest": "^29.7.0",
21
+ "ts-jest": "^29.1.2",
22
+ "ts-node": "^10.9.2",
23
+ "typescript": "~5.4.5"
24
+ },
25
+ "dependencies": {
26
+ "@aws-sdk/client-eventbridge": "^3.1090.0",
27
+ "@aws-sdk/client-secrets-manager": "^3.721.0",
28
+ "@nestjs/common": "^11.1.28",
29
+ "@nestjs/core": "^11.1.28",
30
+ "aws-cdk-lib": "^2.261.0",
31
+ "constructs": "^10.0.0",
32
+ "json2typescript": "^1.5.1",
33
+ "predikt-cdk-lib": "^0.1.7",
34
+ "reflect-metadata": "^0.2.2",
35
+ "source-map-support": "^0.5.21"
36
+ },
37
+ "author": "Yannick Kazadi",
38
+ "license": "ISC",
39
+ "description": "",
40
+ "publishConfig": {
41
+ "access": "public"
42
+ }
43
+ }
@@ -0,0 +1,9 @@
1
+ export enum DayOfWeek {
2
+ MONDAY = "MONDAY",
3
+ TUESDAY = "TUESDAY",
4
+ WEDNESDAY = "WEDNESDAY",
5
+ THURSDAY = "THURSDAY",
6
+ FRIDAY = "FRIDAY",
7
+ SATURDAY = "SATURDAY",
8
+ SUNDAY = "SUNDAY"
9
+ }
@@ -0,0 +1,20 @@
1
+ export enum DeliveryStatus {
2
+ PENDING = "PENDING",
3
+ ASSIGNED = "ASSIGNED",
4
+ PICKED_UP = "PICKED_UP",
5
+ IN_TRANSIT = "IN_TRANSIT",
6
+ DELIVERED = "DELIVERED",
7
+ FAILED = "FAILED",
8
+ CANCELLED = "CANCELLED",
9
+ RETURNED = "RETURNED",
10
+ }
11
+
12
+ export enum DeliveryProvider {
13
+ IN_HOUSE = "IN_HOUSE",
14
+ UBER_EATS = "UBER_EATS",
15
+ DOORDASH = "DOORDASH",
16
+ GRUBHUB = "GRUBHUB",
17
+ SKIPTHEDISHES = "SKIPTHEDISHES",
18
+ DELIVEROO = "DELIVEROO",
19
+ OTHER = "OTHER",
20
+ }
@@ -0,0 +1,12 @@
1
+ export enum EmployeeRole {
2
+ OWNER = "OWNER",
3
+ MANAGER = "MANAGER",
4
+ SUPERVISOR = "SUPERVISOR",
5
+ CASHIER = "CASHIER",
6
+ SERVER = "SERVER",
7
+ CHEF = "CHEF",
8
+ KITCHEN = "KITCHEN",
9
+ DELIVERY_DRIVER = "DELIVERY_DRIVER",
10
+ HOST = "HOST",
11
+ OTHER = "OTHER"
12
+ }
@@ -0,0 +1,33 @@
1
+ export enum IngredientStatus {
2
+ ACTIVE = "ACTIVE",
3
+ INACTIVE = "INACTIVE",
4
+ DISCONTINUED = "DISCONTINUED",
5
+ }
6
+
7
+ export enum AllergenType {
8
+ GLUTEN = "GLUTEN",
9
+ CRUSTACEANS = "CRUSTACEANS",
10
+ EGGS = "EGGS",
11
+ FISH = "FISH",
12
+ PEANUTS = "PEANUTS",
13
+ SOYBEANS = "SOYBEANS",
14
+ MILK = "MILK",
15
+ NUTS = "NUTS",
16
+ CELERY = "CELERY",
17
+ MUSTARD = "MUSTARD",
18
+ SESAME = "SESAME",
19
+ SULPHITES = "SULPHITES",
20
+ LUPIN = "LUPIN",
21
+ MOLLUSCS = "MOLLUSCS",
22
+ }
23
+
24
+ export enum DietaryFlag {
25
+ VEGAN = "VEGAN",
26
+ VEGETARIAN = "VEGETARIAN",
27
+ GLUTEN_FREE = "GLUTEN_FREE",
28
+ DAIRY_FREE = "DAIRY_FREE",
29
+ NUT_FREE = "NUT_FREE",
30
+ HALAL = "HALAL",
31
+ KOSHER = "KOSHER",
32
+ ORGANIC = "ORGANIC",
33
+ }
@@ -0,0 +1,39 @@
1
+ export enum InventoryCategory {
2
+ INGREDIENT = "INGREDIENT",
3
+ BEVERAGE = "BEVERAGE",
4
+ PACKAGING = "PACKAGING",
5
+ CLEANING_SUPPLY = "CLEANING_SUPPLY",
6
+ EQUIPMENT = "EQUIPMENT",
7
+ OTHER = "OTHER"
8
+ }
9
+
10
+ export enum InventoryUnit {
11
+ PIECE = "PIECE",
12
+ KILOGRAM = "KILOGRAM",
13
+ GRAM = "GRAM",
14
+ LITER = "LITER",
15
+ MILLILITER = "MILLILITER"
16
+ }
17
+
18
+ export enum InventoryStatus {
19
+ ACTIVE = "ACTIVE",
20
+ INACTIVE = "INACTIVE",
21
+ DISCONTINUED = "DISCONTINUED"
22
+ }
23
+
24
+ export enum InventoryTransactionType {
25
+
26
+ PURCHASE = "PURCHASE",
27
+
28
+ SALE_CONSUMPTION = "SALE_CONSUMPTION",
29
+
30
+ WASTE = "WASTE",
31
+
32
+ SPOILAGE = "SPOILAGE",
33
+
34
+ RETURN = "RETURN",
35
+
36
+ ADJUSTMENT = "ADJUSTMENT",
37
+
38
+ TRANSFER = "TRANSFER"
39
+ }
@@ -0,0 +1,89 @@
1
+ export enum KitchenStationType {
2
+ GRILL = "GRILL",
3
+
4
+ FRYER = "FRYER",
5
+
6
+ PREP = "PREP",
7
+
8
+ DESSERT = "DESSERT",
9
+
10
+ BAR = "BAR",
11
+
12
+ DRINKS = "DRINKS",
13
+
14
+ BAKERY = "BAKERY",
15
+
16
+ GENERAL = "GENERAL"
17
+ }
18
+
19
+ export enum KitchenStatus {
20
+
21
+ OPEN = "OPEN",
22
+
23
+ CLOSED = "CLOSED",
24
+
25
+ BUSY = "BUSY",
26
+
27
+ MAINTENANCE = "MAINTENANCE"
28
+ }
29
+
30
+ export enum KitchenTicketStatus {
31
+
32
+ QUEUED = "QUEUED",
33
+
34
+ IN_PROGRESS = "IN_PROGRESS",
35
+
36
+ READY = "READY",
37
+
38
+ COMPLETED = "COMPLETED",
39
+
40
+ CANCELLED = "CANCELLED"
41
+ }
42
+
43
+ export enum KitchenPriority {
44
+
45
+ LOW = "LOW",
46
+
47
+ MEDIUM = "MEDIUM",
48
+
49
+ HIGH = "HIGH",
50
+
51
+ URGENT = "URGENT"
52
+ }
53
+
54
+ export enum KitchenStationStatus {
55
+
56
+ AVAILABLE = "AVAILABLE",
57
+
58
+ BUSY = "BUSY",
59
+
60
+ OFFLINE = "OFFLINE",
61
+
62
+ MAINTENANCE = "MAINTENANCE"
63
+ }
64
+
65
+ export enum KitchenTicketItemStatus {
66
+
67
+ PENDING = "PENDING",
68
+
69
+ IN_PROGRESS = "IN_PROGRESS",
70
+
71
+ READY = "READY",
72
+
73
+ COMPLETED = "COMPLETED",
74
+
75
+ CANCELLED = "CANCELLED"
76
+ }
77
+
78
+ export enum KitchenItemStatus {
79
+
80
+ PENDING = "PENDING",
81
+
82
+ IN_PROGRESS = "IN_PROGRESS",
83
+
84
+ READY = "READY",
85
+
86
+ COMPLETED = "COMPLETED",
87
+
88
+ CANCELLED = "CANCELLED"
89
+ }
@@ -0,0 +1,14 @@
1
+ export enum MenuItemStatus {
2
+ ACTIVE = "ACTIVE",
3
+ INACTIVE = "INACTIVE",
4
+ OUT_OF_STOCK = "OUT_OF_STOCK",
5
+ SEASONAL = "SEASONAL",
6
+ DISCONTINUED = "DISCONTINUED",
7
+ }
8
+
9
+ export enum MenuStatus {
10
+ ACTIVE = "ACTIVE",
11
+ INACTIVE = "INACTIVE",
12
+ DRAFT = "DRAFT",
13
+ ARCHIVED = "ARCHIVED",
14
+ }
@@ -0,0 +1,41 @@
1
+ export enum PaymentMethod {
2
+
3
+ CASH = "CASH",
4
+
5
+ CREDIT_CARD = "CREDIT_CARD",
6
+
7
+ DEBIT_CARD = "DEBIT_CARD",
8
+
9
+ MOBILE_PAYMENT = "MOBILE_PAYMENT",
10
+
11
+ GIFT_CARD = "GIFT_CARD",
12
+
13
+ LOYALTY_POINTS = "LOYALTY_POINTS",
14
+
15
+ ONLINE_PAYMENT = "ONLINE_PAYMENT",
16
+
17
+ BANK_TRANSFER = "BANK_TRANSFER",
18
+
19
+ OTHER = "OTHER"
20
+
21
+ }
22
+
23
+ export enum PaymentStatus {
24
+
25
+ PENDING = "PENDING",
26
+
27
+ AUTHORIZED = "AUTHORIZED",
28
+
29
+ CAPTURED = "CAPTURED",
30
+
31
+ COMPLETED = "COMPLETED",
32
+
33
+ FAILED = "FAILED",
34
+
35
+ REFUNDED = "REFUNDED",
36
+
37
+ PARTIALLY_REFUNDED = "PARTIALLY_REFUNDED",
38
+
39
+ CANCELLED = "CANCELLED"
40
+
41
+ }
@@ -0,0 +1,15 @@
1
+ export enum RecipeStatus {
2
+ ACTIVE = "ACTIVE",
3
+ DRAFT = "DRAFT",
4
+ ARCHIVED = "ARCHIVED",
5
+ }
6
+
7
+ export enum RecipeYieldUnit {
8
+ PORTION = "PORTION",
9
+ PIECE = "PIECE",
10
+ TRAY = "TRAY",
11
+ BATCH = "BATCH",
12
+ LITER = "LITER",
13
+ KILOGRAM = "KILOGRAM",
14
+ GRAM = "GRAM",
15
+ }
@@ -0,0 +1,18 @@
1
+ export enum ReservationStatus {
2
+ PENDING = "PENDING",
3
+ CONFIRMED = "CONFIRMED",
4
+ CHECKED_IN = "CHECKED_IN",
5
+ SEATED = "SEATED",
6
+ COMPLETED = "COMPLETED",
7
+ CANCELLED = "CANCELLED",
8
+ NO_SHOW = "NO_SHOW"
9
+ }
10
+
11
+ export enum ReservationSource {
12
+ PHONE = "PHONE",
13
+ WALK_IN = "WALK_IN",
14
+ WEBSITE = "WEBSITE",
15
+ MOBILE_APP = "MOBILE_APP",
16
+ THIRD_PARTY = "THIRD_PARTY",
17
+ AI_ASSISTANT = "AI_ASSISTANT"
18
+ }