@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,184 @@
1
+ import { DomainEvent } from "./DomainEvent";
2
+ import { IInventoryItem } from "../../interfaces/domain/Inventory";
3
+ import { InventoryTransactionType } from "../../enums/domain/Inventory";
4
+
5
+ // ─── Lifecycle Events ──────────────────────────────────────────────────────────
6
+
7
+ export interface InventoryItemCreated extends DomainEvent {
8
+ eventType: "InventoryItemCreated";
9
+ aggregateType: "InventoryItem";
10
+ item: IInventoryItem;
11
+ }
12
+
13
+ export interface InventoryItemUpdated extends DomainEvent {
14
+ eventType: "InventoryItemUpdated";
15
+ aggregateType: "InventoryItem";
16
+ before: Partial<IInventoryItem>;
17
+ after: Partial<IInventoryItem>;
18
+ }
19
+
20
+ export interface InventoryItemDeleted extends DomainEvent {
21
+ eventType: "InventoryItemDeleted";
22
+ aggregateType: "InventoryItem";
23
+ /** Snapshot of the item at the time of deletion. */
24
+ item: IInventoryItem;
25
+ deletedAt: Date;
26
+ deletedBy?: string;
27
+ }
28
+
29
+ // ─── Stock Movement Events ─────────────────────────────────────────────────────
30
+
31
+ export interface InventoryAdjusted extends DomainEvent {
32
+ eventType: "InventoryAdjusted";
33
+ aggregateType: "InventoryItem";
34
+ itemId: string;
35
+ previousQuantity: number;
36
+ newQuantity: number;
37
+ delta: number;
38
+ reason?: string;
39
+ adjustedBy?: string;
40
+ }
41
+
42
+ export interface InventoryConsumed extends DomainEvent {
43
+ eventType: "InventoryConsumed";
44
+ aggregateType: "InventoryItem";
45
+ itemId: string;
46
+ quantityConsumed: number;
47
+ remainingQuantity: number;
48
+ /** Order or production run that triggered consumption. */
49
+ referenceId?: string;
50
+ }
51
+
52
+ export interface InventoryReceived extends DomainEvent {
53
+ eventType: "InventoryReceived";
54
+ aggregateType: "InventoryItem";
55
+ itemId: string;
56
+ quantityReceived: number;
57
+ newQuantity: number;
58
+ supplierId?: string;
59
+ purchaseOrderId?: string;
60
+ unitCost?: number;
61
+ receivedBy?: string;
62
+ receivedAt: Date;
63
+ }
64
+
65
+ export interface InventoryTransferred extends DomainEvent {
66
+ eventType: "InventoryTransferred";
67
+ aggregateType: "InventoryItem";
68
+ itemId: string;
69
+ quantity: number;
70
+ fromLocationId: string;
71
+ toLocationId: string;
72
+ transferredBy?: string;
73
+ transferredAt: Date;
74
+ }
75
+
76
+ export interface InventoryReturned extends DomainEvent {
77
+ eventType: "InventoryReturned";
78
+ aggregateType: "InventoryItem";
79
+ itemId: string;
80
+ quantityReturned: number;
81
+ newQuantity: number;
82
+ supplierId?: string;
83
+ reason?: string;
84
+ returnedBy?: string;
85
+ returnedAt: Date;
86
+ }
87
+
88
+ // ─── Loss Events ───────────────────────────────────────────────────────────────
89
+
90
+ export interface InventoryExpired extends DomainEvent {
91
+ eventType: "InventoryExpired";
92
+ aggregateType: "InventoryItem";
93
+ itemId: string;
94
+ quantityExpired: number;
95
+ expiryDate: Date;
96
+ markedBy?: string;
97
+ }
98
+
99
+ export interface InventorySpoiled extends DomainEvent {
100
+ eventType: "InventorySpoiled";
101
+ aggregateType: "InventoryItem";
102
+ itemId: string;
103
+ quantitySpoiled: number;
104
+ reason?: string;
105
+ markedBy?: string;
106
+ }
107
+
108
+ // ─── Stock Level Events ────────────────────────────────────────────────────────
109
+
110
+ export interface InventoryLowStock extends DomainEvent {
111
+ eventType: "InventoryLowStock";
112
+ aggregateType: "InventoryItem";
113
+ itemId: string;
114
+ currentQuantity: number;
115
+ minimumStockLevel: number;
116
+ }
117
+
118
+ export interface InventoryOutOfStock extends DomainEvent {
119
+ eventType: "InventoryOutOfStock";
120
+ aggregateType: "InventoryItem";
121
+ itemId: string;
122
+ occurredAt: Date;
123
+ }
124
+
125
+ export interface InventoryReplenished extends DomainEvent {
126
+ eventType: "InventoryReplenished";
127
+ aggregateType: "InventoryItem";
128
+ itemId: string;
129
+ quantityAdded: number;
130
+ newQuantity: number;
131
+ transactionType: InventoryTransactionType;
132
+ replenishedBy?: string;
133
+ replenishedAt: Date;
134
+ }
135
+
136
+ // ─── Transaction Events ──────────────────────────────────────────────────────
137
+
138
+ export interface InventoryTransactionCreated extends DomainEvent {
139
+ eventType: "InventoryTransactionCreated";
140
+ aggregateType: "InventoryItem";
141
+ itemId: string;
142
+ transactionType: InventoryTransactionType;
143
+ quantity: number;
144
+ quantityBefore: number;
145
+ quantityAfter: number;
146
+ unitCost?: number;
147
+ referenceId?: string;
148
+ notes?: string;
149
+ createdBy?: string;
150
+ }
151
+
152
+ export interface InventoryTransactionReversed extends DomainEvent {
153
+ eventType: "InventoryTransactionReversed";
154
+ aggregateType: "InventoryItem";
155
+ itemId: string;
156
+ /** ID of the original transaction being reversed. */
157
+ originalTransactionId: string;
158
+ transactionType: InventoryTransactionType;
159
+ quantity: number;
160
+ quantityBefore: number;
161
+ quantityAfter: number;
162
+ reason?: string;
163
+ reversedBy?: string;
164
+ reversedAt: Date;
165
+ }
166
+
167
+ // ─── Union Type ────────────────────────────────────────────────────────────────
168
+
169
+ export type InventoryEvent =
170
+ | InventoryItemCreated
171
+ | InventoryItemUpdated
172
+ | InventoryItemDeleted
173
+ | InventoryAdjusted
174
+ | InventoryConsumed
175
+ | InventoryReceived
176
+ | InventoryTransferred
177
+ | InventoryReturned
178
+ | InventoryExpired
179
+ | InventorySpoiled
180
+ | InventoryLowStock
181
+ | InventoryOutOfStock
182
+ | InventoryReplenished
183
+ | InventoryTransactionCreated
184
+ | InventoryTransactionReversed;
@@ -0,0 +1,142 @@
1
+ import { DomainEvent } from "./DomainEvent";
2
+ import { IOrder } from "../../orders/domain/Order";
3
+ import { IOrderItem } from "../../orders/domain/OrderItem";
4
+ import { OrderStatus } from "../../orders/domain/Enums";
5
+
6
+ // ─── Lifecycle Events ──────────────────────────────────────────────────────────
7
+
8
+ export interface OrderCreated extends DomainEvent {
9
+ eventType: "OrderCreated";
10
+ aggregateType: "Order";
11
+ order: IOrder;
12
+ }
13
+
14
+ export interface OrderUpdated extends DomainEvent {
15
+ eventType: "OrderUpdated";
16
+ aggregateType: "Order";
17
+ before: Partial<IOrder>;
18
+ after: Partial<IOrder>;
19
+ }
20
+
21
+ export interface OrderSubmitted extends DomainEvent {
22
+ eventType: "OrderSubmitted";
23
+ aggregateType: "Order";
24
+ submittedAt: Date;
25
+ submittedBy?: string;
26
+ }
27
+
28
+ export interface OrderConfirmed extends DomainEvent {
29
+ eventType: "OrderConfirmed";
30
+ aggregateType: "Order";
31
+ confirmedAt: Date;
32
+ confirmedBy?: string;
33
+ }
34
+
35
+ export interface OrderRejected extends DomainEvent {
36
+ eventType: "OrderRejected";
37
+ aggregateType: "Order";
38
+ reason?: string;
39
+ rejectedAt: Date;
40
+ rejectedBy?: string;
41
+ }
42
+
43
+ export interface OrderCancelled extends DomainEvent {
44
+ eventType: "OrderCancelled";
45
+ aggregateType: "Order";
46
+ previousStatus: OrderStatus;
47
+ reason?: string;
48
+ cancelledAt: Date;
49
+ cancelledBy?: string;
50
+ }
51
+
52
+ export interface OrderCompleted extends DomainEvent {
53
+ eventType: "OrderCompleted";
54
+ aggregateType: "Order";
55
+ completedAt: Date;
56
+ completedBy?: string;
57
+ }
58
+
59
+ export interface OrderReopened extends DomainEvent {
60
+ eventType: "OrderReopened";
61
+ aggregateType: "Order";
62
+ previousStatus: OrderStatus;
63
+ reason?: string;
64
+ reopenedAt: Date;
65
+ reopenedBy?: string;
66
+ }
67
+
68
+ export interface OrderClosed extends DomainEvent {
69
+ eventType: "OrderClosed";
70
+ aggregateType: "Order";
71
+ closedAt: Date;
72
+ closedBy?: string;
73
+ }
74
+
75
+ // ─── Order Item Events ────────────────────────────────────────────────────────
76
+
77
+ export interface OrderItemAdded extends DomainEvent {
78
+ eventType: "OrderItemAdded";
79
+ aggregateType: "Order";
80
+ item: IOrderItem;
81
+ addedBy?: string;
82
+ }
83
+
84
+ export interface OrderItemUpdated extends DomainEvent {
85
+ eventType: "OrderItemUpdated";
86
+ aggregateType: "Order";
87
+ before: Partial<IOrderItem>;
88
+ after: Partial<IOrderItem>;
89
+ updatedBy?: string;
90
+ }
91
+
92
+ export interface OrderItemRemoved extends DomainEvent {
93
+ eventType: "OrderItemRemoved";
94
+ aggregateType: "Order";
95
+ itemId: string;
96
+ reason?: string;
97
+ removedBy?: string;
98
+ }
99
+
100
+ export interface OrderItemPrepared extends DomainEvent {
101
+ eventType: "OrderItemPrepared";
102
+ aggregateType: "Order";
103
+ itemId: string;
104
+ preparedAt: Date;
105
+ preparedBy?: string;
106
+ }
107
+
108
+ export interface OrderItemServed extends DomainEvent {
109
+ eventType: "OrderItemServed";
110
+ aggregateType: "Order";
111
+ itemId: string;
112
+ servedAt: Date;
113
+ servedBy?: string;
114
+ }
115
+
116
+ export interface OrderItemVoided extends DomainEvent {
117
+ eventType: "OrderItemVoided";
118
+ aggregateType: "Order";
119
+ itemId: string;
120
+ reason?: string;
121
+ voidedAt: Date;
122
+ voidedBy?: string;
123
+ }
124
+
125
+ // ─── Union Type ────────────────────────────────────────────────────────────────
126
+
127
+ export type OrderEvent =
128
+ | OrderCreated
129
+ | OrderUpdated
130
+ | OrderSubmitted
131
+ | OrderConfirmed
132
+ | OrderRejected
133
+ | OrderCancelled
134
+ | OrderCompleted
135
+ | OrderReopened
136
+ | OrderClosed
137
+ | OrderItemAdded
138
+ | OrderItemUpdated
139
+ | OrderItemRemoved
140
+ | OrderItemPrepared
141
+ | OrderItemServed
142
+ | OrderItemVoided;
@@ -0,0 +1,92 @@
1
+ import { DomainEvent } from "./DomainEvent";
2
+ import { IPayment } from "../../interfaces/domain/Payment";
3
+ import { PaymentMethod, PaymentStatus } from "../../enums/domain/Payments";
4
+ import { Money } from "../../interfaces/domain/Money";
5
+
6
+ // ─── Lifecycle Events ──────────────────────────────────────────────────────────
7
+
8
+ export interface PaymentCreated extends DomainEvent {
9
+ eventType: "PaymentCreated";
10
+ aggregateType: "Payment";
11
+ payment: IPayment;
12
+ orderId: string;
13
+ }
14
+
15
+ export interface PaymentAuthorized extends DomainEvent {
16
+ eventType: "PaymentAuthorized";
17
+ aggregateType: "Payment";
18
+ paymentId: string;
19
+ orderId: string;
20
+ amount: Money;
21
+ method: PaymentMethod;
22
+ authorizationCode?: string;
23
+ authorizedAt: Date;
24
+ }
25
+
26
+ export interface PaymentCaptured extends DomainEvent {
27
+ eventType: "PaymentCaptured";
28
+ aggregateType: "Payment";
29
+ paymentId: string;
30
+ orderId: string;
31
+ amount: Money;
32
+ capturedAt: Date;
33
+ }
34
+
35
+ export interface PaymentDeclined extends DomainEvent {
36
+ eventType: "PaymentDeclined";
37
+ aggregateType: "Payment";
38
+ paymentId: string;
39
+ orderId: string;
40
+ amount: Money;
41
+ method: PaymentMethod;
42
+ reason?: string;
43
+ declinedAt: Date;
44
+ }
45
+
46
+ export interface PaymentRefunded extends DomainEvent {
47
+ eventType: "PaymentRefunded";
48
+ aggregateType: "Payment";
49
+ paymentId: string;
50
+ orderId: string;
51
+ /** Amount refunded — may be partial. */
52
+ refundedAmount: Money;
53
+ /** Remaining balance after the refund. */
54
+ remainingAmount: Money;
55
+ reason?: string;
56
+ refundedBy?: string;
57
+ refundedAt: Date;
58
+ }
59
+
60
+ export interface PaymentVoided extends DomainEvent {
61
+ eventType: "PaymentVoided";
62
+ aggregateType: "Payment";
63
+ paymentId: string;
64
+ orderId: string;
65
+ previousStatus: PaymentStatus;
66
+ reason?: string;
67
+ voidedBy?: string;
68
+ voidedAt: Date;
69
+ }
70
+
71
+ export interface PaymentFailed extends DomainEvent {
72
+ eventType: "PaymentFailed";
73
+ aggregateType: "Payment";
74
+ paymentId: string;
75
+ orderId: string;
76
+ amount: Money;
77
+ method: PaymentMethod;
78
+ errorCode?: string;
79
+ errorMessage?: string;
80
+ failedAt: Date;
81
+ }
82
+
83
+ // ─── Union Type ────────────────────────────────────────────────────────────────
84
+
85
+ export type PaymentEvent =
86
+ | PaymentCreated
87
+ | PaymentAuthorized
88
+ | PaymentCaptured
89
+ | PaymentDeclined
90
+ | PaymentRefunded
91
+ | PaymentVoided
92
+ | PaymentFailed;
@@ -0,0 +1,64 @@
1
+ import { DomainEvent } from "./DomainEvent";
2
+ import { IRecipe, IRecipeIngredient } from "../../interfaces/domain/Recipe";
3
+
4
+ // ─── Lifecycle Events ──────────────────────────────────────────────────────────
5
+
6
+ export interface RecipeCreated extends DomainEvent {
7
+ eventType: "RecipeCreated";
8
+ aggregateType: "Recipe";
9
+ recipe: IRecipe;
10
+ }
11
+
12
+ export interface RecipeUpdated extends DomainEvent {
13
+ eventType: "RecipeUpdated";
14
+ aggregateType: "Recipe";
15
+ before: Partial<IRecipe>;
16
+ after: Partial<IRecipe>;
17
+ /** Version number after the update. */
18
+ version: number;
19
+ }
20
+
21
+ export interface RecipeDeleted extends DomainEvent {
22
+ eventType: "RecipeDeleted";
23
+ aggregateType: "Recipe";
24
+ /** Snapshot of the recipe at the time of deletion. */
25
+ recipe: IRecipe;
26
+ deletedAt: Date;
27
+ deletedBy?: string;
28
+ }
29
+
30
+ // ─── Ingredient Events ─────────────────────────────────────────────────────────
31
+
32
+ export interface RecipeIngredientAdded extends DomainEvent {
33
+ eventType: "RecipeIngredientAdded";
34
+ aggregateType: "Recipe";
35
+ ingredient: IRecipeIngredient;
36
+ addedBy?: string;
37
+ }
38
+
39
+ export interface RecipeIngredientUpdated extends DomainEvent {
40
+ eventType: "RecipeIngredientUpdated";
41
+ aggregateType: "Recipe";
42
+ ingredientId: string;
43
+ before: Partial<IRecipeIngredient>;
44
+ after: Partial<IRecipeIngredient>;
45
+ updatedBy?: string;
46
+ }
47
+
48
+ export interface RecipeIngredientRemoved extends DomainEvent {
49
+ eventType: "RecipeIngredientRemoved";
50
+ aggregateType: "Recipe";
51
+ ingredientId: string;
52
+ reason?: string;
53
+ removedBy?: string;
54
+ }
55
+
56
+ // ─── Union Type ────────────────────────────────────────────────────────────────
57
+
58
+ export type RecipeEvent =
59
+ | RecipeCreated
60
+ | RecipeUpdated
61
+ | RecipeDeleted
62
+ | RecipeIngredientAdded
63
+ | RecipeIngredientUpdated
64
+ | RecipeIngredientRemoved;
@@ -0,0 +1,133 @@
1
+ import { DomainEvent } from "./DomainEvent";
2
+ import { IReservation } from "../../interfaces/domain/Reservation";
3
+ import { ReservationStatus } from "../../enums/domain/Reservation";
4
+
5
+ // ─── Lifecycle Events ──────────────────────────────────────────────────────────
6
+
7
+ export interface ReservationCreated extends DomainEvent {
8
+ eventType: "ReservationCreated";
9
+ aggregateType: "Reservation";
10
+ reservation: IReservation;
11
+ }
12
+
13
+ export interface ReservationConfirmed extends DomainEvent {
14
+ eventType: "ReservationConfirmed";
15
+ aggregateType: "Reservation";
16
+ confirmedAt: Date;
17
+ confirmedBy?: string;
18
+ }
19
+
20
+ export interface ReservationRejected extends DomainEvent {
21
+ eventType: "ReservationRejected";
22
+ aggregateType: "Reservation";
23
+ reason?: string;
24
+ rejectedAt: Date;
25
+ rejectedBy?: string;
26
+ }
27
+
28
+ export interface ReservationUpdated extends DomainEvent {
29
+ eventType: "ReservationUpdated";
30
+ aggregateType: "Reservation";
31
+ before: Partial<IReservation>;
32
+ after: Partial<IReservation>;
33
+ }
34
+
35
+ export interface ReservationCancelled extends DomainEvent {
36
+ eventType: "ReservationCancelled";
37
+ aggregateType: "Reservation";
38
+ reason?: string;
39
+ cancelledAt: Date;
40
+ cancelledBy?: string;
41
+ }
42
+
43
+ // ─── Floor Events ──────────────────────────────────────────────────────────────
44
+
45
+ export interface ReservationCheckedIn extends DomainEvent {
46
+ eventType: "ReservationCheckedIn";
47
+ aggregateType: "Reservation";
48
+ checkedInAt: Date;
49
+ checkedInBy?: string;
50
+ }
51
+
52
+ export interface ReservationSeated extends DomainEvent {
53
+ eventType: "ReservationSeated";
54
+ aggregateType: "Reservation";
55
+ tableIds: string[];
56
+ seatedAt: Date;
57
+ seatedBy?: string;
58
+ }
59
+
60
+ export interface ReservationCompleted extends DomainEvent {
61
+ eventType: "ReservationCompleted";
62
+ aggregateType: "Reservation";
63
+ completedAt: Date;
64
+ }
65
+
66
+ export interface ReservationNoShow extends DomainEvent {
67
+ eventType: "ReservationNoShow";
68
+ aggregateType: "Reservation";
69
+ markedAt: Date;
70
+ markedBy?: string;
71
+ }
72
+
73
+ // ─── Table Assignment Events ───────────────────────────────────────────────────
74
+
75
+ export interface ReservationTableAssigned extends DomainEvent {
76
+ eventType: "ReservationTableAssigned";
77
+ aggregateType: "Reservation";
78
+ tableIds: string[];
79
+ assignedBy?: string;
80
+ }
81
+
82
+ export interface ReservationTableChanged extends DomainEvent {
83
+ eventType: "ReservationTableChanged";
84
+ aggregateType: "Reservation";
85
+ previousTableIds: string[];
86
+ newTableIds: string[];
87
+ changedBy?: string;
88
+ reason?: string;
89
+ }
90
+
91
+ // ─── Waitlist Events ───────────────────────────────────────────────────────────
92
+
93
+ export interface WaitlistJoined extends DomainEvent {
94
+ eventType: "WaitlistJoined";
95
+ aggregateType: "Reservation";
96
+ partySize: number;
97
+ estimatedWaitMinutes?: number;
98
+ joinedAt: Date;
99
+ }
100
+
101
+ export interface WaitlistPromoted extends DomainEvent {
102
+ eventType: "WaitlistPromoted";
103
+ aggregateType: "Reservation";
104
+ tableIds: string[];
105
+ promotedAt: Date;
106
+ promotedBy?: string;
107
+ }
108
+
109
+ export interface WaitlistCancelled extends DomainEvent {
110
+ eventType: "WaitlistCancelled";
111
+ aggregateType: "Reservation";
112
+ reason?: string;
113
+ cancelledAt: Date;
114
+ cancelledBy?: string;
115
+ }
116
+
117
+ // ─── Union Type ────────────────────────────────────────────────────────────────
118
+
119
+ export type ReservationEvent =
120
+ | ReservationCreated
121
+ | ReservationConfirmed
122
+ | ReservationRejected
123
+ | ReservationUpdated
124
+ | ReservationCancelled
125
+ | ReservationCheckedIn
126
+ | ReservationSeated
127
+ | ReservationCompleted
128
+ | ReservationNoShow
129
+ | ReservationTableAssigned
130
+ | ReservationTableChanged
131
+ | WaitlistJoined
132
+ | WaitlistPromoted
133
+ | WaitlistCancelled;
@@ -0,0 +1,89 @@
1
+ import { DomainEvent } from "./DomainEvent";
2
+ import { IRestaurant } from "../../interfaces/domain/Restaurant";
3
+ import { IAddress } from "../../interfaces/domain/Address";
4
+ import { OperatingHours } from "../../interfaces/domain/OpeningHours";
5
+ import { RestaurantStatus } from "../../enums/domain/Restaurant";
6
+
7
+ // ─── Lifecycle Events ──────────────────────────────────────────────────────────
8
+
9
+ export interface RestaurantCreated extends DomainEvent {
10
+ eventType: "RestaurantCreated";
11
+ aggregateType: "Restaurant";
12
+ restaurant: IRestaurant;
13
+ }
14
+
15
+ export interface RestaurantUpdated extends DomainEvent {
16
+ eventType: "RestaurantUpdated";
17
+ aggregateType: "Restaurant";
18
+ before: Partial<IRestaurant>;
19
+ after: Partial<IRestaurant>;
20
+ }
21
+
22
+ export interface RestaurantActivated extends DomainEvent {
23
+ eventType: "RestaurantActivated";
24
+ aggregateType: "Restaurant";
25
+ previousStatus: RestaurantStatus;
26
+ }
27
+
28
+ export interface RestaurantSuspended extends DomainEvent {
29
+ eventType: "RestaurantSuspended";
30
+ aggregateType: "Restaurant";
31
+ previousStatus: RestaurantStatus;
32
+ reason?: string;
33
+ }
34
+
35
+ export interface RestaurantClosed extends DomainEvent {
36
+ eventType: "RestaurantClosed";
37
+ aggregateType: "Restaurant";
38
+ previousStatus: RestaurantStatus;
39
+ reason?: string;
40
+ }
41
+
42
+ export interface RestaurantDeleted extends DomainEvent {
43
+ eventType: "RestaurantDeleted";
44
+ aggregateType: "Restaurant";
45
+ deletedAt: Date;
46
+ }
47
+
48
+ // ─── Operational Events ────────────────────────────────────────────────────────
49
+
50
+ export interface RestaurantHoursUpdated extends DomainEvent {
51
+ eventType: "RestaurantHoursUpdated";
52
+ aggregateType: "Restaurant";
53
+ before: OperatingHours[];
54
+ after: OperatingHours[];
55
+ }
56
+
57
+ export interface RestaurantLocationUpdated extends DomainEvent {
58
+ eventType: "RestaurantLocationUpdated";
59
+ aggregateType: "Restaurant";
60
+ before: IAddress;
61
+ after: IAddress;
62
+ }
63
+
64
+ export interface RestaurantCapacityChanged extends DomainEvent {
65
+ eventType: "RestaurantCapacityChanged";
66
+ aggregateType: "Restaurant";
67
+ previousCapacity: number;
68
+ newCapacity: number;
69
+ }
70
+
71
+ export interface RestaurantSettingsUpdated extends DomainEvent {
72
+ eventType: "RestaurantSettingsUpdated";
73
+ aggregateType: "Restaurant";
74
+ settings: Record<string, unknown>;
75
+ }
76
+
77
+ // ─── Union Type ────────────────────────────────────────────────────────────────
78
+
79
+ export type RestaurantEvent =
80
+ | RestaurantCreated
81
+ | RestaurantUpdated
82
+ | RestaurantActivated
83
+ | RestaurantSuspended
84
+ | RestaurantClosed
85
+ | RestaurantDeleted
86
+ | RestaurantHoursUpdated
87
+ | RestaurantLocationUpdated
88
+ | RestaurantCapacityChanged
89
+ | RestaurantSettingsUpdated;