@labdigital/commercetools-mock 2.66.0 → 3.0.0-beta.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 (281) hide show
  1. package/README.md +31 -8
  2. package/dist/abstract-BKFcva6S.mjs +1044 -0
  3. package/dist/abstract-BKFcva6S.mjs.map +1 -0
  4. package/dist/config-BcNSzPZz.d.mts +1718 -0
  5. package/dist/index.d.mts +50 -1633
  6. package/dist/index.mjs +3769 -2653
  7. package/dist/index.mjs.map +1 -1
  8. package/dist/storage/sqlite.d.mts +59 -0
  9. package/dist/storage/sqlite.mjs +234 -0
  10. package/dist/storage/sqlite.mjs.map +1 -0
  11. package/package.json +26 -29
  12. package/src/ctMock.ts +125 -136
  13. package/src/helpers.ts +14 -6
  14. package/src/index.ts +5 -0
  15. package/src/lib/masking.ts +4 -5
  16. package/src/lib/product-review-statistics.test.ts +257 -294
  17. package/src/lib/review-statistics.ts +17 -4
  18. package/src/oauth/helpers.ts +7 -4
  19. package/src/oauth/server.test.ts +102 -62
  20. package/src/oauth/server.ts +215 -213
  21. package/src/oauth/store.ts +20 -6
  22. package/src/orderSearch.ts +3 -3
  23. package/src/product-projection-search.ts +38 -20
  24. package/src/product-search-availability.test.ts +31 -52
  25. package/src/product-search.ts +19 -10
  26. package/src/projectAPI.ts +6 -22
  27. package/src/repositories/abstract.ts +182 -48
  28. package/src/repositories/as-associate.test.ts +19 -19
  29. package/src/repositories/associate-role.ts +12 -23
  30. package/src/repositories/attribute-group.test.ts +23 -23
  31. package/src/repositories/attribute-group.ts +6 -4
  32. package/src/repositories/business-unit.test.ts +63 -57
  33. package/src/repositories/business-unit.ts +107 -55
  34. package/src/repositories/cart/actions.ts +96 -65
  35. package/src/repositories/cart/helpers.ts +15 -11
  36. package/src/repositories/cart/index.test.ts +136 -30
  37. package/src/repositories/cart/index.ts +76 -59
  38. package/src/repositories/cart-discount/actions.ts +12 -44
  39. package/src/repositories/cart-discount/index.ts +20 -8
  40. package/src/repositories/category/actions.ts +27 -27
  41. package/src/repositories/category/index.test.ts +13 -9
  42. package/src/repositories/category/index.ts +40 -23
  43. package/src/repositories/channel.test.ts +53 -51
  44. package/src/repositories/channel.ts +12 -22
  45. package/src/repositories/custom-object.ts +34 -25
  46. package/src/repositories/customer/actions.ts +47 -25
  47. package/src/repositories/customer/index.test.ts +11 -11
  48. package/src/repositories/customer/index.ts +65 -35
  49. package/src/repositories/customer-group.test.ts +44 -42
  50. package/src/repositories/customer-group.ts +12 -22
  51. package/src/repositories/discount-code/actions.ts +3 -19
  52. package/src/repositories/discount-code/index.ts +9 -4
  53. package/src/repositories/discount-group/index.ts +8 -3
  54. package/src/repositories/extension.test.ts +27 -27
  55. package/src/repositories/extension.ts +10 -5
  56. package/src/repositories/helpers.ts +126 -47
  57. package/src/repositories/inventory-entry/actions.ts +3 -24
  58. package/src/repositories/inventory-entry/index.ts +19 -11
  59. package/src/repositories/my-customer.ts +13 -12
  60. package/src/repositories/my-order.ts +5 -2
  61. package/src/repositories/order/actions.ts +84 -56
  62. package/src/repositories/order/index.test.ts +36 -31
  63. package/src/repositories/order/index.ts +83 -49
  64. package/src/repositories/order-edit.ts +8 -3
  65. package/src/repositories/payment/actions.ts +64 -44
  66. package/src/repositories/payment/helpers.ts +3 -3
  67. package/src/repositories/payment/index.ts +28 -12
  68. package/src/repositories/product/actions.ts +133 -98
  69. package/src/repositories/product/helpers.ts +29 -16
  70. package/src/repositories/product/index.ts +42 -25
  71. package/src/repositories/product-discount.ts +6 -4
  72. package/src/repositories/product-projection.ts +41 -21
  73. package/src/repositories/product-selection.ts +8 -15
  74. package/src/repositories/product-tailoring.ts +22 -3
  75. package/src/repositories/product-type.ts +45 -4
  76. package/src/repositories/project.ts +57 -13
  77. package/src/repositories/quote/actions.ts +5 -28
  78. package/src/repositories/quote/index.ts +29 -6
  79. package/src/repositories/quote-request/actions.ts +5 -28
  80. package/src/repositories/quote-request/index.test.ts +3 -3
  81. package/src/repositories/quote-request/index.ts +31 -11
  82. package/src/repositories/quote-staged/actions.ts +5 -28
  83. package/src/repositories/quote-staged/index.ts +22 -8
  84. package/src/repositories/recurrence-policy/index.ts +6 -4
  85. package/src/repositories/recurring-order/actions.ts +7 -32
  86. package/src/repositories/recurring-order/index.ts +8 -6
  87. package/src/repositories/review.test.ts +147 -142
  88. package/src/repositories/review.ts +31 -37
  89. package/src/repositories/shipping-method/actions.ts +11 -28
  90. package/src/repositories/shipping-method/index.ts +26 -15
  91. package/src/repositories/shopping-list/actions.ts +21 -31
  92. package/src/repositories/shopping-list/index.ts +44 -22
  93. package/src/repositories/standalone-price.ts +6 -4
  94. package/src/repositories/state.ts +15 -9
  95. package/src/repositories/store.ts +21 -32
  96. package/src/repositories/subscription.test.ts +22 -22
  97. package/src/repositories/subscription.ts +8 -3
  98. package/src/repositories/tax-category/index.ts +8 -3
  99. package/src/repositories/type/actions.ts +21 -3
  100. package/src/repositories/type/index.ts +5 -3
  101. package/src/repositories/zone.test.ts +112 -77
  102. package/src/repositories/zone.ts +5 -3
  103. package/src/schemas/generated/associate-role.ts +13 -0
  104. package/src/schemas/generated/attribute-group.ts +12 -0
  105. package/src/schemas/generated/business-unit.ts +38 -0
  106. package/src/schemas/generated/cart-discount.ts +33 -0
  107. package/src/schemas/generated/cart.ts +61 -0
  108. package/src/schemas/generated/category.ts +25 -0
  109. package/src/schemas/generated/channel.ts +21 -0
  110. package/src/schemas/generated/common.ts +1372 -0
  111. package/src/schemas/generated/custom-object.ts +11 -0
  112. package/src/schemas/generated/customer-group.ts +11 -0
  113. package/src/schemas/generated/customer.ts +47 -0
  114. package/src/schemas/generated/discount-code.ts +25 -0
  115. package/src/schemas/generated/discount-group.ts +13 -0
  116. package/src/schemas/generated/extension.ts +15 -0
  117. package/src/schemas/generated/index.ts +42 -0
  118. package/src/schemas/generated/inventory-entry.ts +20 -0
  119. package/src/schemas/generated/my-quote-request.ts +10 -0
  120. package/src/schemas/generated/order-edit.ts +18 -0
  121. package/src/schemas/generated/order-from-cart.ts +25 -0
  122. package/src/schemas/generated/payment.ts +30 -0
  123. package/src/schemas/generated/product-discount.ts +20 -0
  124. package/src/schemas/generated/product-selection.ts +18 -0
  125. package/src/schemas/generated/product-tailoring.ts +26 -0
  126. package/src/schemas/generated/product-type.ts +12 -0
  127. package/src/schemas/generated/product.ts +37 -0
  128. package/src/schemas/generated/quote-request.ts +19 -0
  129. package/src/schemas/generated/quote.ts +18 -0
  130. package/src/schemas/generated/recurrence-policy.ts +15 -0
  131. package/src/schemas/generated/recurring-order.ts +19 -0
  132. package/src/schemas/generated/review.ts +24 -0
  133. package/src/schemas/generated/shipping-method.ts +24 -0
  134. package/src/schemas/generated/shopping-list.ts +28 -0
  135. package/src/schemas/generated/staged-quote.ts +18 -0
  136. package/src/schemas/generated/standalone-price.ts +32 -0
  137. package/src/schemas/generated/state.ts +20 -0
  138. package/src/schemas/generated/store.ts +23 -0
  139. package/src/schemas/generated/subscription.ts +20 -0
  140. package/src/schemas/generated/tax-category.ts +12 -0
  141. package/src/schemas/generated/type.ts +17 -0
  142. package/src/schemas/generated/zone.ts +12 -0
  143. package/src/schemas/update-request.ts +3 -5
  144. package/src/server.ts +32 -4
  145. package/src/services/abstract.ts +207 -101
  146. package/src/services/as-associate-cart.test.ts +28 -36
  147. package/src/services/as-associate-cart.ts +15 -12
  148. package/src/services/as-associate-order.test.ts +33 -40
  149. package/src/services/as-associate-order.ts +15 -12
  150. package/src/services/as-associate-quote-request.ts +15 -12
  151. package/src/services/as-associate-shopping-list.test.ts +25 -35
  152. package/src/services/as-associate-shopping-list.ts +15 -12
  153. package/src/services/as-associate.test.ts +21 -15
  154. package/src/services/as-associate.ts +23 -22
  155. package/src/services/associate-roles.test.ts +16 -22
  156. package/src/services/associate-roles.ts +2 -2
  157. package/src/services/attribute-group.test.ts +40 -44
  158. package/src/services/attribute-group.ts +2 -2
  159. package/src/services/business-units.test.ts +227 -163
  160. package/src/services/business-units.ts +2 -2
  161. package/src/services/cart-discount.test.ts +253 -187
  162. package/src/services/cart-discount.ts +2 -2
  163. package/src/services/cart.test.ts +833 -832
  164. package/src/services/cart.ts +31 -12
  165. package/src/services/category.test.ts +208 -130
  166. package/src/services/category.ts +2 -2
  167. package/src/services/channel.test.ts +39 -44
  168. package/src/services/channel.ts +2 -2
  169. package/src/services/custom-object.test.ts +103 -79
  170. package/src/services/custom-object.ts +106 -38
  171. package/src/services/customer-group.test.ts +39 -44
  172. package/src/services/customer-group.ts +2 -2
  173. package/src/services/customer.test.ts +357 -292
  174. package/src/services/customer.ts +70 -23
  175. package/src/services/discount-code.test.ts +57 -68
  176. package/src/services/discount-code.ts +2 -2
  177. package/src/services/discount-group.test.ts +111 -134
  178. package/src/services/discount-group.ts +2 -2
  179. package/src/services/draft-validation.test.ts +255 -0
  180. package/src/services/extension.test.ts +39 -44
  181. package/src/services/extension.ts +2 -2
  182. package/src/services/inventory-entry.test.ts +106 -87
  183. package/src/services/inventory-entry.ts +2 -2
  184. package/src/services/my-business-unit.test.ts +82 -112
  185. package/src/services/my-business-unit.ts +25 -19
  186. package/src/services/my-cart.test.ts +46 -41
  187. package/src/services/my-cart.ts +32 -28
  188. package/src/services/my-customer.test.ts +153 -88
  189. package/src/services/my-customer.ts +130 -61
  190. package/src/services/my-order.ts +15 -12
  191. package/src/services/my-payment.test.ts +30 -24
  192. package/src/services/my-payment.ts +2 -2
  193. package/src/services/my-shopping-list.ts +2 -2
  194. package/src/services/order.test.ts +332 -276
  195. package/src/services/order.ts +45 -27
  196. package/src/services/payment.test.ts +31 -29
  197. package/src/services/payment.ts +2 -2
  198. package/src/services/product-discount.test.ts +39 -46
  199. package/src/services/product-discount.ts +2 -2
  200. package/src/services/product-projection.test.ts +176 -166
  201. package/src/services/product-projection.ts +31 -15
  202. package/src/services/product-selection.test.ts +17 -9
  203. package/src/services/product-selection.ts +2 -2
  204. package/src/services/product-type.test.ts +80 -21
  205. package/src/services/product-type.ts +2 -2
  206. package/src/services/product.test.ts +569 -534
  207. package/src/services/product.ts +14 -7
  208. package/src/services/project.test.ts +22 -12
  209. package/src/services/project.ts +28 -13
  210. package/src/services/quote-request.test.ts +36 -39
  211. package/src/services/quote-request.ts +2 -2
  212. package/src/services/quote-staged.ts +2 -2
  213. package/src/services/quote.ts +2 -2
  214. package/src/services/recurrence-policy.test.ts +114 -139
  215. package/src/services/recurrence-policy.ts +2 -2
  216. package/src/services/recurring-order.test.ts +149 -194
  217. package/src/services/recurring-order.ts +2 -2
  218. package/src/services/reviews.test.ts +127 -106
  219. package/src/services/reviews.ts +2 -2
  220. package/src/services/shipping-method.test.ts +96 -125
  221. package/src/services/shipping-method.ts +24 -12
  222. package/src/services/shopping-list.test.ts +183 -141
  223. package/src/services/shopping-list.ts +2 -2
  224. package/src/services/standalone-price.test.ts +60 -46
  225. package/src/services/standalone-price.ts +2 -2
  226. package/src/services/state.test.ts +20 -25
  227. package/src/services/state.ts +2 -2
  228. package/src/services/store.test.ts +26 -45
  229. package/src/services/store.ts +2 -2
  230. package/src/services/subscription.test.ts +39 -44
  231. package/src/services/subscription.ts +2 -2
  232. package/src/services/tax-category.test.ts +33 -36
  233. package/src/services/tax-category.ts +2 -2
  234. package/src/services/type.test.ts +45 -44
  235. package/src/services/type.ts +2 -2
  236. package/src/services/zone.test.ts +40 -44
  237. package/src/services/zone.ts +2 -2
  238. package/src/shipping.ts +41 -11
  239. package/src/storage/abstract.ts +248 -17
  240. package/src/storage/in-memory.ts +147 -290
  241. package/src/storage/sqlite.ts +429 -0
  242. package/src/storage/storage-map.ts +75 -0
  243. package/src/storage/storage.test-helpers.ts +97 -0
  244. package/src/storage/storage.test.ts +802 -0
  245. package/src/testing/associate-role.ts +28 -0
  246. package/src/testing/attribute-group.ts +27 -0
  247. package/src/testing/business-unit.ts +9 -8
  248. package/src/testing/cart-discount.ts +34 -0
  249. package/src/testing/cart.ts +20 -0
  250. package/src/testing/category.ts +25 -0
  251. package/src/testing/channel.ts +23 -0
  252. package/src/testing/custom-object.ts +27 -0
  253. package/src/testing/customer-group.ts +26 -0
  254. package/src/testing/customer.ts +36 -33
  255. package/src/testing/discount-code.ts +29 -0
  256. package/src/testing/discount-group.ts +27 -0
  257. package/src/testing/extension.ts +32 -0
  258. package/src/testing/index.ts +33 -0
  259. package/src/testing/inventory-entry.ts +26 -0
  260. package/src/testing/order.ts +27 -0
  261. package/src/testing/payment.ts +23 -0
  262. package/src/testing/product-discount.ts +33 -0
  263. package/src/testing/product-selection.ts +28 -0
  264. package/src/testing/product-type.ts +27 -0
  265. package/src/testing/product.ts +38 -0
  266. package/src/testing/quote-request.ts +29 -0
  267. package/src/testing/recurrence-policy.ts +33 -0
  268. package/src/testing/recurring-order.ts +32 -0
  269. package/src/testing/review.ts +24 -0
  270. package/src/testing/shipping-method.ts +31 -0
  271. package/src/testing/shopping-list.ts +25 -0
  272. package/src/testing/standalone-price.ts +31 -0
  273. package/src/testing/state.ts +21 -0
  274. package/src/testing/store.ts +26 -0
  275. package/src/testing/subscription.ts +38 -0
  276. package/src/testing/tax-category.ts +27 -0
  277. package/src/testing/type.ts +9 -6
  278. package/src/testing/zone.ts +22 -0
  279. package/src/validate.test.ts +122 -0
  280. package/src/validate.ts +78 -7
  281. package/src/.env +0 -0
