cabloy 5.1.113 → 5.1.115

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 (141) hide show
  1. package/.cabloy-version +1 -1
  2. package/.claude/skills/cabloy-backend-scaffold/references/follow-up-checklist.md +4 -0
  3. package/.github/workflows/vona-test-mysql.yml +12 -0
  4. package/.github/workflows/vona-test-pg.yml +5 -1
  5. package/CHANGELOG.md +20 -0
  6. package/CLAUDE.md +4 -0
  7. package/cabloy-docs/backend/internal-aop-guide.md +35 -0
  8. package/cabloy-docs/backend/unit-testing.md +72 -1
  9. package/package.json +1 -1
  10. package/vona/packages-cli/cli/package.json +1 -1
  11. package/vona/packages-cli/cli-set-api/package.json +1 -1
  12. package/vona/packages-cli/cli-set-api/toolsIsolate/test.ts +26 -13
  13. package/vona/packages-utils/compose/package.json +1 -1
  14. package/vona/packages-utils/compose/src/index.ts +19 -11
  15. package/vona/packages-vona/vona/package.json +1 -1
  16. package/vona/packages-vona/vona-core/package.json +1 -1
  17. package/vona/packages-vona/vona-core/src/lib/bean/beanContainer.ts +15 -3
  18. package/vona/packages-vona/vona-mock/package.json +1 -1
  19. package/vona/pnpm-lock.yaml +143 -12
  20. package/vona/pnpm-workspace.yaml +1 -1
  21. package/vona/src/suite/a-commerce/modules/commerce-catalog/src/.metadata/index.ts +8 -0
  22. package/vona/src/suite/a-commerce/modules/commerce-catalog/src/bean/meta.version.ts +1 -0
  23. package/vona/src/suite/a-commerce/modules/commerce-catalog/src/config/locale/en-us.ts +3 -0
  24. package/vona/src/suite/a-commerce/modules/commerce-catalog/src/config/locale/zh-cn.ts +3 -0
  25. package/vona/src/suite/a-commerce/modules/commerce-catalog/src/dto/skuAttribute.tsx +17 -0
  26. package/vona/src/suite/a-commerce/modules/commerce-catalog/src/entity/sku.tsx +10 -1
  27. package/vona/src/suite/a-commerce/modules/commerce-catalog/test/catalog.test.ts +1 -1
  28. package/vona/src/suite/a-commerce/modules/commerce-member/test/addressOwnership.test.ts +6 -1
  29. package/vona/src/suite/a-commerce/modules/commerce-payment/package.json +2 -1
  30. package/vona/src/suite/a-commerce/modules/commerce-payment/src/.metadata/index.ts +228 -0
  31. package/vona/src/suite/a-commerce/modules/commerce-payment/src/bean/meta.index.ts +15 -0
  32. package/vona/src/suite/a-commerce/modules/commerce-payment/src/bean/meta.version.ts +35 -0
  33. package/vona/src/suite/a-commerce/modules/commerce-payment/src/dto/paymentAttemptView.tsx +26 -0
  34. package/vona/src/suite/a-commerce/modules/commerce-payment/src/entity/paymentAttempt.tsx +34 -0
  35. package/vona/src/suite/a-commerce/modules/commerce-payment/src/model/paymentAttempt.ts +10 -0
  36. package/vona/src/suite/a-commerce/modules/commerce-payment/src/service/paymentAttempt.ts +41 -0
  37. package/vona/src/suite/a-commerce/modules/commerce-payment/test/paymentAttempt.test.ts +33 -0
  38. package/vona/src/suite/a-commerce/modules/commerce-promotion/package.json +4 -2
  39. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/.metadata/index.ts +533 -2
  40. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/.metadata/locales.ts +18 -0
  41. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/bean/meta.index.ts +24 -0
  42. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/bean/meta.version.ts +137 -0
  43. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/bean/ssrMenu.couponTemplate.ts +30 -0
  44. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/config/locale/en-us.ts +37 -0
  45. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/config/locale/zh-cn.ts +37 -0
  46. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/controller/coupon.ts +37 -0
  47. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/controller/couponTemplate.ts +65 -0
  48. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/dto/couponIssue.tsx +22 -0
  49. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/dto/couponMineItem.tsx +32 -0
  50. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/dto/couponTemplateCreate.tsx +43 -0
  51. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/dto/couponTemplateSelectReq.tsx +28 -0
  52. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/dto/couponTemplateSelectRes.tsx +11 -0
  53. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/dto/couponTemplateSelectResItem.tsx +39 -0
  54. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/dto/couponTemplateUpdate.tsx +19 -0
  55. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/dto/couponTemplateView.tsx +25 -0
  56. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/entity/couponAudit.tsx +73 -0
  57. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/entity/couponGrant.tsx +83 -0
  58. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/entity/couponTemplate.tsx +82 -0
  59. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/index.ts +1 -0
  60. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/model/couponAudit.ts +10 -0
  61. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/model/couponGrant.ts +10 -0
  62. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/model/couponTemplate.ts +10 -0
  63. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/service/coupon.ts +397 -0
  64. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/service/couponTemplate.ts +52 -0
  65. package/vona/src/suite/a-commerce/modules/commerce-promotion/test/couponReservation.test.ts +162 -0
  66. package/vona/src/suite/a-commerce/modules/commerce-seed/src/bean/meta.version.ts +8 -10
  67. package/vona/src/suite/a-commerce/modules/commerce-trade/package.json +4 -1
  68. package/vona/src/suite/a-commerce/modules/commerce-trade/src/.metadata/index.ts +277 -0
  69. package/vona/src/suite/a-commerce/modules/commerce-trade/src/bean/bean.scheduleOrderExpiry.ts +26 -0
  70. package/vona/src/suite/a-commerce/modules/commerce-trade/src/bean/meta.index.ts +9 -0
  71. package/vona/src/suite/a-commerce/modules/commerce-trade/src/bean/meta.version.ts +75 -0
  72. package/vona/src/suite/a-commerce/modules/commerce-trade/src/config/locale/en-us.ts +11 -2
  73. package/vona/src/suite/a-commerce/modules/commerce-trade/src/config/locale/zh-cn.ts +11 -2
  74. package/vona/src/suite/a-commerce/modules/commerce-trade/src/controller/checkout.ts +19 -0
  75. package/vona/src/suite/a-commerce/modules/commerce-trade/src/dto/checkoutCreate.tsx +19 -0
  76. package/vona/src/suite/a-commerce/modules/commerce-trade/src/dto/checkoutResult.tsx +32 -0
  77. package/vona/src/suite/a-commerce/modules/commerce-trade/src/dto/orderAddressSnapshot.tsx +33 -0
  78. package/vona/src/suite/a-commerce/modules/commerce-trade/src/dto/orderCouponSnapshot.tsx +35 -0
  79. package/vona/src/suite/a-commerce/modules/commerce-trade/src/dto/orderLineSkuAttributeSnapshot.tsx +15 -0
  80. package/vona/src/suite/a-commerce/modules/commerce-trade/src/entity/order.tsx +90 -0
  81. package/vona/src/suite/a-commerce/modules/commerce-trade/src/entity/orderAudit.tsx +36 -0
  82. package/vona/src/suite/a-commerce/modules/commerce-trade/src/entity/orderLine.tsx +52 -0
  83. package/vona/src/suite/a-commerce/modules/commerce-trade/src/entity/stockReservation.tsx +4 -1
  84. package/vona/src/suite/a-commerce/modules/commerce-trade/src/model/order.ts +15 -0
  85. package/vona/src/suite/a-commerce/modules/commerce-trade/src/model/orderAudit.ts +10 -0
  86. package/vona/src/suite/a-commerce/modules/commerce-trade/src/model/orderLine.ts +10 -0
  87. package/vona/src/suite/a-commerce/modules/commerce-trade/src/service/order.ts +556 -0
  88. package/vona/src/suite/a-commerce/modules/commerce-trade/src/service/stockBalance.ts +15 -20
  89. package/vona/src/suite/a-commerce/modules/commerce-trade/test/cartOwnership.test.ts +8 -3
  90. package/vona/src/suite/a-commerce/modules/commerce-trade/test/checkoutReservation.test.ts +158 -0
  91. package/vona/src/suite/a-commerce/modules/commerce-trade/test/orderSnapshot.test.ts +203 -0
  92. package/vona/src/suite/a-commerce/modules/commerce-trade/test/reservationExpiry.test.ts +163 -0
  93. package/vona/src/suite/a-commerce/modules/commerce-trade/test/stockBalance.test.ts +11 -6
  94. package/vona/src/suite/a-commerce/modules/commerce-trade/test/stockReservation.test.ts +11 -6
  95. package/vona/src/suite-vendor/a-image/modules/image-cloudflare/package.json +1 -1
  96. package/vona/src/suite-vendor/a-image/modules/image-cloudflare/src/service/imageCloudflare.ts +10 -7
  97. package/vona/src/suite-vendor/a-image/package.json +1 -1
  98. package/vona/src/suite-vendor/a-vona/modules/a-aspect/package.json +1 -1
  99. package/vona/src/suite-vendor/a-vona/modules/a-aspect/src/types/aopMethod.ts +16 -3
  100. package/vona/src/suite-vendor/a-vona/modules/a-core/package.json +4 -2
  101. package/vona/src/suite-vendor/a-vona/modules/a-core/src/bean/bean.core.ts +6 -0
  102. package/vona/src/suite-vendor/a-vona/modules/a-core/src/index.ts +1 -0
  103. package/vona/src/suite-vendor/a-vona/modules/a-core/src/lib/core.ts +6 -0
  104. package/vona/src/suite-vendor/a-vona/modules/a-core/src/types/fetch.ts +7 -0
  105. package/vona/src/suite-vendor/a-vona/modules/a-core/src/types/index.ts +1 -0
  106. package/vona/src/suite-vendor/a-vona/modules/a-executor/package.json +1 -1
  107. package/vona/src/suite-vendor/a-vona/modules/a-executor/src/lib/utils.ts +5 -3
  108. package/vona/src/suite-vendor/a-vona/modules/a-retryable/package.json +50 -0
  109. package/vona/src/suite-vendor/a-vona/modules/a-retryable/src/.metadata/index.ts +55 -0
  110. package/vona/src/suite-vendor/a-vona/modules/a-retryable/src/.metadata/this.ts +2 -0
  111. package/vona/src/suite-vendor/a-vona/modules/a-retryable/src/bean/aopMethod.retryable.ts +45 -0
  112. package/vona/src/suite-vendor/a-vona/modules/a-retryable/src/index.ts +1 -0
  113. package/vona/src/suite-vendor/a-vona/modules/a-retryable/tsconfig.build.json +11 -0
  114. package/vona/src/suite-vendor/a-vona/modules/a-retryable/tsconfig.json +7 -0
  115. package/vona/src/suite-vendor/a-vona/modules/a-vona/package.json +2 -1
  116. package/vona/src/suite-vendor/a-vona/package.json +2 -1
  117. package/vona/src/suite-vendor/a-vona/tsconfig.json +3 -0
  118. package/zova/packages-utils/zova-jsx/package.json +3 -3
  119. package/zova/packages-zova/zova/package.json +3 -3
  120. package/zova/packages-zova/zova-core/package.json +2 -2
  121. package/zova/pnpm-lock.yaml +31 -31
  122. package/zova/src/suite/a-commerce/modules/commerce-promotion/cli/openapi.config.ts +9 -0
  123. package/zova/src/suite/a-commerce/modules/commerce-promotion/package.json +2 -1
  124. package/zova/src/suite/a-commerce/modules/commerce-promotion/src/.metadata/index.ts +115 -1
  125. package/zova/src/suite/a-commerce/modules/commerce-promotion/src/api/commercePromotionCoupon.ts +24 -0
  126. package/zova/src/suite/a-commerce/modules/commerce-promotion/src/api/openapi/baseURL.ts +5 -0
  127. package/zova/src/suite/a-commerce/modules/commerce-promotion/src/api/openapi/index.ts +3 -0
  128. package/zova/src/suite/a-commerce/modules/commerce-promotion/src/api/openapi/schemas.ts +478 -0
  129. package/zova/src/suite/a-commerce/modules/commerce-promotion/src/api/openapi/types.ts +8187 -0
  130. package/zova/src/suite/a-commerce/modules/commerce-promotion/src/apiSchema/commercePromotionCoupon.ts +13 -0
  131. package/zova/src/suite/a-commerce/modules/commerce-promotion/src/model/coupon.ts +19 -0
  132. package/zova/src/suite/a-commerce/modules/commerce-trade/cli/openapi.config.ts +1 -0
  133. package/zova/src/suite/a-commerce/modules/commerce-trade/src/.metadata/index.ts +30 -0
  134. package/zova/src/suite/a-commerce/modules/commerce-trade/src/api/commerceTradeCheckout.ts +27 -0
  135. package/zova/src/suite/a-commerce/modules/commerce-trade/src/api/openapi/schemas.ts +92 -52
  136. package/zova/src/suite/a-commerce/modules/commerce-trade/src/api/openapi/types.ts +1389 -848
  137. package/zova/src/suite/a-commerce/modules/commerce-trade/src/apiSchema/commerceTradeCheckout.ts +13 -0
  138. package/zova/src/suite/a-commerce/modules/commerce-trade/src/model/cart.ts +13 -0
  139. package/zova/src/suite-vendor/a-zova/modules/a-zova/package.json +3 -3
  140. package/zova/src/suite-vendor/a-zova/package.json +2 -2
  141. /package/vona/patches/{zova-core@5.1.78.patch → zova-core@5.1.79.patch} +0 -0
