@chevre/domain 25.2.0-alpha.2 → 25.2.0-alpha.21

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 (53) hide show
  1. package/lib/chevre/repo/action/actionProcess.js +57 -57
  2. package/lib/chevre/repo/action.d.ts +16 -9
  3. package/lib/chevre/repo/action.js +99 -180
  4. package/lib/chevre/repo/mongoose/schemas/action.js +67 -66
  5. package/lib/chevre/repo/mongoose/schemas/order.d.ts +4 -0
  6. package/lib/chevre/repo/mongoose/schemas/order.js +1 -0
  7. package/lib/chevre/repo/mongoose/schemas/task.js +12 -12
  8. package/lib/chevre/repo/order.d.ts +2 -0
  9. package/lib/chevre/repo/orderInTransaction.d.ts +41 -0
  10. package/lib/chevre/repo/orderInTransaction.js +131 -0
  11. package/lib/chevre/repo/transaction/placeOrder.d.ts +1 -44
  12. package/lib/chevre/repo/transaction/placeOrder.js +42 -82
  13. package/lib/chevre/service/assetTransaction/pay/start/factory.js +3 -4
  14. package/lib/chevre/service/offer/event/authorize/factory.d.ts +5 -1
  15. package/lib/chevre/service/offer/event/authorize/factory.js +22 -12
  16. package/lib/chevre/service/offer/event/authorize.d.ts +4 -0
  17. package/lib/chevre/service/offer/event/authorize.js +1 -1
  18. package/lib/chevre/service/offer/eventServiceByCOA/authorize.js +2 -2
  19. package/lib/chevre/service/offer/eventServiceByCOA/changeOffers.js +1 -1
  20. package/lib/chevre/service/order/deleteOrder.d.ts +5 -1
  21. package/lib/chevre/service/order/deleteOrder.js +8 -1
  22. package/lib/chevre/service/payment/any/authorize/fixOrderAsNeeded.js +1 -2
  23. package/lib/chevre/service/payment/any/authorize/fixTransactionNumber.d.ts +3 -2
  24. package/lib/chevre/service/payment/any/authorize/handlePrePublishedPaymentMethodIdOnAuthorizing.d.ts +4 -3
  25. package/lib/chevre/service/payment/any/authorize/handlePrePublishedPaymentMethodIdOnAuthorizing.js +3 -31
  26. package/lib/chevre/service/payment/any/authorize.js +13 -37
  27. package/lib/chevre/service/payment/any/factory.d.ts +6 -6
  28. package/lib/chevre/service/payment/any/factory.js +19 -22
  29. package/lib/chevre/service/payment/any/invalidatePaymentUrl.d.ts +2 -0
  30. package/lib/chevre/service/payment/any/invalidatePaymentUrl.js +4 -66
  31. package/lib/chevre/service/payment/any/publishPaymentUrl.d.ts +2 -0
  32. package/lib/chevre/service/payment/any/publishPaymentUrl.js +2 -16
  33. package/lib/chevre/service/payment/any/voidPayTransaction.d.ts +2 -0
  34. package/lib/chevre/service/payment/any/voidPayTransaction.js +1 -23
  35. package/lib/chevre/service/payment/creditCard/authorize/processAuthorizeCreditCard.d.ts +1 -1
  36. package/lib/chevre/service/payment/creditCard/authorize/processAuthorizeCreditCard.js +5 -9
  37. package/lib/chevre/service/task/publishPaymentUrl.js +2 -2
  38. package/lib/chevre/service/task/voidPayTransaction.js +3 -7
  39. package/lib/chevre/service/transaction/deleteTransaction/deletePayTransactionsByPlaceOrder.d.ts +15 -0
  40. package/lib/chevre/service/transaction/deleteTransaction/deletePayTransactionsByPlaceOrder.js +51 -0
  41. package/lib/chevre/service/transaction/deleteTransaction/deleteReservationsByPlaceOrder.d.ts +23 -0
  42. package/lib/chevre/service/transaction/deleteTransaction/deleteReservationsByPlaceOrder.js +65 -0
  43. package/lib/chevre/service/transaction/deleteTransaction.js +15 -152
  44. package/lib/chevre/service/transaction/placeOrder/confirm/prepareUnitPriceOfferConditions.d.ts +22 -0
  45. package/lib/chevre/service/transaction/placeOrder/confirm/prepareUnitPriceOfferConditions.js +120 -0
  46. package/lib/chevre/service/transaction/placeOrder/confirm/validation/factory.d.ts +5 -1
  47. package/lib/chevre/service/transaction/placeOrder/confirm/validation.d.ts +14 -2
  48. package/lib/chevre/service/transaction/placeOrder/confirm/validation.js +108 -89
  49. package/lib/chevre/service/transaction/placeOrder/confirm.d.ts +7 -0
  50. package/lib/chevre/service/transaction/placeOrder/confirm.js +35 -60
  51. package/lib/chevre/service/transaction/placeOrder/publishConfirmationNumberIfNotExist.d.ts +4 -7
  52. package/lib/chevre/service/transaction/placeOrder/publishConfirmationNumberIfNotExist.js +33 -15
  53. package/package.json +2 -2