@@ -1,5 +1,6 @@
1
1
  import type {
2
2
  CustomerReference,
3
+ InvalidOperationError,
3
4
  Payment,
4
5
  PaymentAddInterfaceInteractionAction,
5
6
  PaymentAddTransactionAction,
@@ -25,11 +26,14 @@ import type {
25
26
  PaymentSetStatusInterfaceTextAction,
26
27
  PaymentSetTransactionCustomFieldAction,
27
28
  PaymentSetTransactionCustomTypeAction,
29
+ PaymentSetTransactionInterfaceIdAction,
28
30
  PaymentTransitionStateAction,
29
31
  PaymentUpdateAction,
32
+ ReferencedResourceNotFoundError,
30
33
  State,
31
34
  Transaction,
32
35
  } from "@commercetools/platform-sdk";
36
+ import { CommercetoolsError } from "#src/exceptions.ts";
33
37
  import type { Writable } from "#src/types.ts";
34
38
  import type { RepositoryContext, UpdateHandlerInterface } from "../abstract.ts";
35
39
  import { AbstractUpdateHandler } from "../abstract.ts";
@@ -44,24 +48,31 @@ export class PaymentUpdateHandler
44
48
  extends AbstractUpdateHandler
45
49
  implements UpdateHandlerInterface<Payment, PaymentUpdateAction>
46
50
  {
47
- addInterfaceInteraction(
51
+ async addInterfaceInteraction(
48
52
  context: RepositoryContext,
49
53
  resource: Writable<Payment>,
50
54
  { type, fields }: PaymentAddInterfaceInteractionAction,
51
55
  ) {
52
- resource.interfaceInteractions.push(
53
- createCustomFields({ type, fields }, context.projectKey, this._storage)!,
56
+ const customFields = await createCustomFields(
57
+ { type, fields },
58
+ context.projectKey,
59
+ this._storage,
54
60
  );
61
+ resource.interfaceInteractions.push(customFields!);
55
62
  }
56
63
 
57
- addTransaction(
64
+ async addTransaction(
58
65
  context: RepositoryContext,
59
66
  resource: Writable<Payment>,
60
67
  { transaction }: PaymentAddTransactionAction,
61
68
  ) {
62
69
  resource.transactions = [
63
70
  ...resource.transactions,
64
- transactionFromTransactionDraft(context, this._storage, transaction),
71
+ await transactionFromTransactionDraft(
72
+ context,
73
+ this._storage,
74
+ transaction,
75
+ ),
65
76
  ];
66
77
  }
67
78
 
@@ -89,6 +100,19 @@ export class PaymentUpdateHandler
89
100
  }
90
101
  }
91
102
 
103
+ setTransactionInterfaceId(
104
+ _context: RepositoryContext,
105
+ resource: Writable<Payment>,
106
+ { transactionId, interfaceId }: PaymentSetTransactionInterfaceIdAction,
107
+ ) {
108
+ const transaction = resource.transactions.find(
109
+ (e: Transaction) => e.id === transactionId,
110
+ );
111
+ if (transaction) {
112
+ transaction.interfaceId = interfaceId;
113
+ }
114
+ }
115
+
92
116
  changeTransactionState(
93
117
  _context: RepositoryContext,
94
118
  resource: Writable<Payment>,
@@ -126,13 +150,13 @@ export class PaymentUpdateHandler
126
150
  resource.customer = undefined;
127
151
  }
128
152
 
129
- setCustomer(
153
+ async setCustomer(
130
154
  _context: RepositoryContext,
131
155
  resource: Writable<Payment>,
132
156
  { customer }: PaymentSetCustomerAction,
133
157
  ) {
134
158
  if (customer) {
135
- const c = getReferenceFromResourceIdentifier<CustomerReference>(
159
+ const c = await getReferenceFromResourceIdentifier<CustomerReference>(
136
160
  customer,
137
161
  _context.projectKey,
138
162
  this._storage,
@@ -147,37 +171,15 @@ export class PaymentUpdateHandler
147
171
  resource: Payment,
148
172
  { name, value }: PaymentSetCustomFieldAction,
149
173
  ) {
150
- if (!resource.custom) {
151
- throw new Error("Resource has no custom field");
152
- }
153
-
154
- resource.custom.fields[name] = value;
174
+ this._setCustomFieldValues(resource, { name, value });
155
175
  }
156
176
 
157
- setCustomType(
177
+ async setCustomType(
158
178
  context: RepositoryContext,
159
179
  resource: Writable<Payment>,
160
180
  { type, fields }: PaymentSetCustomTypeAction,
161
181
  ) {
162
- if (!type) {
163
- resource.custom = undefined;
164
- } else {
165
- const resolvedType = this._storage.getByResourceIdentifier(
166
- context.projectKey,
167
- type,
168
- );
169
- if (!resolvedType) {
170
- throw new Error(`Type ${type} not found`);
171
- }
172
-
173
- resource.custom = {
174
- type: {
175
- typeId: "type",
176
- id: resolvedType.id,
177
- },
178
- fields: fields ?? {},
179
- };
180
- }
182
+ await this._setCustomType(context, resource, { type, fields });
181
183
  }
182
184
 
183
185
  setInterfaceId(
@@ -246,14 +248,17 @@ export class PaymentUpdateHandler
246
248
  );
247
249
  if (transaction) {
248
250
  if (!transaction.custom) {
249
- throw new Error("Transaction has no custom field");
251
+ throw new CommercetoolsError<InvalidOperationError>({
252
+ code: "InvalidOperation",
253
+ message: "Transaction has no custom field",
254
+ });
250
255
  }
251
256
 
252
257
  transaction.custom.fields[name] = value;
253
258
  }
254
259
  }
255
260
 
256
- setTransactionCustomType(
261
+ async setTransactionCustomType(
257
262
  context: RepositoryContext,
258
263
  resource: Writable<Payment>,
259
264
  { transactionId, type, fields }: PaymentSetTransactionCustomTypeAction,
@@ -265,12 +270,16 @@ export class PaymentUpdateHandler
265
270
  if (!type) {
266
271
  transaction.custom = undefined;
267
272
  } else {
268
- const resolvedType = this._storage.getByResourceIdentifier(
273
+ const resolvedType = await this._storage.getByResourceIdentifier(
269
274
  context.projectKey,
270
275
  type,
271
276
  );
272
277
  if (!resolvedType) {
273
- throw new Error(`Type ${type} not found`);
278
+ throw new CommercetoolsError<ReferencedResourceNotFoundError>({
279
+ code: "ReferencedResourceNotFound",
280
+ message: `Type ${type} not found`,
281
+ typeId: "type",
282
+ });
274
283
  }
275
284
 
276
285
  transaction.custom = {
@@ -284,18 +293,22 @@ export class PaymentUpdateHandler
284
293
  }
285
294
  }
286
295
 
287
- transitionState(
296
+ async transitionState(
288
297
  context: RepositoryContext,
289
298
  resource: Writable<Payment>,
290
299
  { state }: PaymentTransitionStateAction,
291
300
  ) {
292
- const stateObj = this._storage.getByResourceIdentifier(
301
+ const stateObj = (await this._storage.getByResourceIdentifier(
293
302
  context.projectKey,
294
303
  state,
295
- ) as State | null;
304
+ )) as State | null;
296
305
 
297
306
  if (!stateObj) {
298
- throw new Error(`State ${state} not found`);
307
+ throw new CommercetoolsError<ReferencedResourceNotFoundError>({
308
+ code: "ReferencedResourceNotFound",
309
+ message: `State ${state} not found`,
310
+ typeId: "state",
311
+ });
299
312
  }
300
313
 
301
314
  resource.paymentStatus.state = {
@@ -339,13 +352,16 @@ export class PaymentUpdateHandler
339
352
  { name, value }: PaymentSetMethodInfoCustomFieldAction,
340
353
  ) {
341
354
  if (!resource.paymentMethodInfo.custom) {
342
- throw new Error("PaymentMethodInfo has no custom field");
355
+ throw new CommercetoolsError<InvalidOperationError>({
356
+ code: "InvalidOperation",
357
+ message: "PaymentMethodInfo has no custom field",
358
+ });
343
359
  }
344
360
 
345
361
  resource.paymentMethodInfo.custom.fields[name] = value;
346
362
  }
347
363
 
348
- setMethodInfoCustomType(
364
+ async setMethodInfoCustomType(
349
365
  context: RepositoryContext,
350
366
  resource: Writable<Payment>,
351
367
  { type, fields }: PaymentSetMethodInfoCustomTypeAction,
@@ -353,12 +369,16 @@ export class PaymentUpdateHandler
353
369
  if (!type) {
354
370
  resource.paymentMethodInfo.custom = undefined;
355
371
  } else {
356
- const resolvedType = this._storage.getByResourceIdentifier(
372
+ const resolvedType = await this._storage.getByResourceIdentifier(
357
373
  context.projectKey,
358
374
  type,
359
375
  );
360
376
  if (!resolvedType) {
361
- throw new Error(`Type ${type} not found`);
377
+ throw new CommercetoolsError<ReferencedResourceNotFoundError>({
378
+ code: "ReferencedResourceNotFound",
379
+ message: `Type ${type} not found`,
380
+ typeId: "type",
381
+ });
362
382
  }
363
383
 
364
384
  resource.paymentMethodInfo.custom = {
@@ -7,14 +7,14 @@ import type { AbstractStorage } from "#src/storage/index.ts";
7
7
  import type { RepositoryContext } from "../abstract.ts";
8
8
  import { createCentPrecisionMoney, createCustomFields } from "../helpers.ts";
9
9
 
10
- export const transactionFromTransactionDraft = (
10
+ export const transactionFromTransactionDraft = async (
11
11
  context: RepositoryContext,
12
12
  storage: AbstractStorage,
13
13
  draft: TransactionDraft,
14
- ): Transaction => ({
14
+ ): Promise<Transaction> => ({
15
15
  ...draft,
16
16
  id: uuidv4(),
17
17
  amount: createCentPrecisionMoney(draft.amount),
18
- custom: createCustomFields(draft.custom, context.projectKey, storage),
18
+ custom: await createCustomFields(draft.custom, context.projectKey, storage),
19
19
  state: draft.state ?? "Initial", // Documented as default
20
20
  });
@@ -5,6 +5,7 @@ import type {
5
5
  } from "@commercetools/platform-sdk";
6
6
  import type { Config } from "#src/config.ts";
7
7
  import { getBaseResourceProperties } from "#src/helpers.ts";
8
+ import { PaymentDraftSchema } from "#src/schemas/generated/payment.ts";
8
9
  import type { RepositoryContext } from "../abstract.ts";
9
10
  import { AbstractResourceRepository } from "../abstract.ts";
10
11
  import {
@@ -19,11 +20,31 @@ export class PaymentRepository extends AbstractResourceRepository<"payment"> {
19
20
  constructor(config: Config) {
20
21
  super("payment", config);
21
22
  this.actions = new PaymentUpdateHandler(this._storage);
23
+ this.draftSchema = PaymentDraftSchema;
22
24
  }
23
25
 
24
- create(context: RepositoryContext, draft: PaymentDraft): Payment {
26
+ async create(
27
+ context: RepositoryContext,
28
+ draft: PaymentDraft,
29
+ ): Promise<Payment> {
30
+ const transactions = await Promise.all(
31
+ (draft.transactions || []).map((t) =>
32
+ transactionFromTransactionDraft(context, this._storage, t),
33
+ ),
34
+ );
35
+ const interfaceInteractions = await Promise.all(
36
+ (draft.interfaceInteractions || []).map(async (interaction) => {
37
+ const customFields = await createCustomFields(
38
+ interaction,
39
+ context.projectKey,
40
+ this._storage,
41
+ );
42
+ return customFields!;
43
+ }),
44
+ );
45
+
25
46
  const resource: Payment = {
26
- ...getBaseResourceProperties(),
47
+ ...getBaseResourceProperties(context.clientId),
27
48
  key: draft.key,
28
49
  amountPlanned: createCentPrecisionMoney(draft.amountPlanned),
29
50
  paymentMethodInfo: { ...draft.paymentMethodInfo!, custom: undefined },
@@ -31,7 +52,7 @@ export class PaymentRepository extends AbstractResourceRepository<"payment"> {
31
52
  ? {
32
53
  ...draft.paymentStatus,
33
54
  state: draft.paymentStatus.state
34
- ? getReferenceFromResourceIdentifier<StateReference>(
55
+ ? await getReferenceFromResourceIdentifier<StateReference>(
35
56
  draft.paymentStatus.state,
36
57
  context.projectKey,
37
58
  this._storage,
@@ -39,20 +60,15 @@ export class PaymentRepository extends AbstractResourceRepository<"payment"> {
39
60
  : undefined,
40
61
  }
41
62
  : {},
42
- transactions: (draft.transactions || []).map((t) =>
43
- transactionFromTransactionDraft(context, this._storage, t),
44
- ),
45
- interfaceInteractions: (draft.interfaceInteractions || []).map(
46
- (interaction) =>
47
- createCustomFields(interaction, context.projectKey, this._storage)!,
48
- ),
49
- custom: createCustomFields(
63
+ transactions,
64
+ interfaceInteractions,
65
+ custom: await createCustomFields(
50
66
  draft.custom,
51
67
  context.projectKey,
52
68
  this._storage,
53
69
  ),
54
70
  };
55
71
 
56
- return this.saveNew(context, resource);
72
+ return await this.saveNew(context, resource);
57
73
  }
58
74
  }