@@ -5,11 +5,17 @@ import type { TableIdentity } from 'table-identity';
5
5
  /** entity: begin */
6
6
  export * from '../entity/cart.tsx';
7
7
  export * from '../entity/cartItem.tsx';
8
+ export * from '../entity/order.tsx';
9
+ export * from '../entity/orderAudit.tsx';
10
+ export * from '../entity/orderLine.tsx';
8
11
  export * from '../entity/stockAudit.tsx';
9
12
  export * from '../entity/stockBalance.tsx';
10
13
  export * from '../entity/stockReservation.tsx';
11
14
  import type { IEntityOptionsCart } from '../entity/cart.tsx';
12
15
  import type { IEntityOptionsCartItem } from '../entity/cartItem.tsx';
16
+ import type { IEntityOptionsOrder } from '../entity/order.tsx';
17
+ import type { IEntityOptionsOrderAudit } from '../entity/orderAudit.tsx';
18
+ import type { IEntityOptionsOrderLine } from '../entity/orderLine.tsx';
13
19
  import type { IEntityOptionsStockAudit } from '../entity/stockAudit.tsx';
14
20
  import type { IEntityOptionsStockBalance } from '../entity/stockBalance.tsx';
15
21
  import type { IEntityOptionsStockReservation } from '../entity/stockReservation.tsx';