@@ -2,7 +2,6 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.call = call;
4
4
  const accountingReport_1 = require("../../repo/accountingReport");
5
- // import { ActionRepo } from '../../repo/action';
6
5
  const acceptPay_1 = require("../../repo/action/acceptPay");
7
6
  const authorizePaymentMethod_1 = require("../../repo/action/authorizePaymentMethod");
8
7
  const assetTransaction_1 = require("../../repo/assetTransaction");
@@ -10,8 +9,8 @@ const paymentService_1 = require("../../repo/paymentService");
10
9
  const paymentServiceProvider_1 = require("../../repo/paymentServiceProvider");
11
10
  const sellerPaymentAccepted_1 = require("../../repo/sellerPaymentAccepted");
12
11
  const task_1 = require("../../repo/task");
12
+ const orderInTransaction_1 = require("../../repo/orderInTransaction");
13
13
  const placeOrder_1 = require("../../repo/transaction/placeOrder");
14
- // import { TransactionRepo } from '../../repo/transaction';
15
14
  const any_1 = require("../payment/any");
16
15
  /**
17
16
  * タスク実行関数
@@ -24,7 +23,6 @@ function call(params) {
24
23
  sameAs: { id: params.id }
25
24
  })({
26
25
  accountingReport: new accountingReport_1.AccountingReportRepo(connection),
27
- // action: new ActionRepo(connection),
28
26
  acceptPayAction: new acceptPay_1.AcceptPayActionRepo(connection),
29
27
  authorizePaymentMethodAction: new authorizePaymentMethod_1.AuthorizePaymentMethodActionRepo(connection),
30
28
  assetTransaction: new assetTransaction_1.AssetTransactionRepo(connection),
@@ -32,10 +30,8 @@ function call(params) {
32
30
  paymentService: new paymentService_1.PaymentServiceRepo(connection),
33
31
  paymentServiceProvider: new paymentServiceProvider_1.PaymentServiceProviderRepo(connection),
34
32
  task: new task_1.TaskRepo(connection),
33
+ orderInTransaction: new orderInTransaction_1.OrderInTransactionRepo(connection),
35
34
  placeOrder: new placeOrder_1.PlaceOrderRepo(connection)
36
- // transaction: new TransactionRepo(connection)
37
- }
38
- // settings
39
- );
35
+ });
40
36
  };
41
37
  }
@@ -0,0 +1,15 @@
1
+ import { factory } from '../../../factory';
2
+ import type { AssetTransactionRepo } from '../../../repo/assetTransaction';
3
+ type IAuthorizeOfferAction = factory.action.authorize.offer.eventService.IAction;
4
+ type IAuthorizePaymentAction = factory.action.authorize.paymentMethod.any.IAction;
5
+ export declare function deletePayTransactionsByPlaceOrder(params: {
6
+ authorizeActions: (IAuthorizeOfferAction | IAuthorizePaymentAction)[];
7
+ transaction: Pick<factory.transaction.placeOrder.ITransaction, 'project'>;
8
+ }): (repos: {
9
+ assetTransaction: AssetTransactionRepo;
10
+ }) => Promise<{
11
+ deletePayTransactionResult: any;
12
+ deleteRefundResult: any;
13
+ payTransactionNumbers: string[];
14
+ }>;
15
+ export {};
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.deletePayTransactionsByPlaceOrder = deletePayTransactionsByPlaceOrder;
4
+ /* eslint-disable @typescript-eslint/no-explicit-any */
5
+ const factory_1 = require("../../../factory");
6
+ function deletePayTransactionsByPlaceOrder(params) {
7
+ return async (repos) => {
8
+ let deletePayTransactionResult;
9
+ let deleteRefundResult;
10
+ const authorizeActions = params.authorizeActions;
11
+ // 決済取引番号を抽出
12
+ const authorizePaymentActions = authorizeActions
13
+ .filter((a) => {
14
+ return a.object.typeOf === factory_1.factory.action.authorize.paymentMethod.any.ResultType.Payment
15
+ && typeof a.object?.paymentMethodId === 'string'
16
+ && a.object.paymentMethodId.length > 0;
17
+ });
18
+ const payTransactionNumbers = authorizePaymentActions.map((a) => String(a.object.paymentMethodId));
19
+ if (payTransactionNumbers.length > 0) {
20
+ // 決済取引を削除(プロジェクトでも絞ること)(2022-06-07~)
21
+ const deleteAssetTransactionsResult = await repos.assetTransaction.deleteByTransactionNumber({
22
+ project: { id: params.transaction.project.id },
23
+ transactionNumbers: payTransactionNumbers,
24
+ typeOf: factory_1.factory.assetTransactionType.Pay
25
+ });
26
+ deletePayTransactionResult = {
27
+ n: deleteAssetTransactionsResult?.n,
28
+ ok: deleteAssetTransactionsResult?.ok,
29
+ deletedCount: deleteAssetTransactionsResult?.deletedCount
30
+ };
31
+ // 返金取引も削除(2023-05-19~)
32
+ const refundTransactions = await repos.assetTransaction.search({
33
+ typeOf: factory_1.factory.assetTransactionType.Refund,
34
+ object: { paymentMethodId: { $in: payTransactionNumbers } }
35
+ }, ['transactionNumber'], []);
36
+ if (refundTransactions.length > 0) {
37
+ const deleteRefundAssetTransactionsResult = await repos.assetTransaction.deleteByTransactionNumber({
38
+ project: { id: params.transaction.project.id },
39
+ transactionNumbers: refundTransactions.map(({ transactionNumber }) => transactionNumber),
40
+ typeOf: factory_1.factory.assetTransactionType.Refund
41
+ });
42
+ deleteRefundResult = {
43
+ n: deleteRefundAssetTransactionsResult?.n,
44
+ ok: deleteRefundAssetTransactionsResult?.ok,
45
+ deletedCount: deleteRefundAssetTransactionsResult?.deletedCount
46
+ };
47
+ }
48
+ }
49
+ return { deletePayTransactionResult, deleteRefundResult, payTransactionNumbers };
50
+ };
51
+ }
@@ -0,0 +1,23 @@
1
+ import { factory } from '../../../factory';
2
+ import type { AssetTransactionRepo } from '../../../repo/assetTransaction';
3
+ import type { ReservationRepo } from '../../../repo/reservation';
4
+ type IAuthorizeOfferAction = factory.action.authorize.offer.eventService.IAction;
5
+ type IAuthorizePaymentAction = factory.action.authorize.paymentMethod.any.IAction;
6
+ interface IDeleteResult {
7
+ n?: number;
8
+ ok?: number;
9
+ deletedCount?: number;
10
+ }
11
+ export declare function deleteReservationsByPlaceOrder(params: {
12
+ authorizeActions: (IAuthorizeOfferAction | IAuthorizePaymentAction)[];
13
+ transaction: Pick<factory.transaction.placeOrder.ITransaction, 'project'>;
14
+ }): (repos: {
15
+ assetTransaction: AssetTransactionRepo;
16
+ reservation: ReservationRepo;
17
+ }) => Promise<{
18
+ deleteResult?: IDeleteResult;
19
+ deleteReserveTransactionResult?: IDeleteResult;
20
+ deleteCancelReservationTransactionResult?: IDeleteResult;
21
+ reserveTransactionNumbers: string[];
22
+ }>;
23
+ export {};
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.deleteReservationsByPlaceOrder = deleteReservationsByPlaceOrder;
4
+ /* eslint-disable @typescript-eslint/no-explicit-any */
5
+ const factory_1 = require("../../../factory");
6
+ function deleteReservationsByPlaceOrder(params) {
7
+ return async (repos) => {
8
+ let deleteResult;
9
+ let deleteReserveTransactionResult;
10
+ let deleteCancelReservationTransactionResult;
11
+ const authorizeActions = params.authorizeActions;
12
+ // 予約取引番号を抽出
13
+ const authorizeReservationOfferActions = authorizeActions
14
+ .filter((a) => {
15
+ return a.object.typeOf === factory_1.factory.action.authorize.offer.eventService.ObjectType.SeatReservation
16
+ && a.instrument?.transactionNumber === 'string'
17
+ && a.instrument.transactionNumber.length > 0;
18
+ });
19
+ const reserveTransactionNumbers = authorizeReservationOfferActions
20
+ .map((a) => String(a.instrument?.transactionNumber));
21
+ if (reserveTransactionNumbers.length > 0) {
22
+ // 該当予約番号の予約を削除する(プロジェクトでも絞ること)
23
+ const deleteReservationsResult = await repos.reservation.deleteByReservationNumbers({
24
+ project: { id: params.transaction.project.id },
25
+ reservationNumbers: reserveTransactionNumbers
26
+ });
27
+ deleteResult = {
28
+ n: deleteReservationsResult?.n,
29
+ ok: deleteReservationsResult?.ok,
30
+ deletedCount: deleteReservationsResult?.deletedCount
31
+ };
32
+ // 予約取引を削除(プロジェクトでも絞ること)(2022-06-07~)
33
+ const deleteAssetTransactionsResult = await repos.assetTransaction.deleteByTransactionNumber({
34
+ project: { id: params.transaction.project.id },
35
+ transactionNumbers: reserveTransactionNumbers,
36
+ typeOf: factory_1.factory.assetTransactionType.Reserve
37
+ });
38
+ deleteReserveTransactionResult = {
39
+ n: deleteAssetTransactionsResult?.n,
40
+ ok: deleteAssetTransactionsResult?.ok,
41
+ deletedCount: deleteAssetTransactionsResult?.deletedCount
42
+ };
43
+ // 予約番号で予約取消取引を検索
44
+ const deletingCancelReservationTransactions = await repos.assetTransaction.search({
45
+ project: { id: { $eq: params.transaction.project.id } },
46
+ object: { reservationNumber: { $in: reserveTransactionNumbers } },
47
+ typeOf: factory_1.factory.assetTransactionType.CancelReservation
48
+ }, ['transactionNumber'], []);
49
+ if (deletingCancelReservationTransactions.length > 0) {
50
+ // 予約取消取引も削除(2024-04-18~)
51
+ const deleteCancelReservationResult = await repos.assetTransaction.deleteByTransactionNumber({
52
+ project: { id: params.transaction.project.id },
53
+ transactionNumbers: deletingCancelReservationTransactions.map(({ transactionNumber }) => String(transactionNumber)),
54
+ typeOf: factory_1.factory.assetTransactionType.CancelReservation
55
+ });
56
+ deleteCancelReservationTransactionResult = {
57
+ n: deleteCancelReservationResult?.n,
58
+ ok: deleteCancelReservationResult?.ok,
59
+ deletedCount: deleteCancelReservationResult?.deletedCount
60
+ };
61
+ }
62
+ }
63
+ return { deleteResult, deleteReserveTransactionResult, deleteCancelReservationTransactionResult, reserveTransactionNumbers };
64
+ };
65
+ }
@@ -4,6 +4,8 @@ exports.deleteTransaction = deleteTransaction;
4
4
  /* eslint-disable @typescript-eslint/no-explicit-any */
