@labdigital/commercetools-mock 2.17.1 → 2.18.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (180) hide show
  1. package/dist/index.cjs +4351 -4099
  2. package/dist/index.cjs.map +1 -1
  3. package/dist/index.d.cts +266 -413
  4. package/dist/index.d.ts +266 -413
  5. package/dist/index.js +4351 -4099
  6. package/dist/index.js.map +1 -1
  7. package/package.json +47 -47
  8. package/src/constants.ts +2 -2
  9. package/src/ctMock.test.ts +11 -11
  10. package/src/ctMock.ts +141 -127
  11. package/src/deprecation.ts +8 -0
  12. package/src/exceptions.ts +17 -15
  13. package/src/helpers.ts +32 -32
  14. package/src/index.test.ts +128 -128
  15. package/src/index.ts +3 -3
  16. package/src/lib/expandParser.ts +13 -13
  17. package/src/lib/haversine.test.ts +9 -9
  18. package/src/lib/haversine.ts +11 -11
  19. package/src/lib/masking.ts +11 -11
  20. package/src/lib/parser.ts +2 -2
  21. package/src/lib/password.ts +23 -3
  22. package/src/lib/predicateParser.test.ts +185 -183
  23. package/src/lib/predicateParser.ts +234 -234
  24. package/src/lib/projectionSearchFilter.test.ts +103 -101
  25. package/src/lib/projectionSearchFilter.ts +152 -150
  26. package/src/lib/proxy.ts +5 -5
  27. package/src/oauth/errors.ts +4 -4
  28. package/src/oauth/helpers.ts +6 -6
  29. package/src/oauth/server.test.ts +86 -86
  30. package/src/oauth/server.ts +158 -144
  31. package/src/oauth/store.ts +44 -43
  32. package/src/priceSelector.test.ts +35 -35
  33. package/src/priceSelector.ts +30 -30
  34. package/src/product-projection-search.ts +136 -134
  35. package/src/projectAPI.test.ts +7 -7
  36. package/src/projectAPI.ts +24 -22
  37. package/src/repositories/abstract.ts +168 -116
  38. package/src/repositories/associate-role.ts +90 -77
  39. package/src/repositories/attribute-group.ts +51 -40
  40. package/src/repositories/business-unit.ts +168 -148
  41. package/src/repositories/cart/actions.ts +489 -0
  42. package/src/repositories/cart/helpers.ts +30 -0
  43. package/src/repositories/cart/index.ts +180 -0
  44. package/src/repositories/cart-discount/actions.ts +148 -0
  45. package/src/repositories/cart-discount/index.ts +86 -0
  46. package/src/repositories/category/actions.ts +231 -0
  47. package/src/repositories/category/index.ts +52 -0
  48. package/src/repositories/channel.ts +88 -90
  49. package/src/repositories/custom-object.ts +46 -45
  50. package/src/repositories/customer/actions.ts +165 -0
  51. package/src/repositories/customer/index.ts +79 -0
  52. package/src/repositories/customer-group.ts +66 -55
  53. package/src/repositories/discount-code/actions.ts +149 -0
  54. package/src/repositories/discount-code/index.ts +50 -0
  55. package/src/repositories/errors.ts +10 -10
  56. package/src/repositories/extension.ts +64 -62
  57. package/src/repositories/helpers.ts +117 -118
  58. package/src/repositories/index.ts +80 -79
  59. package/src/repositories/inventory-entry/actions.ts +84 -0
  60. package/src/repositories/inventory-entry/index.ts +44 -0
  61. package/src/repositories/my-customer.ts +114 -0
  62. package/src/repositories/my-order.ts +8 -8
  63. package/src/repositories/order/actions.ts +281 -0
  64. package/src/repositories/{order.test.ts → order/index.test.ts} +77 -77
  65. package/src/repositories/order/index.ts +260 -0
  66. package/src/repositories/order-edit.ts +10 -23
  67. package/src/repositories/payment/actions.ts +305 -0
  68. package/src/repositories/payment/helpers.ts +17 -0
  69. package/src/repositories/payment/index.ts +56 -0
  70. package/src/repositories/product/actions.ts +943 -0
  71. package/src/repositories/product/helpers.ts +98 -0
  72. package/src/repositories/product/index.ts +130 -0
  73. package/src/repositories/product-discount.ts +127 -117
  74. package/src/repositories/product-projection.ts +56 -62
  75. package/src/repositories/product-selection.ts +31 -28
  76. package/src/repositories/product-type.ts +136 -134
  77. package/src/repositories/project.ts +133 -118
  78. package/src/repositories/quote-request.ts +7 -19
  79. package/src/repositories/quote.ts +7 -22
  80. package/src/repositories/review.ts +13 -26
  81. package/src/repositories/shipping-method/actions.ts +198 -0
  82. package/src/repositories/shipping-method/helpers.ts +10 -0
  83. package/src/repositories/shipping-method/index.ts +138 -0
  84. package/src/repositories/shopping-list/actions.ts +295 -0
  85. package/src/repositories/shopping-list/index.ts +122 -0
  86. package/src/repositories/staged-quote.ts +7 -20
  87. package/src/repositories/standalone-price.ts +57 -44
  88. package/src/repositories/state.ts +113 -68
  89. package/src/repositories/store.ts +106 -94
  90. package/src/repositories/subscription.ts +46 -22
  91. package/src/repositories/tax-category/actions.ts +94 -0
  92. package/src/repositories/tax-category/helpers.ts +8 -0
  93. package/src/repositories/tax-category/index.ts +25 -0
  94. package/src/repositories/type/actions.ts +162 -0
  95. package/src/repositories/type/index.ts +24 -0
  96. package/src/repositories/zone.ts +62 -58
  97. package/src/schemas/update-request.ts +12 -0
  98. package/src/server.ts +9 -9
  99. package/src/services/abstract.ts +85 -72
  100. package/src/services/associate-roles.test.ts +27 -27
  101. package/src/services/associate-roles.ts +7 -7
  102. package/src/services/attribute-group.ts +7 -7
  103. package/src/services/business-units.test.ts +28 -28
  104. package/src/services/business-units.ts +7 -7
  105. package/src/services/cart-discount.test.ts +199 -199
  106. package/src/services/cart-discount.ts +7 -7
  107. package/src/services/cart.test.ts +261 -261
  108. package/src/services/cart.ts +22 -21
  109. package/src/services/category.test.ts +121 -121
  110. package/src/services/category.ts +7 -7
  111. package/src/services/channel.ts +7 -7
  112. package/src/services/custom-object.test.ts +130 -130
  113. package/src/services/custom-object.ts +34 -31
  114. package/src/services/customer-group.ts +7 -7
  115. package/src/services/customer.test.ts +205 -205
  116. package/src/services/customer.ts +23 -36
  117. package/src/services/discount-code.ts +7 -7
  118. package/src/services/extension.ts +7 -7
  119. package/src/services/index.ts +85 -81
  120. package/src/services/inventory-entry.test.ts +106 -106
  121. package/src/services/inventory-entry.ts +7 -7
  122. package/src/services/my-cart.test.ts +56 -56
  123. package/src/services/my-cart.ts +20 -20
  124. package/src/services/my-customer.test.ts +155 -104
  125. package/src/services/my-customer.ts +66 -75
  126. package/src/services/my-order.ts +16 -16
  127. package/src/services/my-payment.test.ts +40 -40
  128. package/src/services/my-payment.ts +7 -7
  129. package/src/services/my-shopping-list.ts +7 -7
  130. package/src/services/order.test.ts +243 -243
  131. package/src/services/order.ts +23 -18
  132. package/src/services/payment.test.ts +40 -40
  133. package/src/services/payment.ts +7 -7
  134. package/src/services/product-discount.ts +7 -7
  135. package/src/services/product-projection.test.ts +190 -190
  136. package/src/services/product-projection.ts +34 -32
  137. package/src/services/product-selection.test.ts +19 -19
  138. package/src/services/product-selection.ts +7 -7
  139. package/src/services/product-type.test.ts +38 -38
  140. package/src/services/product-type.ts +7 -7
  141. package/src/services/product.test.ts +658 -656
  142. package/src/services/product.ts +7 -7
  143. package/src/services/project.test.ts +29 -24
  144. package/src/services/project.ts +22 -17
  145. package/src/services/reviews.ts +7 -7
  146. package/src/services/shipping-method.test.ts +78 -78
  147. package/src/services/shipping-method.ts +16 -16
  148. package/src/services/shopping-list.test.ts +170 -170
  149. package/src/services/shopping-list.ts +7 -7
  150. package/src/services/standalone-price.test.ts +112 -112
  151. package/src/services/standalone-price.ts +7 -7
  152. package/src/services/state.test.ts +30 -30
  153. package/src/services/state.ts +7 -7
  154. package/src/services/store.test.ts +40 -40
  155. package/src/services/store.ts +7 -7
  156. package/src/services/subscription.ts +7 -7
  157. package/src/services/tax-category.test.ts +43 -43
  158. package/src/services/tax-category.ts +7 -7
  159. package/src/services/type.ts +7 -7
  160. package/src/services/zone.ts +7 -7
  161. package/src/shippingCalculator.test.ts +43 -43
  162. package/src/shippingCalculator.ts +23 -23
  163. package/src/storage/abstract.ts +36 -34
  164. package/src/storage/in-memory.ts +237 -233
  165. package/src/storage/index.ts +2 -2
  166. package/src/types.ts +91 -91
  167. package/src/validate.ts +18 -0
  168. package/src/repositories/cart-discount.ts +0 -219
  169. package/src/repositories/cart.ts +0 -659
  170. package/src/repositories/category.ts +0 -256
  171. package/src/repositories/customer.ts +0 -228
  172. package/src/repositories/discount-code.ts +0 -181
  173. package/src/repositories/inventory-entry.ts +0 -109
  174. package/src/repositories/order.ts +0 -514
  175. package/src/repositories/payment.ts +0 -342
  176. package/src/repositories/product.ts +0 -1106
  177. package/src/repositories/shipping-method.ts +0 -312
  178. package/src/repositories/shopping-list.ts +0 -392
  179. package/src/repositories/tax-category.ts +0 -111
  180. package/src/repositories/type.ts +0 -172