@@ -19,6 +25,9 @@ declare module 'vona-module-a-orm' {
19
25
  export interface IEntityRecord {
20
26
  'commerce-trade:cart': IEntityOptionsCart;
21
27
  'commerce-trade:cartItem': IEntityOptionsCartItem;
28
+ 'commerce-trade:order': IEntityOptionsOrder;
29
+ 'commerce-trade:orderAudit': IEntityOptionsOrderAudit;
30
+ 'commerce-trade:orderLine': IEntityOptionsOrderLine;
22
31
  'commerce-trade:stockAudit': IEntityOptionsStockAudit;
23
32
  'commerce-trade:stockBalance': IEntityOptionsStockBalance;
24
33
  'commerce-trade:stockReservation': IEntityOptionsStockReservation;
@@ -33,12 +42,18 @@ declare module 'vona-module-commerce-trade' {
33
42
  /** entity: begin */
34
43
  import type { EntityCart } from '../entity/cart.tsx';
35
44
  import type { EntityCartItem } from '../entity/cartItem.tsx';
45
+ import type { EntityOrder } from '../entity/order.tsx';
46
+ import type { EntityOrderAudit } from '../entity/orderAudit.tsx';
47
+ import type { EntityOrderLine } from '../entity/orderLine.tsx';
36
48
  import type { EntityStockAudit } from '../entity/stockAudit.tsx';
37
49
  import type { EntityStockBalance } from '../entity/stockBalance.tsx';
38
50
  import type { EntityStockReservation } from '../entity/stockReservation.tsx';
39
51
  export interface IModuleEntity {
40
52
  'cart': EntityCartMeta;
41
53
  'cartItem': EntityCartItemMeta;
54
+ 'order': EntityOrderMeta;
55
+ 'orderAudit': EntityOrderAuditMeta;
56
+ 'orderLine': EntityOrderLineMeta;
42
57
  'stockAudit': EntityStockAuditMeta;
43
58
  'stockBalance': EntityStockBalanceMeta;
44
59
  'stockReservation': EntityStockReservationMeta;
@@ -47,11 +62,17 @@ export interface IModuleEntity {
47
62
  /** entity: begin */
48
63
  export type EntityCartTableName = 'commerceTradeCart';
49
64
  export type EntityCartItemTableName = 'commerceTradeCartItem';
65
+ export type EntityOrderTableName = 'commerceTradeOrder';
66
+ export type EntityOrderAuditTableName = 'commerceTradeOrderAudit';
67
+ export type EntityOrderLineTableName = 'commerceTradeOrderLine';
50
68
  export type EntityStockAuditTableName = 'commerceTradeStockAudit';
51
69
  export type EntityStockBalanceTableName = 'commerceTradeStockBalance';
52
70
  export type EntityStockReservationTableName = 'commerceTradeStockReservation';
53
71
  export type EntityCartMeta=TypeEntityMeta<EntityCart,EntityCartTableName>;
54
72
  export type EntityCartItemMeta=TypeEntityMeta<EntityCartItem,EntityCartItemTableName>;
73
+ export type EntityOrderMeta=TypeEntityMeta<EntityOrder,EntityOrderTableName>;
74
+ export type EntityOrderAuditMeta=TypeEntityMeta<EntityOrderAudit,EntityOrderAuditTableName>;
75
+ export type EntityOrderLineMeta=TypeEntityMeta<EntityOrderLine,EntityOrderLineTableName>;
55
76
  export type EntityStockAuditMeta=TypeEntityMeta<EntityStockAudit,EntityStockAuditTableName>;
56
77
  export type EntityStockBalanceMeta=TypeEntityMeta<EntityStockBalance,EntityStockBalanceTableName>;
57
78
  export type EntityStockReservationMeta=TypeEntityMeta<EntityStockReservation,EntityStockReservationTableName>;
@@ -59,6 +80,9 @@ declare module 'vona-module-a-orm' {
59
80
  export interface ITableRecord {
60
81
  'commerceTradeCart': EntityCartMeta;
61
82
  'commerceTradeCartItem': EntityCartItemMeta;
83
+ 'commerceTradeOrder': EntityOrderMeta;
84
+ 'commerceTradeOrderAudit': EntityOrderAuditMeta;
85
+ 'commerceTradeOrderLine': EntityOrderLineMeta;
62
86
  'commerceTradeStockAudit': EntityStockAuditMeta;
63
87
  'commerceTradeStockBalance': EntityStockBalanceMeta;
64
88
  'commerceTradeStockReservation': EntityStockReservationMeta;
@@ -74,6 +98,18 @@ declare module 'vona-module-commerce-trade' {
74
98
  fields?: TypeEntityOptionsFields<EntityCartItem, IEntityOptionsCartItem[TypeSymbolKeyFieldsMore]>;
75
99
  }
76
100
 
101
+ export interface IEntityOptionsOrder {
102
+ fields?: TypeEntityOptionsFields<EntityOrder, IEntityOptionsOrder[TypeSymbolKeyFieldsMore]>;
103
+ }
104
+
105
+ export interface IEntityOptionsOrderAudit {
106
+ fields?: TypeEntityOptionsFields<EntityOrderAudit, IEntityOptionsOrderAudit[TypeSymbolKeyFieldsMore]>;
107
+ }
108
+
109
+ export interface IEntityOptionsOrderLine {
110
+ fields?: TypeEntityOptionsFields<EntityOrderLine, IEntityOptionsOrderLine[TypeSymbolKeyFieldsMore]>;
111
+ }
112
+
77
113
  export interface IEntityOptionsStockAudit {
78
114
  fields?: TypeEntityOptionsFields<EntityStockAudit, IEntityOptionsStockAudit[TypeSymbolKeyFieldsMore]>;
79
115
  }
@@ -90,11 +126,17 @@ declare module 'vona-module-commerce-trade' {
90
126
  /** model: begin */
91
127
  export * from '../model/cart.ts';
92
128
  export * from '../model/cartItem.ts';
129
+ export * from '../model/order.ts';
130
+ export * from '../model/orderAudit.ts';
131
+ export * from '../model/orderLine.ts';
93
132
  export * from '../model/stockAudit.ts';
94
133
  export * from '../model/stockBalance.ts';
95
134
  export * from '../model/stockReservation.ts';
96
135
  import type { IModelOptionsCart } from '../model/cart.ts';
97
136
  import type { IModelOptionsCartItem } from '../model/cartItem.ts';
137
+ import type { IModelOptionsOrder } from '../model/order.ts';
138
+ import type { IModelOptionsOrderAudit } from '../model/orderAudit.ts';
139
+ import type { IModelOptionsOrderLine } from '../model/orderLine.ts';
98
140
  import type { IModelOptionsStockAudit } from '../model/stockAudit.ts';
99
141
  import type { IModelOptionsStockBalance } from '../model/stockBalance.ts';
100
142
  import type { IModelOptionsStockReservation } from '../model/stockReservation.ts';
@@ -104,6 +146,9 @@ declare module 'vona-module-a-orm' {
104
146
  export interface IModelRecord {
105
147
  'commerce-trade:cart': IModelOptionsCart;
106
148
  'commerce-trade:cartItem': IModelOptionsCartItem;
149
+ 'commerce-trade:order': IModelOptionsOrder;
150
+ 'commerce-trade:orderAudit': IModelOptionsOrderAudit;
151
+ 'commerce-trade:orderLine': IModelOptionsOrderLine;
107
152
  'commerce-trade:stockAudit': IModelOptionsStockAudit;
108
153
  'commerce-trade:stockBalance': IModelOptionsStockBalance;
109
154
  'commerce-trade:stockReservation': IModelOptionsStockReservation;
@@ -135,6 +180,39 @@ declare module 'vona-module-commerce-trade' {
135
180
  get $onionOptions(): IModelOptionsCartItem;
136
181
  }
137
182
 
183
+ export interface ModelOrder {
184
+ /** @internal */
185
+ get scope(): ScopeModuleCommerceTrade;
186
+ }
187
+
188
+ export interface ModelOrder {
189
+ get $beanFullName(): 'commerce-trade.model.order';
190
+ get $onionName(): 'commerce-trade:order';
191
+ get $onionOptions(): IModelOptionsOrder;
192
+ }
193
+
194
+ export interface ModelOrderAudit {
195
+ /** @internal */
196
+ get scope(): ScopeModuleCommerceTrade;
197
+ }
198
+
199
+ export interface ModelOrderAudit {
200
+ get $beanFullName(): 'commerce-trade.model.orderAudit';
201
+ get $onionName(): 'commerce-trade:orderAudit';
202
+ get $onionOptions(): IModelOptionsOrderAudit;
203
+ }
204
+
205
+ export interface ModelOrderLine {
206
+ /** @internal */
207
+ get scope(): ScopeModuleCommerceTrade;
208
+ }
209
+
210
+ export interface ModelOrderLine {
211
+ get $beanFullName(): 'commerce-trade.model.orderLine';
212
+ get $onionName(): 'commerce-trade:orderLine';
213
+ get $onionOptions(): IModelOptionsOrderLine;
214
+ }
215
+
138
216
  export interface ModelStockAudit {
139
217
  /** @internal */
140
218
  get scope(): ScopeModuleCommerceTrade;
@@ -172,12 +250,18 @@ declare module 'vona-module-commerce-trade' {
172
250
  /** model: begin */
173
251
  import type { ModelCart } from '../model/cart.ts';
174
252
  import type { ModelCartItem } from '../model/cartItem.ts';
253
+ import type { ModelOrder } from '../model/order.ts';
254
+ import type { ModelOrderAudit } from '../model/orderAudit.ts';
255
+ import type { ModelOrderLine } from '../model/orderLine.ts';
175
256
  import type { ModelStockAudit } from '../model/stockAudit.ts';
176
257
  import type { ModelStockBalance } from '../model/stockBalance.ts';
177
258
  import type { ModelStockReservation } from '../model/stockReservation.ts';
178
259
  export interface IModuleModel {
179
260
  'cart': ModelCart;
180
261
  'cartItem': ModelCartItem;
262
+ 'order': ModelOrder;
263
+ 'orderAudit': ModelOrderAudit;
264
+ 'orderLine': ModelOrderLine;
181
265
  'stockAudit': ModelStockAudit;
182
266
  'stockBalance': ModelStockBalance;
183
267
  'stockReservation': ModelStockReservation;
@@ -190,6 +274,9 @@ declare module 'vona' {
190
274
  export interface IBeanRecordGeneral {
191
275
  'commerce-trade.model.cart': ModelCart;
192
276
  'commerce-trade.model.cartItem': ModelCartItem;
277
+ 'commerce-trade.model.order': ModelOrder;
278
+ 'commerce-trade.model.orderAudit': ModelOrderAudit;
279
+ 'commerce-trade.model.orderLine': ModelOrderLine;
193
280
  'commerce-trade.model.stockAudit': ModelStockAudit;
194
281
  'commerce-trade.model.stockBalance': ModelStockBalance;
195
282
  'commerce-trade.model.stockReservation': ModelStockReservation;
@@ -205,6 +292,11 @@ declare module 'vona-module-commerce-trade' {
205
292
  items: IModelRelationHasMany<'commerce-trade:cartItem', 'cartId', false, 'id'|'skuId'|'quantity', undefined, undefined, undefined>;
206
293
  };
207
294
  }
295
+ export interface IModelOptionsOrder {
296
+ relations: {
297
+ lines: IModelRelationHasMany<'commerce-trade:orderLine', 'orderId', false, '*', undefined, undefined, undefined>;
298
+ };
299
+ }
208
300
  export interface ModelCart {
209
301
  [SymbolKeyEntity]: EntityCart;
210
302
  [SymbolKeyEntityMeta]: EntityCartMeta;
@@ -259,6 +351,87 @@ export interface ModelCartItem {
259
351
  updateById<T extends IModelUpdateOptions<EntityCartItem,ModelCartItem>>(id: TableIdentity, data: TypeModelMutateRelationData<EntityCartItem,ModelCartItem, T>, options?: T): Promise<TypeModelMutateRelationData<EntityCartItem,ModelCartItem, T>>;
260
352
  deleteById<T extends IModelDeleteOptions<EntityCartItem,ModelCartItem>>(id: TableIdentity, options?: T): Promise<void>;
261
353
  }
354
+ export interface ModelOrder {
355
+ [SymbolKeyEntity]: EntityOrder;
356
+ [SymbolKeyEntityMeta]: EntityOrderMeta;
357
+ [SymbolKeyModelOptions]: IModelOptionsOrder;
358
+ get<T extends IModelGetOptions<EntityOrder,ModelOrder>>(where: TypeModelWhere<EntityOrder>, options?: T): Promise<TypeModelRelationResult<EntityOrder, ModelOrder, T> | undefined>;
359
+ getForUpdate<T extends IModelGetOptions<EntityOrder,ModelOrder>>(where: TypeModelWhere<EntityOrder>, options?: T): Promise<TypeModelRelationResult<EntityOrder, ModelOrder, T> | undefined>;
360
+ getByIdForUpdate<T extends IModelGetOptions<EntityOrder,ModelOrder>>(id: TableIdentity, options?: T): Promise<TypeModelRelationResult<EntityOrder, ModelOrder, T> | undefined>;
361
+ mget<T extends IModelGetOptions<EntityOrder,ModelOrder>>(ids: TableIdentity[], options?: T): Promise<TypeModelRelationResult<EntityOrder, ModelOrder, T>[]>;
362
+ selectAndCount<T extends IModelSelectParams<EntityOrder,ModelOrder,ModelJoins>, ModelJoins extends TypeModelsClassLikeGeneral | undefined = undefined>(params?: T, options?: IModelMethodOptions, modelJoins?: ModelJoins): Promise<TypeModelSelectAndCount<EntityOrder, ModelOrder, T>>;
363
+ select<T extends IModelSelectParams<EntityOrder,ModelOrder,ModelJoins>, ModelJoins extends TypeModelsClassLikeGeneral | undefined = undefined>(params?: T, options?: IModelMethodOptions, modelJoins?: ModelJoins): Promise<TypeModelRelationResult<EntityOrder, ModelOrder, T>[]>;
364
+ insert<T extends IModelInsertOptions<EntityOrder,ModelOrder>>(data?: TypeModelMutateRelationData<EntityOrder,ModelOrder, T>, options?: T): Promise<TypeModelMutateRelationData<EntityOrder,ModelOrder, T, true>>;
365
+ insertBulk<T extends IModelInsertOptions<EntityOrder,ModelOrder>>(items: TypeModelMutateRelationData<EntityOrder,ModelOrder, T>[], options?: T): Promise<TypeModelMutateRelationData<EntityOrder,ModelOrder, T, true>[]>;
366
+ update<T extends IModelUpdateOptions<EntityOrder,ModelOrder>>(data: TypeModelMutateRelationData<EntityOrder,ModelOrder, T>, options?: T): Promise<TypeModelMutateRelationData<EntityOrder,ModelOrder, T>>;
367
+ updateBulk<T extends IModelUpdateOptions<EntityOrder,ModelOrder>>(items: TypeModelMutateRelationData<EntityOrder,ModelOrder, T>[], options?: T): Promise<TypeModelMutateRelationData<EntityOrder,ModelOrder, T>[]>;
368
+ delete<T extends IModelDeleteOptions<EntityOrder,ModelOrder>>(where?: TypeModelWhere<EntityOrder>, options?: T): Promise<void>;
369
+ deleteBulk<T extends IModelDeleteOptions<EntityOrder,ModelOrder>>(ids: TableIdentity[], options?: T): Promise<void>;
370
+ mutate<T extends IModelMutateOptions<EntityOrder,ModelOrder>>(data?: TypeModelMutateRelationData<EntityOrder,ModelOrder, T>, options?: T): Promise<TypeModelMutateRelationData<EntityOrder,ModelOrder, T>>;
371
+ mutateBulk<T extends IModelMutateOptions<EntityOrder,ModelOrder>>(items: TypeModelMutateRelationData<EntityOrder,ModelOrder, T>[], options?: T): Promise<TypeModelMutateRelationData<EntityOrder,ModelOrder, T>[]>;
372
+ count<T extends IModelSelectCountParams<EntityOrder,ModelOrder,ModelJoins>, ModelJoins extends TypeModelsClassLikeGeneral | undefined = undefined>(params?: T, options?: IModelMethodOptions, modelJoins?: ModelJoins): Promise<string | undefined>;
373
+ increment<T extends IModelIncrementParams<EntityOrder,ModelOrder,ModelJoins>, ModelJoins extends TypeModelsClassLikeGeneral | undefined = undefined>(params?: T, options?: IModelMethodOptions, modelJoins?: ModelJoins): Promise<number>;
374
+ decrement<T extends IModelIncrementParams<EntityOrder,ModelOrder,ModelJoins>, ModelJoins extends TypeModelsClassLikeGeneral | undefined = undefined>(params?: T, options?: IModelMethodOptions, modelJoins?: ModelJoins): Promise<number>;
375
+ aggregate<T extends IModelSelectAggrParams<EntityOrder,ModelOrder,ModelJoins>, ModelJoins extends TypeModelsClassLikeGeneral | undefined = undefined>(params?: T, options?: IModelMethodOptions, modelJoins?: ModelJoins): Promise<TypeModelAggrRelationResult<T>>;
376
+ group<T extends IModelSelectGroupParams<EntityOrder,ModelOrder,ModelJoins>, ModelJoins extends TypeModelsClassLikeGeneral | undefined = undefined>(params?: T, options?: IModelMethodOptions, modelJoins?: ModelJoins): Promise<TypeModelGroupRelationResult<EntityOrder, T>[]>;
377
+ getById<T extends IModelGetOptions<EntityOrder,ModelOrder>>(id: TableIdentity, options?: T): Promise<TypeModelRelationResult<EntityOrder, ModelOrder, T> | undefined>;
378
+ updateById<T extends IModelUpdateOptions<EntityOrder,ModelOrder>>(id: TableIdentity, data: TypeModelMutateRelationData<EntityOrder,ModelOrder, T>, options?: T): Promise<TypeModelMutateRelationData<EntityOrder,ModelOrder, T>>;
379
+ deleteById<T extends IModelDeleteOptions<EntityOrder,ModelOrder>>(id: TableIdentity, options?: T): Promise<void>;
380
+ }
381
+ export interface ModelOrderAudit {
382
+ [SymbolKeyEntity]: EntityOrderAudit;
383
+ [SymbolKeyEntityMeta]: EntityOrderAuditMeta;
384
+ [SymbolKeyModelOptions]: IModelOptionsOrderAudit;
385
+ get<T extends IModelGetOptions<EntityOrderAudit,ModelOrderAudit>>(where: TypeModelWhere<EntityOrderAudit>, options?: T): Promise<TypeModelRelationResult<EntityOrderAudit, ModelOrderAudit, T> | undefined>;
386
+ getForUpdate<T extends IModelGetOptions<EntityOrderAudit,ModelOrderAudit>>(where: TypeModelWhere<EntityOrderAudit>, options?: T): Promise<TypeModelRelationResult<EntityOrderAudit, ModelOrderAudit, T> | undefined>;
387
+ getByIdForUpdate<T extends IModelGetOptions<EntityOrderAudit,ModelOrderAudit>>(id: TableIdentity, options?: T): Promise<TypeModelRelationResult<EntityOrderAudit, ModelOrderAudit, T> | undefined>;
388
+ mget<T extends IModelGetOptions<EntityOrderAudit,ModelOrderAudit>>(ids: TableIdentity[], options?: T): Promise<TypeModelRelationResult<EntityOrderAudit, ModelOrderAudit, T>[]>;
389
+ selectAndCount<T extends IModelSelectParams<EntityOrderAudit,ModelOrderAudit,ModelJoins>, ModelJoins extends TypeModelsClassLikeGeneral | undefined = undefined>(params?: T, options?: IModelMethodOptions, modelJoins?: ModelJoins): Promise<TypeModelSelectAndCount<EntityOrderAudit, ModelOrderAudit, T>>;
390
+ select<T extends IModelSelectParams<EntityOrderAudit,ModelOrderAudit,ModelJoins>, ModelJoins extends TypeModelsClassLikeGeneral | undefined = undefined>(params?: T, options?: IModelMethodOptions, modelJoins?: ModelJoins): Promise<TypeModelRelationResult<EntityOrderAudit, ModelOrderAudit, T>[]>;
391
+ insert<T extends IModelInsertOptions<EntityOrderAudit,ModelOrderAudit>>(data?: TypeModelMutateRelationData<EntityOrderAudit,ModelOrderAudit, T>, options?: T): Promise<TypeModelMutateRelationData<EntityOrderAudit,ModelOrderAudit, T, true>>;
392
+ insertBulk<T extends IModelInsertOptions<EntityOrderAudit,ModelOrderAudit>>(items: TypeModelMutateRelationData<EntityOrderAudit,ModelOrderAudit, T>[], options?: T): Promise<TypeModelMutateRelationData<EntityOrderAudit,ModelOrderAudit, T, true>[]>;
393
+ update<T extends IModelUpdateOptions<EntityOrderAudit,ModelOrderAudit>>(data: TypeModelMutateRelationData<EntityOrderAudit,ModelOrderAudit, T>, options?: T): Promise<TypeModelMutateRelationData<EntityOrderAudit,ModelOrderAudit, T>>;
394
+ updateBulk<T extends IModelUpdateOptions<EntityOrderAudit,ModelOrderAudit>>(items: TypeModelMutateRelationData<EntityOrderAudit,ModelOrderAudit, T>[], options?: T): Promise<TypeModelMutateRelationData<EntityOrderAudit,ModelOrderAudit, T>[]>;
395
+ delete<T extends IModelDeleteOptions<EntityOrderAudit,ModelOrderAudit>>(where?: TypeModelWhere<EntityOrderAudit>, options?: T): Promise<void>;
396
+ deleteBulk<T extends IModelDeleteOptions<EntityOrderAudit,ModelOrderAudit>>(ids: TableIdentity[], options?: T): Promise<void>;
397
+ mutate<T extends IModelMutateOptions<EntityOrderAudit,ModelOrderAudit>>(data?: TypeModelMutateRelationData<EntityOrderAudit,ModelOrderAudit, T>, options?: T): Promise<TypeModelMutateRelationData<EntityOrderAudit,ModelOrderAudit, T>>;
398
+ mutateBulk<T extends IModelMutateOptions<EntityOrderAudit,ModelOrderAudit>>(items: TypeModelMutateRelationData<EntityOrderAudit,ModelOrderAudit, T>[], options?: T): Promise<TypeModelMutateRelationData<EntityOrderAudit,ModelOrderAudit, T>[]>;
399
+ count<T extends IModelSelectCountParams<EntityOrderAudit,ModelOrderAudit,ModelJoins>, ModelJoins extends TypeModelsClassLikeGeneral | undefined = undefined>(params?: T, options?: IModelMethodOptions, modelJoins?: ModelJoins): Promise<string | undefined>;
400
+ increment<T extends IModelIncrementParams<EntityOrderAudit,ModelOrderAudit,ModelJoins>, ModelJoins extends TypeModelsClassLikeGeneral | undefined = undefined>(params?: T, options?: IModelMethodOptions, modelJoins?: ModelJoins): Promise<number>;
401
+ decrement<T extends IModelIncrementParams<EntityOrderAudit,ModelOrderAudit,ModelJoins>, ModelJoins extends TypeModelsClassLikeGeneral | undefined = undefined>(params?: T, options?: IModelMethodOptions, modelJoins?: ModelJoins): Promise<number>;
402
+ aggregate<T extends IModelSelectAggrParams<EntityOrderAudit,ModelOrderAudit,ModelJoins>, ModelJoins extends TypeModelsClassLikeGeneral | undefined = undefined>(params?: T, options?: IModelMethodOptions, modelJoins?: ModelJoins): Promise<TypeModelAggrRelationResult<T>>;
403
+ group<T extends IModelSelectGroupParams<EntityOrderAudit,ModelOrderAudit,ModelJoins>, ModelJoins extends TypeModelsClassLikeGeneral | undefined = undefined>(params?: T, options?: IModelMethodOptions, modelJoins?: ModelJoins): Promise<TypeModelGroupRelationResult<EntityOrderAudit, T>[]>;
404
+ getById<T extends IModelGetOptions<EntityOrderAudit,ModelOrderAudit>>(id: TableIdentity, options?: T): Promise<TypeModelRelationResult<EntityOrderAudit, ModelOrderAudit, T> | undefined>;
405
+ updateById<T extends IModelUpdateOptions<EntityOrderAudit,ModelOrderAudit>>(id: TableIdentity, data: TypeModelMutateRelationData<EntityOrderAudit,ModelOrderAudit, T>, options?: T): Promise<TypeModelMutateRelationData<EntityOrderAudit,ModelOrderAudit, T>>;
406
+ deleteById<T extends IModelDeleteOptions<EntityOrderAudit,ModelOrderAudit>>(id: TableIdentity, options?: T): Promise<void>;
407
+ }
408
+ export interface ModelOrderLine {
409
+ [SymbolKeyEntity]: EntityOrderLine;
410
+ [SymbolKeyEntityMeta]: EntityOrderLineMeta;
411
+ [SymbolKeyModelOptions]: IModelOptionsOrderLine;
412
+ get<T extends IModelGetOptions<EntityOrderLine,ModelOrderLine>>(where: TypeModelWhere<EntityOrderLine>, options?: T): Promise<TypeModelRelationResult<EntityOrderLine, ModelOrderLine, T> | undefined>;
413
+ getForUpdate<T extends IModelGetOptions<EntityOrderLine,ModelOrderLine>>(where: TypeModelWhere<EntityOrderLine>, options?: T): Promise<TypeModelRelationResult<EntityOrderLine, ModelOrderLine, T> | undefined>;
414
+ getByIdForUpdate<T extends IModelGetOptions<EntityOrderLine,ModelOrderLine>>(id: TableIdentity, options?: T): Promise<TypeModelRelationResult<EntityOrderLine, ModelOrderLine, T> | undefined>;
415
+ mget<T extends IModelGetOptions<EntityOrderLine,ModelOrderLine>>(ids: TableIdentity[], options?: T): Promise<TypeModelRelationResult<EntityOrderLine, ModelOrderLine, T>[]>;
416
+ selectAndCount<T extends IModelSelectParams<EntityOrderLine,ModelOrderLine,ModelJoins>, ModelJoins extends TypeModelsClassLikeGeneral | undefined = undefined>(params?: T, options?: IModelMethodOptions, modelJoins?: ModelJoins): Promise<TypeModelSelectAndCount<EntityOrderLine, ModelOrderLine, T>>;
417
+ select<T extends IModelSelectParams<EntityOrderLine,ModelOrderLine,ModelJoins>, ModelJoins extends TypeModelsClassLikeGeneral | undefined = undefined>(params?: T, options?: IModelMethodOptions, modelJoins?: ModelJoins): Promise<TypeModelRelationResult<EntityOrderLine, ModelOrderLine, T>[]>;
418
+ insert<T extends IModelInsertOptions<EntityOrderLine,ModelOrderLine>>(data?: TypeModelMutateRelationData<EntityOrderLine,ModelOrderLine, T>, options?: T): Promise<TypeModelMutateRelationData<EntityOrderLine,ModelOrderLine, T, true>>;
419
+ insertBulk<T extends IModelInsertOptions<EntityOrderLine,ModelOrderLine>>(items: TypeModelMutateRelationData<EntityOrderLine,ModelOrderLine, T>[], options?: T): Promise<TypeModelMutateRelationData<EntityOrderLine,ModelOrderLine, T, true>[]>;
420
+ update<T extends IModelUpdateOptions<EntityOrderLine,ModelOrderLine>>(data: TypeModelMutateRelationData<EntityOrderLine,ModelOrderLine, T>, options?: T): Promise<TypeModelMutateRelationData<EntityOrderLine,ModelOrderLine, T>>;
421
+ updateBulk<T extends IModelUpdateOptions<EntityOrderLine,ModelOrderLine>>(items: TypeModelMutateRelationData<EntityOrderLine,ModelOrderLine, T>[], options?: T): Promise<TypeModelMutateRelationData<EntityOrderLine,ModelOrderLine, T>[]>;
422
+ delete<T extends IModelDeleteOptions<EntityOrderLine,ModelOrderLine>>(where?: TypeModelWhere<EntityOrderLine>, options?: T): Promise<void>;
423
+ deleteBulk<T extends IModelDeleteOptions<EntityOrderLine,ModelOrderLine>>(ids: TableIdentity[], options?: T): Promise<void>;
424
+ mutate<T extends IModelMutateOptions<EntityOrderLine,ModelOrderLine>>(data?: TypeModelMutateRelationData<EntityOrderLine,ModelOrderLine, T>, options?: T): Promise<TypeModelMutateRelationData<EntityOrderLine,ModelOrderLine, T>>;
425
+ mutateBulk<T extends IModelMutateOptions<EntityOrderLine,ModelOrderLine>>(items: TypeModelMutateRelationData<EntityOrderLine,ModelOrderLine, T>[], options?: T): Promise<TypeModelMutateRelationData<EntityOrderLine,ModelOrderLine, T>[]>;
426
+ count<T extends IModelSelectCountParams<EntityOrderLine,ModelOrderLine,ModelJoins>, ModelJoins extends TypeModelsClassLikeGeneral | undefined = undefined>(params?: T, options?: IModelMethodOptions, modelJoins?: ModelJoins): Promise<string | undefined>;
427
+ increment<T extends IModelIncrementParams<EntityOrderLine,ModelOrderLine,ModelJoins>, ModelJoins extends TypeModelsClassLikeGeneral | undefined = undefined>(params?: T, options?: IModelMethodOptions, modelJoins?: ModelJoins): Promise<number>;
428
+ decrement<T extends IModelIncrementParams<EntityOrderLine,ModelOrderLine,ModelJoins>, ModelJoins extends TypeModelsClassLikeGeneral | undefined = undefined>(params?: T, options?: IModelMethodOptions, modelJoins?: ModelJoins): Promise<number>;
429
+ aggregate<T extends IModelSelectAggrParams<EntityOrderLine,ModelOrderLine,ModelJoins>, ModelJoins extends TypeModelsClassLikeGeneral | undefined = undefined>(params?: T, options?: IModelMethodOptions, modelJoins?: ModelJoins): Promise<TypeModelAggrRelationResult<T>>;
430
+ group<T extends IModelSelectGroupParams<EntityOrderLine,ModelOrderLine,ModelJoins>, ModelJoins extends TypeModelsClassLikeGeneral | undefined = undefined>(params?: T, options?: IModelMethodOptions, modelJoins?: ModelJoins): Promise<TypeModelGroupRelationResult<EntityOrderLine, T>[]>;
431
+ getById<T extends IModelGetOptions<EntityOrderLine,ModelOrderLine>>(id: TableIdentity, options?: T): Promise<TypeModelRelationResult<EntityOrderLine, ModelOrderLine, T> | undefined>;
432
+ updateById<T extends IModelUpdateOptions<EntityOrderLine,ModelOrderLine>>(id: TableIdentity, data: TypeModelMutateRelationData<EntityOrderLine,ModelOrderLine, T>, options?: T): Promise<TypeModelMutateRelationData<EntityOrderLine,ModelOrderLine, T>>;
433
+ deleteById<T extends IModelDeleteOptions<EntityOrderLine,ModelOrderLine>>(id: TableIdentity, options?: T): Promise<void>;
434
+ }
262
435
  export interface ModelStockAudit {
263
436
  [SymbolKeyEntity]: EntityStockAudit;
264
437
  [SymbolKeyEntityMeta]: EntityStockAuditMeta;
@@ -345,14 +518,43 @@ declare module 'vona-module-a-orm' {
345
518
  export interface IModelClassRecord {
346
519
  'commerce-trade:cart': ModelCart;
347
520
  'commerce-trade:cartItem': ModelCartItem;
521
+ 'commerce-trade:order': ModelOrder;
522
+ 'commerce-trade:orderAudit': ModelOrderAudit;
523
+ 'commerce-trade:orderLine': ModelOrderLine;
348
524
  'commerce-trade:stockAudit': ModelStockAudit;
349
525
  'commerce-trade:stockBalance': ModelStockBalance;
350
526
  'commerce-trade:stockReservation': ModelStockReservation;
351
527
  }
352
528
  }
353
529
  /** model: end */
530
+ /** bean: begin */
531
+ export * from '../bean/bean.scheduleOrderExpiry.ts';
532
+
533
+ import 'vona';
534
+ declare module 'vona' {
535
+
536
+
537
+ }
538
+ declare module 'vona-module-commerce-trade' {
539
+
540
+ export interface BeanScheduleOrderExpiry {
541
+ /** @internal */
542
+ get scope(): ScopeModuleCommerceTrade;
543
+ }
544
+ }
545
+ /** bean: end */
546
+ /** bean: begin */
547
+ import type { BeanScheduleOrderExpiry } from '../bean/bean.scheduleOrderExpiry.ts';
548
+ import 'vona';
549
+ declare module 'vona' {
550
+ export interface IBeanRecordGlobal {
551
+ 'scheduleOrderExpiry': BeanScheduleOrderExpiry;
552
+ }
553
+ }
554
+ /** bean: end */
354
555
  /** service: begin */
355
556
  export * from '../service/cart.ts';
557
+ export * from '../service/order.ts';
356
558
  export * from '../service/stockAudit.ts';
357
559
  export * from '../service/stockBalance.ts';
358
560
 
@@ -361,6 +563,7 @@ declare module 'vona-module-a-bean' {
361
563
 
362
564
  export interface IServiceRecord {
363
565
  'commerce-trade:cart': never;
566
+ 'commerce-trade:order': never;
364
567
  'commerce-trade:stockAudit': never;
365
568
  'commerce-trade:stockBalance': never;
366
569
  }
@@ -380,6 +583,17 @@ declare module 'vona-module-commerce-trade' {
380
583
 
381
584
  }
382
585
 
586
+ export interface ServiceOrder {
587
+ /** @internal */
588
+ get scope(): ScopeModuleCommerceTrade;
589
+ }
590
+
591
+ export interface ServiceOrder {
592
+ get $beanFullName(): 'commerce-trade.service.order';
593
+ get $onionName(): 'commerce-trade:order';
594
+
595
+ }
596
+
383
597
  export interface ServiceStockAudit {
384
598
  /** @internal */
385
599
  get scope(): ScopeModuleCommerceTrade;
@@ -405,10 +619,12 @@ declare module 'vona-module-commerce-trade' {
405
619
  /** service: end */
406
620
  /** service: begin */
407
621
  import type { ServiceCart } from '../service/cart.ts';
622
+ import type { ServiceOrder } from '../service/order.ts';
408
623
  import type { ServiceStockAudit } from '../service/stockAudit.ts';
409
624
  import type { ServiceStockBalance } from '../service/stockBalance.ts';
410
625
  export interface IModuleService {
411
626
  'cart': ServiceCart;
627
+ 'order': ServiceOrder;
412
628
  'stockAudit': ServiceStockAudit;
413
629
  'stockBalance': ServiceStockBalance;
414
630
  }
@@ -419,6 +635,7 @@ import 'vona';
419
635
  declare module 'vona' {
420
636
  export interface IBeanRecordGeneral {
421
637
  'commerce-trade.service.cart': ServiceCart;
638
+ 'commerce-trade.service.order': ServiceOrder;
422
639
  'commerce-trade.service.stockAudit': ServiceStockAudit;
423
640
  'commerce-trade.service.stockBalance': ServiceStockBalance;
424
641
  }
@@ -468,6 +685,11 @@ export * from '../dto/cartAddItem.tsx';
468
685
  export * from '../dto/cartItem.tsx';
469
686
  export * from '../dto/cartUpdateItem.tsx';
470
687
  export * from '../dto/cartView.tsx';
688
+ export * from '../dto/checkoutCreate.tsx';
689
+ export * from '../dto/checkoutResult.tsx';
690
+ export * from '../dto/orderAddressSnapshot.tsx';
691
+ export * from '../dto/orderCouponSnapshot.tsx';
692
+ export * from '../dto/orderLineSkuAttributeSnapshot.tsx';
471
693
  export * from '../dto/stockAdjust.tsx';
472
694
  export * from '../dto/stockAuditCreate.tsx';
473
695
  export * from '../dto/stockAuditSelectReq.tsx';
@@ -485,6 +707,11 @@ import type { IDtoOptionsCartAddItem } from '../dto/cartAddItem.tsx';
485
707
  import type { IDtoOptionsCartItem } from '../dto/cartItem.tsx';
486
708
  import type { IDtoOptionsCartUpdateItem } from '../dto/cartUpdateItem.tsx';
487
709
  import type { IDtoOptionsCartView } from '../dto/cartView.tsx';
710
+ import type { IDtoOptionsCheckoutCreate } from '../dto/checkoutCreate.tsx';
711
+ import type { IDtoOptionsCheckoutResult } from '../dto/checkoutResult.tsx';
712
+ import type { IDtoOptionsOrderAddressSnapshot } from '../dto/orderAddressSnapshot.tsx';
713
+ import type { IDtoOptionsOrderCouponSnapshot } from '../dto/orderCouponSnapshot.tsx';
714
+ import type { IDtoOptionsOrderLineSkuAttributeSnapshot } from '../dto/orderLineSkuAttributeSnapshot.tsx';
488
715
  import type { IDtoOptionsStockAdjust } from '../dto/stockAdjust.tsx';
489
716
  import type { IDtoOptionsStockAuditCreate } from '../dto/stockAuditCreate.tsx';
490
717
  import type { IDtoOptionsStockAuditSelectReq } from '../dto/stockAuditSelectReq.tsx';
@@ -506,6 +733,11 @@ declare module 'vona-module-a-web' {
506
733
  'commerce-trade:cartItem': IDtoOptionsCartItem;
507
734
  'commerce-trade:cartUpdateItem': IDtoOptionsCartUpdateItem;
508
735
  'commerce-trade:cartView': IDtoOptionsCartView;
736
+ 'commerce-trade:checkoutCreate': IDtoOptionsCheckoutCreate;
737
+ 'commerce-trade:checkoutResult': IDtoOptionsCheckoutResult;
738
+ 'commerce-trade:orderAddressSnapshot': IDtoOptionsOrderAddressSnapshot;
739
+ 'commerce-trade:orderCouponSnapshot': IDtoOptionsOrderCouponSnapshot;
740
+ 'commerce-trade:orderLineSkuAttributeSnapshot': IDtoOptionsOrderLineSkuAttributeSnapshot;
509
741
  'commerce-trade:stockAdjust': IDtoOptionsStockAdjust;
510
742
  'commerce-trade:stockAuditCreate': IDtoOptionsStockAuditCreate;
511
743
  'commerce-trade:stockAuditSelectReq': IDtoOptionsStockAuditSelectReq;
@@ -532,6 +764,11 @@ import type { DtoCartAddItem } from '../dto/cartAddItem.tsx';
532
764
  import type { DtoCartItem } from '../dto/cartItem.tsx';
533
765
  import type { DtoCartUpdateItem } from '../dto/cartUpdateItem.tsx';
534
766
  import type { DtoCartView } from '../dto/cartView.tsx';
767
+ import type { DtoCheckoutCreate } from '../dto/checkoutCreate.tsx';
768
+ import type { DtoCheckoutResult } from '../dto/checkoutResult.tsx';
769
+ import type { DtoOrderAddressSnapshot } from '../dto/orderAddressSnapshot.tsx';
770
+ import type { DtoOrderCouponSnapshot } from '../dto/orderCouponSnapshot.tsx';
771
+ import type { DtoOrderLineSkuAttributeSnapshot } from '../dto/orderLineSkuAttributeSnapshot.tsx';
535
772
  import type { DtoStockAdjust } from '../dto/stockAdjust.tsx';
536
773
  import type { DtoStockAuditCreate } from '../dto/stockAuditCreate.tsx';
537
774
  import type { DtoStockAuditSelectReq } from '../dto/stockAuditSelectReq.tsx';
@@ -563,6 +800,26 @@ declare module 'vona-module-commerce-trade' {
563
800
  fields?: TypeEntityOptionsFields<DtoCartView, IDtoOptionsCartView[TypeSymbolKeyFieldsMore]>;
564
801
  }
565
802
 
803
+ export interface IDtoOptionsCheckoutCreate {
804
+ fields?: TypeEntityOptionsFields<DtoCheckoutCreate, IDtoOptionsCheckoutCreate[TypeSymbolKeyFieldsMore]>;
805
+ }
806
+
807
+ export interface IDtoOptionsCheckoutResult {
808
+ fields?: TypeEntityOptionsFields<DtoCheckoutResult, IDtoOptionsCheckoutResult[TypeSymbolKeyFieldsMore]>;
809
+ }
810
+
811
+ export interface IDtoOptionsOrderAddressSnapshot {
812
+ fields?: TypeEntityOptionsFields<DtoOrderAddressSnapshot, IDtoOptionsOrderAddressSnapshot[TypeSymbolKeyFieldsMore]>;
813
+ }
814
+
815
+ export interface IDtoOptionsOrderCouponSnapshot {
816
+ fields?: TypeEntityOptionsFields<DtoOrderCouponSnapshot, IDtoOptionsOrderCouponSnapshot[TypeSymbolKeyFieldsMore]>;
817
+ }
818
+
819
+ export interface IDtoOptionsOrderLineSkuAttributeSnapshot {
820
+ fields?: TypeEntityOptionsFields<DtoOrderLineSkuAttributeSnapshot, IDtoOptionsOrderLineSkuAttributeSnapshot[TypeSymbolKeyFieldsMore]>;
821
+ }
822
+
566
823
  export interface IDtoOptionsStockAdjust {
567
824
  fields?: TypeEntityOptionsFields<DtoStockAdjust, IDtoOptionsStockAdjust[TypeSymbolKeyFieldsMore]>;
568
825
  }
@@ -618,9 +875,11 @@ declare module 'vona-module-commerce-trade' {
618
875
  /** dto: end */
619
876
  /** controller: begin */
620
877
  export * from '../controller/cart.ts';
878
+ export * from '../controller/checkout.ts';
621
879
  export * from '../controller/stockAudit.ts';
622
880
  export * from '../controller/stockBalance.ts';
623
881
  import type { IControllerOptionsCart } from '../controller/cart.ts';
882
+ import type { IControllerOptionsCheckout } from '../controller/checkout.ts';
624
883
  import type { IControllerOptionsStockAudit } from '../controller/stockAudit.ts';
625
884
  import type { IControllerOptionsStockBalance } from '../controller/stockBalance.ts';
626
885
  import 'vona-module-a-web';
@@ -628,6 +887,7 @@ declare module 'vona-module-a-web' {
628
887
 
629
888
  export interface IControllerRecord {
630
889
  'commerce-trade:cart': IControllerOptionsCart;
890
+ 'commerce-trade:checkout': IControllerOptionsCheckout;
631
891
  'commerce-trade:stockAudit': IControllerOptionsStockAudit;
632
892
  'commerce-trade:stockBalance': IControllerOptionsStockBalance;
633
893
  }
@@ -647,6 +907,17 @@ declare module 'vona-module-commerce-trade' {
647
907
  get $onionOptions(): IControllerOptionsCart;
648
908
  }
649
909
 
910
+ export interface ControllerCheckout {
911
+ /** @internal */
912
+ get scope(): ScopeModuleCommerceTrade;
913
+ }
914
+
915
+ export interface ControllerCheckout {
916
+ get $beanFullName(): 'commerce-trade.controller.checkout';
917
+ get $onionName(): 'commerce-trade:checkout';
918
+ get $onionOptions(): IControllerOptionsCheckout;
919
+ }
920
+
650
921
  export interface ControllerStockAudit {
651
922
  /** @internal */
652
923
  get scope(): ScopeModuleCommerceTrade;
@@ -674,6 +945,8 @@ declare module 'vona-module-commerce-trade' {
674
945
  // @ts-ignore ignore
675
946
  import type { ControllerCart } from '../controller/cart.ts';
676
947
  // @ts-ignore ignore
948
+ import type { ControllerCheckout } from '../controller/checkout.ts';
949
+ // @ts-ignore ignore
677
950
  import type { ControllerStockAudit } from '../controller/stockAudit.ts';
678
951
  // @ts-ignore ignore
679
952
  import type { ControllerStockBalance } from '../controller/stockBalance.ts';
@@ -683,6 +956,10 @@ declare module 'vona-module-commerce-trade' {
683
956
  actions?: TypeControllerOptionsActions<ControllerCart>;
684
957
  }
685
958
 
959
+ export interface IControllerOptionsCheckout {
960
+ actions?: TypeControllerOptionsActions<ControllerCheckout>;
961
+ }
962
+
686
963
  export interface IControllerOptionsStockAudit {
687
964
  actions?: TypeControllerOptionsActions<ControllerStockAudit>;
688
965
  }
@@ -0,0 +1,26 @@
1
+ import type { IScheduleExecute } from 'vona-module-a-schedule';
2
+
3
+ import { BeanBase } from 'vona';
4
+ import { Schedule } from 'vona-module-a-schedule';
5
+
6
+ const ExpiryBatchLimit = 100;
7
+
8
+ @Schedule({ repeat: { every: 60 * 1000 } })
9
+ export class BeanScheduleOrderExpiry extends BeanBase implements IScheduleExecute {
10
+ async execute() {
11
+ const orders = await this.scope.model.order.select({
12
+ where: {
13
+ state: 'awaiting_payment',
14
+ reservationExpiresAt: { _lte_: new Date() },
15
+ },
16
+ orders: [
17
+ ['reservationExpiresAt', 'asc'],
18
+ ['id', 'asc'],
19
+ ],
20
+ limit: ExpiryBatchLimit,
21
+ });
22
+ for (const order of orders) {
23
+ await this.scope.service.order.expireIfDue(order.id);
24
+ }
25
+ }
26
+ }
@@ -9,6 +9,14 @@ import { $tableColumns } from 'vona-module-a-ormutils';
9
9
  ...$tableColumns('commerceTradeCart', 'userId'),
10
10
  ...$tableColumns('commerceTradeCartItem', 'cartId'),
11
11
  ...$tableColumns('commerceTradeCartItem', 'skuId'),
12
+ ...$tableColumns('commerceTradeOrder', 'userId'),
13
+ ...$tableColumns('commerceTradeOrder', 'correlationId'),
14
+ ...$tableColumns('commerceTradeOrder', 'state'),
15
+ ...$tableColumns('commerceTradeOrder', 'reservationExpiresAt'),
16
+ ...$tableColumns('commerceTradeOrderLine', 'orderId'),
17
+ ...$tableColumns('commerceTradeOrderAudit', 'orderId'),
18
+ ...$tableColumns('commerceTradeOrderAudit', 'correlationId'),
19
+ ...$tableColumns('commerceTradeOrderLine', 'skuId'),
12
20
  ...$tableColumns('commerceTradeStockAudit', 'stockBalanceId'),
13
21
  ...$tableColumns('commerceTradeStockAudit', 'skuId'),
14
22
  ...$tableColumns('commerceTradeStockAudit', 'stockReservationId'),
@@ -16,6 +24,7 @@ import { $tableColumns } from 'vona-module-a-ormutils';
16
24
  ...$tableColumns('commerceTradeStockBalance', 'skuId'),
17
25
  ...$tableColumns('commerceTradeStockReservation', 'stockBalanceId'),
18
26
  ...$tableColumns('commerceTradeStockReservation', 'skuId'),
27
+ ...$tableColumns('commerceTradeStockReservation', 'orderLineId'),
19
28
  ...$tableColumns('commerceTradeStockReservation', 'correlationId'),
20
29
  ...$tableColumns('commerceTradeStockReservation', 'state'),
21
30
  },
@@ -28,6 +28,10 @@ export class MetaVersion extends BeanBase implements IMetaVersionUpdate {
28
28
  table
29
29
  .tableIdentity(entityStockReservation.skuId)
30
30
  .comment(entityStockReservation.$comment.skuId);
31
+ table
32
+ .tableIdentity(entityStockReservation.orderLineId)
33
+ .nullable()
34
+ .comment(entityStockReservation.$comment.orderLineId);
31
35
  table
32
36
  .integer(entityStockReservation.quantity)
33
37
  .comment(entityStockReservation.$comment.quantity);
@@ -79,5 +83,76 @@ export class MetaVersion extends BeanBase implements IMetaVersionUpdate {
79
83
  table.tableIdentity(entityCartItem.skuId).comment(entityCartItem.$comment.skuId);
80
84
  table.integer(entityCartItem.quantity).comment(entityCartItem.$comment.quantity);
81
85
  });
86
+
87
+ const entityOrder = this.scope.entity.order;
88
+ await this.bean.model.createTable(entityOrder.$table, table => {
89
+ table.comment(entityOrder.$comment.$table);
90
+ table.basicFields();
91
+ table.userId(entityOrder.userId).comment(entityOrder.$comment.userId);
92
+ table.tableIdentity(entityOrder.addressId).comment(entityOrder.$comment.addressId);
93
+ table.string(entityOrder.correlationId, 80).comment(entityOrder.$comment.correlationId);
94
+ table.json(entityOrder.addressSnapshot).comment(entityOrder.$comment.addressSnapshot);
95
+ table
96
+ .json(entityOrder.couponSnapshot)
97
+ .nullable()
98
+ .comment(entityOrder.$comment.couponSnapshot);
99
+ table.string(entityOrder.state, 30).comment(entityOrder.$comment.state);
100
+ table.string(entityOrder.currency, 3).comment(entityOrder.$comment.currency);
101
+ table
102
+ .integer(entityOrder.eligibleSubtotalCents)
103
+ .comment(entityOrder.$comment.eligibleSubtotalCents);
104
+ table.integer(entityOrder.discountCents).comment(entityOrder.$comment.discountCents);
105
+ table.integer(entityOrder.payableTotalCents).comment(entityOrder.$comment.payableTotalCents);
106
+ table
107
+ .dateTime(entityOrder.reservationExpiresAt)
108
+ .comment(entityOrder.$comment.reservationExpiresAt);
109
+ });
110
+
111
+ const entityOrderLine = this.scope.entity.orderLine;
112
+ await this.bean.model.createTable(entityOrderLine.$table, table => {
113
+ table.comment(entityOrderLine.$comment.$table);
114
+ table.basicFields();
115
+ table.tableIdentity(entityOrderLine.orderId).comment(entityOrderLine.$comment.orderId);
116
+ table.tableIdentity(entityOrderLine.skuId).comment(entityOrderLine.$comment.skuId);
117
+ table.tableIdentity(entityOrderLine.productId).comment(entityOrderLine.$comment.productId);
118
+ table
119
+ .string(entityOrderLine.skuCodeSnapshot, 100)
120
+ .comment(entityOrderLine.$comment.skuCodeSnapshot);
121
+ table
122
+ .string(entityOrderLine.titleSnapshot, 100)
123
+ .comment(entityOrderLine.$comment.titleSnapshot);
124
+ table
125
+ .json(entityOrderLine.skuAttributesSnapshot)
126
+ .comment(entityOrderLine.$comment.skuAttributesSnapshot);
127
+ table
128
+ .integer(entityOrderLine.unitPriceCents)
129
+ .comment(entityOrderLine.$comment.unitPriceCents);
130
+ table.integer(entityOrderLine.quantity).comment(entityOrderLine.$comment.quantity);
131
+ table
132
+ .integer(entityOrderLine.eligibleSubtotalCents)
133
+ .comment(entityOrderLine.$comment.eligibleSubtotalCents);
134
+ table
135
+ .integer(entityOrderLine.lineTotalCents)
136
+ .comment(entityOrderLine.$comment.lineTotalCents);
137
+ });
138
+
139
+ // This v1 schema is intentionally rebuild-only while Commerce is pre-deployment.
140
+ const entityOrderAudit = this.scope.entity.orderAudit;
141
+ await this.bean.model.createTable(entityOrderAudit.$table, table => {
142
+ table.comment(entityOrderAudit.$comment.$table);
143
+ table.basicFields();
144
+ table.tableIdentity(entityOrderAudit.orderId).comment(entityOrderAudit.$comment.orderId);
145
+ table.string(entityOrderAudit.operation, 20).comment(entityOrderAudit.$comment.operation);
146
+ table
147
+ .string(entityOrderAudit.fromState, 30)
148
+ .nullable()
149
+ .comment(entityOrderAudit.$comment.fromState);
150
+ table.string(entityOrderAudit.toState, 30).comment(entityOrderAudit.$comment.toState);
151
+ table.userId(entityOrderAudit.actorId).nullable().comment(entityOrderAudit.$comment.actorId);
152
+ table
153
+ .string(entityOrderAudit.correlationId, 100)
154
+ .comment(entityOrderAudit.$comment.correlationId);
155
+ table.string(entityOrderAudit.reason, 255).comment(entityOrderAudit.$comment.reason);
156
+ });
82
157
  }
83
158
  }