5
5
  const factory_1 = require("../../factory");
6
6
  const deleteOrder_1 = require("../order/deleteOrder");
7
+ const deletePayTransactionsByPlaceOrder_1 = require("./deleteTransaction/deletePayTransactionsByPlaceOrder");
8
+ const deleteReservationsByPlaceOrder_1 = require("./deleteTransaction/deleteReservationsByPlaceOrder");
7
9
  /**
8
10
  * 取引に関わるリソースを削除する
9
11
  * 冪等性を確保すること
@@ -30,7 +32,6 @@ function deleteTransactionById(params) {
30
32
  if (typeof deletingTransactionId !== 'string' || deletingTransactionId.length === 0) {
31
33
  throw new factory_1.factory.errors.ArgumentNull('object.id');
32
34
  }
33
- // let deletingOrderNumberByTask: string | undefined;
34
35
  let transaction;
35
36
  if (params.object.typeOf === factory_1.factory.transactionType.PlaceOrder) {
36
37
  transaction = (await repos.placeOrder.findPlaceOrderTransactions({
@@ -38,7 +39,6 @@ function deleteTransactionById(params) {
38
39
  typeOf: params.object.typeOf,
39
40
  inclusion: ['typeOf', 'project', 'status']
40
41
  })).shift();
41
- // deletingOrderNumberByTask = params.object.object.orderNumber;
42
42
  }
43
43
  else if (params.object.typeOf === factory_1.factory.transactionType.ReturnOrder) {
44
44
  transaction = (await repos.returnOrder.findReturnOrderTransactions({
@@ -70,7 +70,7 @@ function deleteTransactionById(params) {
70
70
  let deleteCancelReservationTransactionResult;
71
71
  let deletedReservationNumbers = [];
72
72
  let deleteActionResult;
73
- // let deleteMessagessResult: IDeleteResult | undefined;
73
+ let deleteOrderResult;
74
74
  const action = await repos.action.start(actionAttributes);
75
75
  try {
76
76
  const transactionTypeOf = transaction.typeOf;
@@ -90,12 +90,7 @@ function deleteTransactionById(params) {
90
90
  break;
91
91
  case factory_1.factory.transactionStatusType.Confirmed: {
92
92
  // identifierによる削除に変更(2026-06-28~)
93
- // if (typeof deletingOrderNumberByTask === 'string') {
94
- // await deleteOrder({
95
- // object: { orderNumber: deletingOrderNumberByTask }
96
- // })(repos);
97
- // }
98
- await (0, deleteOrder_1.deleteOrder)({
93
+ deleteOrderResult = await (0, deleteOrder_1.deleteOrder)({
99
94
  object: { identifier: transaction.id }
100
95
  })(repos);
101
96
  break;
@@ -104,27 +99,29 @@ function deleteTransactionById(params) {
104
99
  throw new factory_1.factory.errors.NotImplemented(`${transaction.status} not implemented`);
105
100
  }
106
101
  // 決済取引を削除
107
- const deletePayTransactionsByPlaceOrderResult = await deletePayTransactionsByPlaceOrder({ authorizeActions, transaction })(repos);
102
+ const deletePayTransactionsByPlaceOrderResult = await (0, deletePayTransactionsByPlaceOrder_1.deletePayTransactionsByPlaceOrder)({ authorizeActions, transaction })(repos);
108
103
  deletePayTransactionResult = deletePayTransactionsByPlaceOrderResult.deletePayTransactionResult;
109
104
  deleteRefundResult = deletePayTransactionsByPlaceOrderResult.deleteRefundResult;
110
105
  payTransactionNumbers = deletePayTransactionsByPlaceOrderResult.payTransactionNumbers;
111
106
  // 取引上での予約を削除
112
- const deleteReservationsByPlaceOrderResult = await deleteReservationsByPlaceOrder({ authorizeActions, transaction })(repos);
107
+ const deleteReservationsByPlaceOrderResult = await (0, deleteReservationsByPlaceOrder_1.deleteReservationsByPlaceOrder)({ authorizeActions, transaction })(repos);
113
108
  deleteReservationsResult = deleteReservationsByPlaceOrderResult.deleteResult;
114
109
  deleteReserveTransactionResult = deleteReservationsByPlaceOrderResult.deleteReserveTransactionResult;
115
110
  deleteCancelReservationTransactionResult =
116
111
  deleteReservationsByPlaceOrderResult.deleteCancelReservationTransactionResult;
117
112
  deletedReservationNumbers = deleteReservationsByPlaceOrderResult.reserveTransactionNumbers;
118
113
  // アクション削除(2023-05-19~)
119
- deleteActionResult = await repos.action.deleteByPurpose({
114
+ deleteActionResult = await repos.action.deleteActionsByTransactionId({
120
115
  project: { id: transaction.project.id },
121
- purpose: { id: transaction.id, typeOf: transactionTypeOf },
116
+ transaction: { id: transaction.id, typeOf: transactionTypeOf },
122
117
  typeOf: {
123
118
  $in: [
124
- factory_1.factory.actionType.AuthorizeAction,
125
- factory_1.factory.actionType.CheckAction,
126
- factory_1.factory.actionType.InformAction,
127
- factory_1.factory.actionType.OrderAction
119
+ factory_1.factory.actionType.AcceptAction, // オファー採用、決済採用
120
+ factory_1.factory.actionType.AuthorizeAction, // オファー承認、決済承認
121
+ factory_1.factory.actionType.CheckAction, // 決済カード認証
122
+ // factory.actionType.InformAction, // 通知は特になし
123
+ factory_1.factory.actionType.OrderAction, // 注文
124
+ factory_1.factory.actionType.RefundAction // 決済採用返金
128
125
  ]
129
126
  }
130
127
  });
@@ -166,143 +163,9 @@ function deleteTransactionById(params) {
166
163
  deleteCancelReservationTransactionResult,
167
164
  deletedReservationNumbers,
168
165
  deleteActionResult,
166
+ deleteOrderResult // 2026-07-10~
169
167
  // ...(deleteMessagessResult !== undefined) ? { deleteMessagessResult } : undefined
170
168
  };
171
169
  await repos.action.completeWithVoid({ typeOf: action.typeOf, id: action.id, result: actionResult });
172
170
  };
173
171
  }
174
- function deleteReservationsByPlaceOrder(params) {
175
- return async (repos) => {
176
- let deleteResult;
177
- let deleteReserveTransactionResult;
178
- let deleteCancelReservationTransactionResult;
179
- const authorizeActions = params.authorizeActions;
180
- // 予約取引番号を抽出
181
- const authorizeReservationOfferActions = authorizeActions
182
- .filter((a) => {
183
- const pendingTransactionNumber = a.instrument?.transactionNumber;
184
- return a.object.typeOf === factory_1.factory.action.authorize.offer.eventService.ObjectType.SeatReservation
185
- && typeof pendingTransactionNumber === 'string'
186
- && pendingTransactionNumber.length > 0;
187
- });
188
- const reserveTransactionNumbers = authorizeReservationOfferActions
189
- .map((a) => String(a.instrument?.transactionNumber));
190
- if (reserveTransactionNumbers.length > 0) {
191
- // 該当予約番号の予約を削除する(プロジェクトでも絞ること)
192
- const deleteReservationsResult = await repos.reservation.deleteByReservationNumbers({
193
- project: { id: params.transaction.project.id },
194
- reservationNumbers: reserveTransactionNumbers
195
- });
196
- deleteResult = {
197
- n: deleteReservationsResult?.n,
198
- ok: deleteReservationsResult?.ok,
199
- deletedCount: deleteReservationsResult?.deletedCount
200
- };
201
- // 予約取引を削除(プロジェクトでも絞ること)(2022-06-07~)
202
- const deleteAssetTransactionsResult = await repos.assetTransaction.deleteByTransactionNumber({
203
- project: { id: params.transaction.project.id },
204
- transactionNumbers: reserveTransactionNumbers,
205
- typeOf: factory_1.factory.assetTransactionType.Reserve
206
- });
207
- deleteReserveTransactionResult = {
208
- n: deleteAssetTransactionsResult?.n,
209
- ok: deleteAssetTransactionsResult?.ok,
210
- deletedCount: deleteAssetTransactionsResult?.deletedCount
211
- };
212
- // 予約番号で予約取消取引を検索
213
- const deletingCancelReservationTransactions = await repos.assetTransaction.search({
214
- project: { id: { $eq: params.transaction.project.id } },
215
- object: { reservationNumber: { $in: reserveTransactionNumbers } },
216
- typeOf: factory_1.factory.assetTransactionType.CancelReservation
217
- }, ['transactionNumber'], []);
218
- if (deletingCancelReservationTransactions.length > 0) {
219
- // 予約取消取引も削除(2024-04-18~)
220
- const deleteCancelReservationResult = await repos.assetTransaction.deleteByTransactionNumber({
221
- project: { id: params.transaction.project.id },
222
- transactionNumbers: deletingCancelReservationTransactions.map(({ transactionNumber }) => String(transactionNumber)),
223
- typeOf: factory_1.factory.assetTransactionType.CancelReservation
224
- });
225
- deleteCancelReservationTransactionResult = {
226
- n: deleteCancelReservationResult?.n,
227
- ok: deleteCancelReservationResult?.ok,
228
- deletedCount: deleteCancelReservationResult?.deletedCount
229
- };
230
- }
231
- }
232
- return { deleteResult, deleteReserveTransactionResult, deleteCancelReservationTransactionResult, reserveTransactionNumbers };
233
- };
234
- }
235
- function deletePayTransactionsByPlaceOrder(params) {
236
- return async (repos) => {
237
- let deletePayTransactionResult;
238
- let deleteRefundResult;
239
- const authorizeActions = params.authorizeActions;
240
- // 決済取引番号を抽出
241
- const authorizePaymentActions = authorizeActions
242
- .filter((a) => {
243
- const pendingTransactionNumber = a.object?.paymentMethodId;
244
- return a.object.typeOf === factory_1.factory.action.authorize.paymentMethod.any.ResultType.Payment
245
- && typeof pendingTransactionNumber === 'string'
246
- && pendingTransactionNumber.length > 0;
247
- });
248
- const payTransactionNumbers = authorizePaymentActions.map((a) => String(a.object.paymentMethodId));
249
- if (payTransactionNumbers.length > 0) {
250
- // 決済取引を削除(プロジェクトでも絞ること)(2022-06-07~)
251
- const deleteAssetTransactionsResult = await repos.assetTransaction.deleteByTransactionNumber({
252
- project: { id: params.transaction.project.id },
253
- transactionNumbers: payTransactionNumbers,
254
- typeOf: factory_1.factory.assetTransactionType.Pay
255
- });
256
- deletePayTransactionResult = {
257
- n: deleteAssetTransactionsResult?.n,
258
- ok: deleteAssetTransactionsResult?.ok,
259
- deletedCount: deleteAssetTransactionsResult?.deletedCount
260
- };
261
- // 返金取引も削除(2023-05-19~)
262
- const refundTransactions = await repos.assetTransaction.search({
263
- typeOf: factory_1.factory.assetTransactionType.Refund,
264
- object: { paymentMethodId: { $in: payTransactionNumbers } }
265
- }, ['transactionNumber'], []);
266
- if (refundTransactions.length > 0) {
267
- const deleteRefundAssetTransactionsResult = await repos.assetTransaction.deleteByTransactionNumber({
268
- project: { id: params.transaction.project.id },
269
- transactionNumbers: refundTransactions.map(({ transactionNumber }) => transactionNumber),
270
- typeOf: factory_1.factory.assetTransactionType.Refund
271
- });
272
- deleteRefundResult = {
273
- n: deleteRefundAssetTransactionsResult?.n,
274
- ok: deleteRefundAssetTransactionsResult?.ok,
275
- deletedCount: deleteRefundAssetTransactionsResult?.deletedCount
276
- };
277
- }
278
- }
279
- return { deletePayTransactionResult, deleteRefundResult, payTransactionNumbers };
280
- };
281
- }
282
- // function deleteMessagesByPlaceOrder(params: {
283
- // transaction: factory.task.deleteTransaction.IObject;
284
- // }) {
285
- // return async (repos: {
286
- // message: MessageRepo;
287
- // }): Promise<{
288
- // deleteResult?: IDeleteResult;
289
- // }> => {
290
- // let deleteResult: IDeleteResult | undefined;
291
- // if (params.transaction.typeOf === factory.transactionType.PlaceOrder
292
- // && params.transaction.specifyingMethod === factory.action.update.deleteAction.ObjectAsTransactionSpecifyingMethod.Id) {
293
- // const orderNumber = params.transaction.object.orderNumber;
294
- // if (typeof orderNumber === 'string' && orderNumber.length > 0) {
295
- // const deleteReservationsResult = await repos.message.deleteByMainEntityOrderNumber({
296
- // project: { id: params.transaction.project.id },
297
- // mainEntity: { orderNumber }
298
- // });
299
- // deleteResult = {
300
- // n: deleteReservationsResult?.n,
301
- // ok: deleteReservationsResult?.ok,
302
- // deletedCount: deleteReservationsResult?.deletedCount
303
- // };
304
- // }
305
- // }
306
- // return { deleteResult };
307
- // };
308
- // }
@@ -0,0 +1,22 @@
1
+ import type { OfferRepo } from '../../../../repo/offer/unitPriceInCatalog';
2
+ import { factory } from '../../../../factory';
3
+ export type IAuthorizeEventServiceOffer = factory.action.authorize.offer.eventService.IAction;
4
+ type IOrderAcceptedOffer = Pick<factory.order.IAcceptedOffer, 'itemOffered' | 'offeredThrough' | 'serialNumber' | 'priceSpecification' | 'id'>;
5
+ export declare function createAuthorizeOfferResultsExpected(params: {
6
+ authorizeEventServiceOfferActions: Pick<IAuthorizeEventServiceOffer, 'id' | 'result'>[];
7
+ }): Pick<IAuthorizeEventServiceOffer, 'id' | 'result'>[];
8
+ /**
9
+ * 注文ドキュメントと予約取引ドキュメントを参照することによって生成した、単価オファー検証条件
10
+ * 元々オファー承認アクションのresultに保管されていた
11
+ */
12
+ type IPreparedUnitPriceOfferConditions = Pick<IAuthorizeEventServiceOffer, 'id' | 'result'>;
13
+ declare function prepareUnitPriceOfferConditions(params: {
14
+ project: {
15
+ id: string;
16
+ };
17
+ acceptedOffers: IOrderAcceptedOffer[];
18
+ authorizeEventServiceOfferActions: IAuthorizeEventServiceOffer[];
19
+ }): (repos: {
20
+ offer: OfferRepo;
21
+ }) => Promise<IPreparedUnitPriceOfferConditions[]>;
22
+ export { IPreparedUnitPriceOfferConditions, prepareUnitPriceOfferConditions };
@@ -0,0 +1,120 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.createAuthorizeOfferResultsExpected = createAuthorizeOfferResultsExpected;
7
+ exports.prepareUnitPriceOfferConditions = prepareUnitPriceOfferConditions;
8
+ const debug_1 = __importDefault(require("debug"));
9
+ const factory_1 = require("../../../../factory");
10
+ const debug = (0, debug_1.default)('chevre-domain:service:transaction:placeOrder:confirm:prepareUnitPriceOfferConditions');
11
+ function acceptedOffers2authorizeResult(params) {
12
+ const { acceptedOffers4result, unitPriceOffers } = params;
13
+ const programMembershipUsed = acceptedOffers2programMembershipUsed({ acceptedOffers: acceptedOffers4result });
14
+ // オファーIDごとに集計
15
+ const offerIds = [...new Set(acceptedOffers4result.map((o) => String(o.id)))];
16
+ const offers = offerIds.map((offerId) => {
17
+ const acceptedOffer = unitPriceOffers.find(({ id }) => id === offerId);
18
+ if (acceptedOffer === undefined) {
19
+ throw new factory_1.factory.errors.Internal(`acceptedOffer not found [id:${offerId}]`);
20
+ }
21
+ const amountOfThisGood = acceptedOffers4result.filter(({ id }) => id === offerId).length;
22
+ const { acceptedPaymentMethod, priceSpecification } = acceptedOffer;
23
+ const unitPriceSpec = priceSpecification;
24
+ if (unitPriceSpec === undefined) {
25
+ throw new factory_1.factory.errors.Internal(`unitPriceSpec not found [id:${offerId}]`);
26
+ }
27
+ const { eligibleQuantity } = unitPriceSpec;
28
+ return {
29
+ id: offerId,
30
+ includesObject: { amountOfThisGood },
31
+ typeOf: factory_1.factory.offerType.Offer,
32
+ priceSpecification: {
33
+ ...(eligibleQuantity !== undefined) ? { eligibleQuantity } : undefined,
34
+ },
35
+ ...(acceptedPaymentMethod !== undefined) ? { acceptedPaymentMethod } : undefined
36
+ };
37
+ });
38
+ return {
39
+ // amount: [], // discontinue(2026-07-06~)
40
+ itemOffered: {
41
+ serviceOutput: { programMembershipUsed } // add programMembershipUsed required(2024-08-15~)
42
+ },
43
+ offers
44
+ };
45
+ }
46
+ function acceptedOffers2programMembershipUsed(params) {
47
+ const programMembershipUsed = [];
48
+ const permitIdentifiers = [];
49
+ params.acceptedOffers.forEach(({ itemOffered }) => {
50
+ if (itemOffered.programMembershipUsed?.typeOf === factory_1.factory.programMembership.ProgramMembershipType.ProgramMembership) {
51
+ // メンバーシップコードに対してユニークに集計
52
+ if (!permitIdentifiers.includes(itemOffered.programMembershipUsed.identifier)) {
53
+ permitIdentifiers.push(itemOffered.programMembershipUsed.identifier);
54
+ const issuedThroughTypeOf = itemOffered.programMembershipUsed.issuedThrough.typeOf;
55
+ if (issuedThroughTypeOf === factory_1.factory.service.paymentService.PaymentServiceType.FaceToFace) {
56
+ programMembershipUsed.push({
57
+ typeOf: factory_1.factory.permit.PermitType.Permit,
58
+ identifier: itemOffered.programMembershipUsed.identifier,
59
+ issuedThrough: { typeOf: issuedThroughTypeOf }
60
+ });
61
+ }
62
+ else {
63
+ programMembershipUsed.push({
64
+ typeOf: factory_1.factory.permit.PermitType.Permit,
65
+ identifier: itemOffered.programMembershipUsed.identifier,
66
+ issuedThrough: { typeOf: issuedThroughTypeOf, id: itemOffered.programMembershipUsed.issuedThrough.id }
67
+ });
68
+ }
69
+ }
70
+ }
71
+ });
72
+ return programMembershipUsed;
73
+ }
74
+ function createAuthorizeOfferResultsExpected(params) {
75
+ return params.authorizeEventServiceOfferActions.map((a) => {
76
+ return {
77
+ id: a.id,
78
+ result: a.result
79
+ };
80
+ });
81
+ }
82
+ function prepareUnitPriceOfferConditions(params) {
83
+ return async (repos) => {
84
+ // COAの場合は単価オファーを参照せずにそのまま返す
85
+ const isCOA = params.authorizeEventServiceOfferActions.some((action) => action.instrument.typeOf === factory_1.factory.assetTransactionType.COAReserveTransaction);
86
+ if (isCOA) {
87
+ return params.authorizeEventServiceOfferActions.map(({ id, result }) => ({ id, result }));
88
+ }
89
+ const conditions = [];
90
+ const offerIds = [...new Set(params.acceptedOffers.map((o) => String(o.id)))];
91
+ const unitPriceOffers = await repos.offer.search({
92
+ id: { $in: offerIds }
93
+ }, {
94
+ acceptedPaymentMethod: 1,
95
+ priceSpecification: 1,
96
+ });
97
+ debug('unitPriceOffers:', unitPriceOffers);
98
+ for (const authorizeEventServiceOfferAction of params.authorizeEventServiceOfferActions) {
99
+ if (authorizeEventServiceOfferAction.result === undefined) {
100
+ throw new Error('authorizeEventServiceOfferAction.result should exist');
101
+ }
102
+ const acceptedOffers4action = params.acceptedOffers.filter(((offer) => {
103
+ return offer.serialNumber === authorizeEventServiceOfferAction.instrument.transactionNumber;
104
+ }));
105
+ conditions.push({
106
+ id: authorizeEventServiceOfferAction.id,
107
+ result: {
108
+ typeOf: authorizeEventServiceOfferAction.result.typeOf,
109
+ // priceCurrency: authorizeEventServiceOfferAction.result.priceCurrency,
110
+ price: authorizeEventServiceOfferAction.result.price,
111
+ ...acceptedOffers2authorizeResult({
112
+ acceptedOffers4result: acceptedOffers4action,
113
+ unitPriceOffers
114
+ })
115
+ }
116
+ });
117
+ }
118
+ return conditions;
119
+ };
120
+ }
@@ -1,6 +1,10 @@
1
1
  import { factory } from '../../../../../factory';