@@ -1,145 +1,145 @@
1
- import type { Cart, OrderImportDraft } from '@commercetools/platform-sdk'
2
- import { describe, expect, test } from 'vitest'
3
- import { InMemoryStorage } from '../storage/index.js'
4
- import { OrderRepository } from './order.js'
1
+ import type { Cart, OrderImportDraft } from "@commercetools/platform-sdk";
2
+ import { describe, expect, test } from "vitest";
3
+ import { InMemoryStorage } from "~src/storage";
4
+ import { OrderRepository } from "./index";
5
5
 
6
- describe('Order repository', () => {
7
- const storage = new InMemoryStorage()
8
- const repository = new OrderRepository(storage)
6
+ describe("Order repository", () => {
7
+ const storage = new InMemoryStorage();
8
+ const repository = new OrderRepository(storage);
9
9
 
10
- test('create from cart', async () => {
10
+ test("create from cart", async () => {
11
11
  const cart: Cart = {
12
- id: 'b3875a58-4ab2-4aaa-b399-184ce7561c27',
12
+ id: "b3875a58-4ab2-4aaa-b399-184ce7561c27",
13
13
  version: 1,
14
- createdAt: '2021-09-02T12:23:30.036Z',
15
- lastModifiedAt: '2021-09-02T12:23:30.546Z',
14
+ createdAt: "2021-09-02T12:23:30.036Z",
15
+ lastModifiedAt: "2021-09-02T12:23:30.546Z",
16
16
  discountCodes: [],
17
17
  directDiscounts: [],
18
- inventoryMode: 'None',
18
+ inventoryMode: "None",
19
19
  itemShippingAddresses: [],
20
20
  lineItems: [],
21
21
  customLineItems: [],
22
22
  totalPrice: {
23
- type: 'centPrecision',
24
- currencyCode: 'EUR',
23
+ type: "centPrecision",
24
+ currencyCode: "EUR",
25
25
  centAmount: 10000,
26
26
  fractionDigits: 2,
27
27
  },
28
- cartState: 'Active',
29
- shippingMode: 'Single',
28
+ cartState: "Active",
29
+ shippingMode: "Single",
30
30
  shipping: [],
31
- taxMode: 'Platform',
32
- taxRoundingMode: 'HalfEven',
33
- taxCalculationMode: 'UnitPriceLevel',
31
+ taxMode: "Platform",
32
+ taxRoundingMode: "HalfEven",
33
+ taxCalculationMode: "UnitPriceLevel",
34
34
  refusedGifts: [],
35
- origin: 'Customer',
36
- }
35
+ origin: "Customer",
36
+ };
37
37
 
38
- storage.add('dummy', 'cart', cart)
39
- const ctx = { projectKey: 'dummy' }
38
+ storage.add("dummy", "cart", cart);
39
+ const ctx = { projectKey: "dummy" };
40
40
 
41
41
  const result = repository.create(ctx, {
42
42
  cart: {
43
43
  id: cart.id,
44
- typeId: 'cart',
44
+ typeId: "cart",
45
45
  },
46
46
  version: cart.version,
47
- })
48
- expect(result.cart?.id).toBe(cart.id)
47
+ });
48
+ expect(result.cart?.id).toBe(cart.id);
49
49
 
50
- const items = repository.query(ctx)
51
- expect(items.count).toBe(1)
52
- })
50
+ const items = repository.query(ctx);
51
+ expect(items.count).toBe(1);
52
+ });
53
53
 
54
- test('create from cart - in store', async () => {
54
+ test("create from cart - in store", async () => {
55
55
  const cart: Cart = {
56
- id: 'b3875a58-4ab2-4aaa-b399-184ce7561c27',
56
+ id: "b3875a58-4ab2-4aaa-b399-184ce7561c27",
57
57
  version: 1,
58
- createdAt: '2021-09-02T12:23:30.036Z',
59
- lastModifiedAt: '2021-09-02T12:23:30.546Z',
58
+ createdAt: "2021-09-02T12:23:30.036Z",
59
+ lastModifiedAt: "2021-09-02T12:23:30.546Z",
60
60
  discountCodes: [],
61
61
  directDiscounts: [],
62
- inventoryMode: 'None',
62
+ inventoryMode: "None",
63
63
  itemShippingAddresses: [],
64
64
  lineItems: [],
65
65
  customLineItems: [],
66
66
  totalPrice: {
67
- type: 'centPrecision',
68
- currencyCode: 'EUR',
67
+ type: "centPrecision",
68
+ currencyCode: "EUR",
69
69
  centAmount: 10000,
70
70
  fractionDigits: 2,
71
71
  },
72
- cartState: 'Active',
73
- shippingMode: 'Single',
72
+ cartState: "Active",
73
+ shippingMode: "Single",
74
74
  shipping: [],
75
- taxMode: 'Platform',
76
- taxRoundingMode: 'HalfEven',
77
- taxCalculationMode: 'UnitPriceLevel',
75
+ taxMode: "Platform",
76
+ taxRoundingMode: "HalfEven",
77
+ taxCalculationMode: "UnitPriceLevel",
78
78
  refusedGifts: [],
79
- origin: 'Customer',
80
- }
79
+ origin: "Customer",
80
+ };
81
81
 
82
- storage.add('dummy', 'cart', cart)
82
+ storage.add("dummy", "cart", cart);
83
83
 
84
84
  const result = repository.create(
85
- { projectKey: 'dummy', storeKey: 'some-store' },
85
+ { projectKey: "dummy", storeKey: "some-store" },
86
86
  {
87
87
  cart: {
88
88
  id: cart.id,
89
- typeId: 'cart',
89
+ typeId: "cart",
90
90
  },
91
91
  version: cart.version,
92
- }
93
- )
94
- expect(result.cart?.id).toBe(cart.id)
95
- expect(result.store?.key).toBe('some-store')
96
- })
92
+ },
93
+ );
94
+ expect(result.cart?.id).toBe(cart.id);
95
+ expect(result.store?.key).toBe("some-store");
96
+ });
97
97
 
98
- test('import exiting product', async () => {
99
- storage.add('dummy', 'product', {
100
- id: '15fc56ba-a74e-4cf8-b4b0-bada5c101541',
98
+ test("import exiting product", async () => {
99
+ storage.add("dummy", "product", {
100
+ id: "15fc56ba-a74e-4cf8-b4b0-bada5c101541",
101
101
  // @ts-ignore
102
102
  masterData: {
103
103
  // @ts-ignore
104
104
  current: {
105
- name: { 'nl-NL': 'Dummy' },
106
- slug: { 'nl-NL': 'Dummy' },
105
+ name: { "nl-NL": "Dummy" },
106
+ slug: { "nl-NL": "Dummy" },
107
107
  categories: [],
108
108
  masterVariant: {
109
109
  id: 0,
110
- sku: 'MYSKU',
110
+ sku: "MYSKU",
111
111
  },
112
112
  variants: [],
113
113
  },
114
114
  },
115
- })
115
+ });
116
116
 
117
117
  const draft: OrderImportDraft = {
118
- orderNumber: '100000001',
118
+ orderNumber: "100000001",
119
119
  totalPrice: {
120
120
  centAmount: 1000,
121
- currencyCode: 'EUR',
121
+ currencyCode: "EUR",
122
122
  },
123
- paymentState: 'Paid',
123
+ paymentState: "Paid",
124
124
  customLineItems: [],
125
125
  lineItems: [
126
126
  {
127
- productId: 'PRODUCTID',
127
+ productId: "PRODUCTID",
128
128
  name: {
129
- 'en-US': 'The product',
129
+ "en-US": "The product",
130
130
  },
131
131
  variant: {
132
132
  id: 1,
133
- sku: 'MYSKU',
133
+ sku: "MYSKU",
134
134
  prices: [
135
135
  {
136
136
  value: {
137
- type: 'centPrecision',
138
- currencyCode: 'EUR',
137
+ type: "centPrecision",
138
+ currencyCode: "EUR",
139
139
  centAmount: 14900,
140
140
  fractionDigits: 2,
141
141
  },
142
- country: 'NL',
142
+ country: "NL",
143
143
  // channel: {
144
144
  // typeId: 'channel',
145
145
  // id: '411485eb-7875-46f4-8d40-1db9e61374ed',
@@ -158,12 +158,12 @@ describe('Order repository', () => {
158
158
  },
159
159
  price: {
160
160
  value: {
161
- type: 'centPrecision',
162
- currencyCode: 'EUR',
161
+ type: "centPrecision",
162
+ currencyCode: "EUR",
163
163
  centAmount: 14900,
164
164
  fractionDigits: 2,
165
165
  },
166
- country: 'NL',
166
+ country: "NL",
167
167
  // channel: {
168
168
  // typeId: 'channel',
169
169
  // id: '411485eb-7875-46f4-8d40-1db9e61374ed',
@@ -182,11 +182,11 @@ describe('Order repository', () => {
182
182
  // id: '411485eb-7875-46f4-8d40-1db9e61374ed',
183
183
  // },
184
184
  taxRate: {
185
- name: '21% BTW',
185
+ name: "21% BTW",
186
186
  amount: 0.21,
187
187
  includedInPrice: true,
188
- country: 'NL',
189
- id: 'Z0wLUuYw',
188
+ country: "NL",
189
+ id: "Z0wLUuYw",
190
190
  subRates: [],
191
191
  },
192
192
  // state: [
@@ -200,10 +200,10 @@ describe('Order repository', () => {
200
200
  // ],
201
201
  },
202
202
  ],
203
- }
203
+ };
204
204
 
205
- repository.import({ projectKey: 'dummy' }, draft)
206
- })
205
+ repository.import({ projectKey: "dummy" }, draft);
206
+ });
207
207
  /*
208
208
  test('import non exiting product', async () => {
209
209
  const draft: OrderImportDraft = {
@@ -334,4 +334,4 @@ describe('Order repository', () => {
334
334
  repository.import('dummy', draft)
335
335
  })
336
336
  */
337
- })
337
+ });
@@ -0,0 +1,260 @@
1
+ import type {
2
+ Cart,
3
+ CartReference,
4
+ CustomLineItem,
5
+ CustomLineItemImportDraft,
6
+ GeneralError,
7
+ LineItem,
8
+ LineItemImportDraft,
9
+ Order,
10
+ OrderFromCartDraft,
11
+ OrderImportDraft,
12
+ Product,
13
+ ProductPagedQueryResponse,
14
+ ProductVariant,
15
+ } from "@commercetools/platform-sdk";
16
+ import assert from "assert";
17
+ import { CommercetoolsError } from "~src/exceptions";
18
+ import { getBaseResourceProperties } from "~src/helpers";
19
+ import { AbstractStorage } from "~src/storage/abstract";
20
+ import {
21
+ AbstractResourceRepository,
22
+ RepositoryContext,
23
+ type QueryParams,
24
+ } from "../abstract";
25
+ import {
26
+ createAddress,
27
+ createCentPrecisionMoney,
28
+ createCustomFields,
29
+ createPrice,
30
+ createTypedMoney,
31
+ resolveStoreReference,
32
+ } from "../helpers";
33
+ import { OrderUpdateHandler } from "./actions";
34
+
35
+ export class OrderRepository extends AbstractResourceRepository<"order"> {
36
+ constructor(storage: AbstractStorage) {
37
+ super("order", storage);
38
+ this.actions = new OrderUpdateHandler(storage);
39
+ }
40
+
41
+ create(context: RepositoryContext, draft: OrderFromCartDraft): Order {
42
+ assert(draft.cart, "draft.cart is missing");
43
+ return this.createFromCart(
44
+ context,
45
+ {
46
+ id: draft.cart.id!,
47
+ typeId: "cart",
48
+ },
49
+ draft.orderNumber,
50
+ );
51
+ }
52
+
53
+ createFromCart(
54
+ context: RepositoryContext,
55
+ cartReference: CartReference,
56
+ orderNumber?: string,
57
+ ) {
58
+ const cart = this._storage.getByResourceIdentifier(
59
+ context.projectKey,
60
+ cartReference,
61
+ ) as Cart | null;
62
+ if (!cart) {
63
+ throw new Error("Cannot find cart");
64
+ }
65
+
66
+ const resource: Order = {
67
+ ...getBaseResourceProperties(),
68
+ orderNumber,
69
+ cart: cartReference,
70
+ orderState: "Open",
71
+ lineItems: [],
72
+ customLineItems: [],
73
+ totalPrice: cart.totalPrice,
74
+ refusedGifts: [],
75
+ origin: "Customer",
76
+ syncInfo: [],
77
+ shippingMode: cart.shippingMode,
78
+ shipping: cart.shipping,
79
+ store: context.storeKey
80
+ ? {
81
+ key: context.storeKey,
82
+ typeId: "store",
83
+ }
84
+ : undefined,
85
+ lastMessageSequenceNumber: 0,
86
+ };
87
+ return this.saveNew(context, resource);
88
+ }
89
+
90
+ import(context: RepositoryContext, draft: OrderImportDraft): Order {
91
+ // TODO: Check if order with given orderNumber already exists
92
+ assert(this, "OrderRepository not valid");
93
+ const resource: Order = {
94
+ ...getBaseResourceProperties(),
95
+
96
+ billingAddress: createAddress(
97
+ draft.billingAddress,
98
+ context.projectKey,
99
+ this._storage,
100
+ ),
101
+ shippingAddress: createAddress(
102
+ draft.shippingAddress,
103
+ context.projectKey,
104
+ this._storage,
105
+ ),
106
+
107
+ custom: createCustomFields(
108
+ draft.custom,
109
+ context.projectKey,
110
+ this._storage,
111
+ ),
112
+ customerEmail: draft.customerEmail,
113
+ lastMessageSequenceNumber: 0,
114
+ orderNumber: draft.orderNumber,
115
+ orderState: draft.orderState || "Open",
116
+ origin: draft.origin || "Customer",
117
+ paymentState: draft.paymentState,
118
+ refusedGifts: [],
119
+ shippingMode: "Single",
120
+ shipping: [],
121
+
122
+ store: resolveStoreReference(
123
+ draft.store,
124
+ context.projectKey,
125
+ this._storage,
126
+ ),
127
+ syncInfo: [],
128
+
129
+ lineItems:
130
+ draft.lineItems?.map((item) =>
131
+ this.lineItemFromImportDraft.bind(this)(context, item),
132
+ ) || [],
133
+ customLineItems:
134
+ draft.customLineItems?.map((item) =>
135
+ this.customLineItemFromImportDraft.bind(this)(context, item),
136
+ ) || [],
137
+
138
+ totalPrice: createCentPrecisionMoney(draft.totalPrice),
139
+ };
140
+ return this.saveNew(context, resource);
141
+ }
142
+
143
+ private lineItemFromImportDraft(
144
+ context: RepositoryContext,
145
+ draft: LineItemImportDraft,
146
+ ): LineItem {
147
+ let product: Product;
148
+ let variant: ProductVariant | undefined;
149
+
150
+ if (draft.variant.sku) {
151
+ variant = {
152
+ id: 0,
153
+ sku: draft.variant.sku,
154
+ };
155
+
156
+ const items = this._storage.query(context.projectKey, "product", {
157
+ where: [
158
+ `masterData(current(masterVariant(sku="${draft.variant.sku}"))) or masterData(current(variants(sku="${draft.variant.sku}")))`,
159
+ ],
160
+ }) as ProductPagedQueryResponse;
161
+
162
+ if (items.count !== 1) {
163
+ throw new CommercetoolsError<GeneralError>({
164
+ code: "General",
165
+ message: `A product containing a variant with SKU '${draft.variant.sku}' not found.`,
166
+ });
167
+ }
168
+
169
+ product = items.results[0];
170
+ if (product.masterData.current.masterVariant.sku === draft.variant.sku) {
171
+ variant = product.masterData.current.masterVariant;
172
+ } else {
173
+ variant = product.masterData.current.variants.find(
174
+ (v) => v.sku === draft.variant.sku,
175
+ );
176
+ }
177
+ if (!variant) {
178
+ throw new Error("Internal state error");
179
+ }
180
+ } else {
181
+ throw new Error("No product found");
182
+ }
183
+
184
+ const lineItem: LineItem = {
185
+ ...getBaseResourceProperties(),
186
+ custom: createCustomFields(
187
+ draft.custom,
188
+ context.projectKey,
189
+ this._storage,
190
+ ),
191
+ discountedPricePerQuantity: [],
192
+ lineItemMode: "Standard",
193
+ name: draft.name,
194
+ price: createPrice(draft.price),
195
+ priceMode: "Platform",
196
+ productId: product.id,
197
+ productType: product.productType,
198
+ quantity: draft.quantity,
199
+ state: draft.state || [],
200
+ taxRate: draft.taxRate,
201
+ taxedPricePortions: [],
202
+ perMethodTaxRate: [],
203
+ totalPrice: createCentPrecisionMoney(draft.price.value),
204
+ variant: {
205
+ id: variant.id,
206
+ sku: variant.sku,
207
+ price: createPrice(draft.price),
208
+ },
209
+ };
210
+
211
+ return lineItem;
212
+ }
213
+
214
+ private customLineItemFromImportDraft(
215
+ context: RepositoryContext,
216
+ draft: CustomLineItemImportDraft,
217
+ ): CustomLineItem {
218
+ const lineItem: CustomLineItem = {
219
+ ...getBaseResourceProperties(),
220
+ custom: createCustomFields(
221
+ draft.custom,
222
+ context.projectKey,
223
+ this._storage,
224
+ ),
225
+ discountedPricePerQuantity: [],
226
+ money: createTypedMoney(draft.money),
227
+ name: draft.name,
228
+ quantity: draft.quantity ?? 0,
229
+ perMethodTaxRate: [],
230
+ priceMode: draft.priceMode ?? "Standard",
231
+ slug: draft.slug,
232
+ state: [],
233
+ totalPrice: createCentPrecisionMoney(draft.money),
234
+ taxedPricePortions: [],
235
+ };
236
+
237
+ return lineItem;
238
+ }
239
+
240
+ getWithOrderNumber(
241
+ context: RepositoryContext,
242
+ orderNumber: string,
243
+ params: QueryParams = {},
244
+ ): Order | undefined {
245
+ const result = this._storage.query(context.projectKey, this.getTypeId(), {
246
+ ...params,
247
+ where: [`orderNumber="${orderNumber}"`],
248
+ });
249
+ if (result.count === 1) {
250
+ return result.results[0] as Order;
251
+ }
252
+
253
+ // Catch this for now, should be checked when creating/updating
254
+ if (result.count > 1) {
255
+ throw new Error("Duplicate order numbers");
256
+ }
257
+
258
+ return;
259
+ }
260
+ }
@@ -2,15 +2,14 @@ import type {
2
2
  OrderEdit,
3
3
  OrderEditDraft,
4
4
  OrderEditResult,
5
- OrderEditUpdateAction,
6
- } from '@commercetools/platform-sdk'
7
- import { getBaseResourceProperties } from '../helpers.js'
8
- import type { Writable } from '../types.js'
9
- import { AbstractResourceRepository, RepositoryContext } from './abstract.js'
5
+ } from "@commercetools/platform-sdk";
6
+ import { AbstractStorage } from "~src/storage";
7
+ import { getBaseResourceProperties } from "../helpers";
8
+ import { AbstractResourceRepository, RepositoryContext } from "./abstract";
10
9
 
11
- export class OrderEditRepository extends AbstractResourceRepository<'order-edit'> {
12
- getTypeId() {
13
- return 'order-edit' as const
10
+ export class OrderEditRepository extends AbstractResourceRepository<"order-edit"> {
11
+ constructor(storage: AbstractStorage) {
12
+ super("order-edit", storage);
14
13
  }
15
14
 
16
15
  create(context: RepositoryContext, draft: OrderEditDraft): OrderEdit {
@@ -19,21 +18,9 @@ export class OrderEditRepository extends AbstractResourceRepository<'order-edit'
19
18
  stagedActions: draft.stagedActions ?? [],
20
19
  resource: draft.resource,
21
20
  result: {
22
- type: 'NotProcessed',
21
+ type: "NotProcessed",
23
22
  } as OrderEditResult,
24
- }
25
- this.saveNew(context, resource)
26
- return resource
23
+ };
24
+ return this.saveNew(context, resource);
27
25
  }
28
-
29
- actions: Partial<
30
- Record<
31
- OrderEditUpdateAction['action'],
32
- (
33
- context: RepositoryContext,
34
- resource: Writable<OrderEdit>,
35
- action: any
36
- ) => void
37
- >
38
- > = {}
39
26
  }