2
2
  export type IAcceptPayAction = Pick<factory.action.accept.pay.IAction, 'object' | 'result' | 'endDate'>;
3
- export type IAuthorizeEventServiceOffer = factory.action.authorize.offer.eventService.IAction;
3
+ export type IAuthorizeEventServiceOffer = factory.action.authorize.offer.eventService.IAction & {
4
+ result?: factory.action.authorize.offer.eventService.IResult & {
5
+ onlyPrice?: boolean;
6
+ };
7
+ };
4
8
  export type IAuthorizePaymentAction = Pick<factory.action.authorize.paymentMethod.any.IAction, 'id' | 'result' | 'endDate'> & {
5
9
  object: Pick<factory.action.authorize.paymentMethod.any.IObject, 'typeOf' | 'paymentMethodId'>;
6
10
  instrument?: never;
@@ -1,11 +1,16 @@
1
1
  import { factory } from '../../../../factory';
2
2
  import { PlaceOrderFactory } from '../../../../factory/transaction';
3
+ import { IPreparedUnitPriceOfferConditions } from './prepareUnitPriceOfferConditions';
3
4
  import { IAcceptPayAction, IAuthorizeEventServiceOffer, IAuthorizePaymentAction, IPayTransaction } from './validation/factory';
4
5
  export { IAcceptPayAction, IAuthorizeEventServiceOffer, IAuthorizePaymentAction, IPayTransaction };
5
6
  /**
6
7
  * 取引が確定可能な状態かどうかをチェックする
7
8
  */
8
- export declare function validateTransaction(transaction: Pick<factory.transaction.placeOrder.ITransaction, 'id' | 'object'>, acceptPayActions: IAcceptPayAction[], authorizePaymentActions: IAuthorizePaymentAction[], authorizeEventServiceOfferActions: Pick<IAuthorizeEventServiceOffer, 'id' | 'result'>[], eventReservationAcceptedOffers: Pick<factory.order.IAcceptedOffer, 'itemOffered' | 'priceSpecification'>[], payTransactions: IPayTransaction[], customer: factory.order.ICustomer): void;
9
+ export declare function validateTransaction(transaction: {
10
+ id: string;
11
+ }, acceptPayActions: IAcceptPayAction[], authorizePaymentActions: IAuthorizePaymentAction[], authorizeEventServiceOfferActions: Pick<IAuthorizeEventServiceOffer, 'id' | 'result'>[], eventReservationAcceptedOffers: Pick<factory.order.IAcceptedOffer, 'itemOffered' | 'priceSpecification'>[], payTransactions: IPayTransaction[], customer: factory.order.ICustomer, options: {
12
+ paymentMethodIdByTransaction?: string;
13
+ }): void;
9
14
  /**
10
15
  * 注文オファー数検証
11
16
  */
@@ -35,9 +40,16 @@ export declare function validatePaymentMethods(params: {
35
40
  * 興行オファー適用条件確認
36
41
  */
37
42
  export declare function validateEventOffers(params: {
43
+ project: {
44
+ id: string;
45
+ };
38
46
  order: {
39
47
  price: number;
40
48
  };
41
49
  paymentMethods: factory.order.IReferencedInvoice[];
42
- authorizeEventServiceOfferActions: Pick<IAuthorizeEventServiceOffer, 'id' | 'instrument' | 'object' | 'result'>[];
50
+ /**
51
+ * 承認アクションのresultに条件が保管されているはず(2026-07-06時点で)
52
+ */
53
+ authorizeOfferActions: Pick<IAuthorizeEventServiceOffer, 'id' | 'result'>[];
54
+ unitPriceOfferConditions?: IPreparedUnitPriceOfferConditions[];
43
55
  }): void;