@chevre/domain 21.37.0-alpha.8 → 21.37.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 (73) hide show
  1. package/example/src/chevre/processOrder.ts +87 -0
  2. package/example/src/chevre/transaction/processPlaceOrder.ts +17 -143
  3. package/lib/chevre/factory/reservedAgentIdentifireNames.js +2 -1
  4. package/lib/chevre/factory/transaction.d.ts +1 -4
  5. package/lib/chevre/repo/passport.d.ts +39 -0
  6. package/lib/chevre/repo/passport.js +134 -0
  7. package/lib/chevre/repo/task.d.ts +9 -0
  8. package/lib/chevre/repo/task.js +23 -2
  9. package/lib/chevre/repository.d.ts +5 -0
  10. package/lib/chevre/repository.js +15 -2
  11. package/lib/chevre/service/accountTransaction/deposit.js +0 -1
  12. package/lib/chevre/service/accountTransaction/transfer.js +0 -1
  13. package/lib/chevre/service/accountTransaction/withdraw.js +0 -1
  14. package/lib/chevre/service/assetTransaction/reserve/cancel.d.ts +22 -0
  15. package/lib/chevre/service/assetTransaction/reserve/cancel.js +41 -0
  16. package/lib/chevre/service/assetTransaction/reserve/confirm/factory.d.ts +8 -0
  17. package/lib/chevre/service/assetTransaction/reserve/confirm/factory.js +94 -0
  18. package/lib/chevre/service/assetTransaction/reserve/confirm.d.ts +19 -0
  19. package/lib/chevre/service/assetTransaction/reserve/confirm.js +93 -0
  20. package/lib/chevre/service/assetTransaction/reserve/exportTasksById.d.ts +15 -0
  21. package/lib/chevre/service/assetTransaction/reserve/exportTasksById.js +99 -0
  22. package/lib/chevre/service/assetTransaction/reserve/start/createSubReservations.d.ts +28 -0
  23. package/lib/chevre/service/assetTransaction/reserve/start/createSubReservations.js +405 -0
  24. package/lib/chevre/service/assetTransaction/reserve/start/factory/createPointAward.d.ts +15 -0
  25. package/lib/chevre/service/assetTransaction/reserve/start/factory/createPointAward.js +40 -0
  26. package/lib/chevre/service/assetTransaction/reserve/start/factory/createReservation.d.ts +54 -0
  27. package/lib/chevre/service/assetTransaction/reserve/{factory.js → start/factory/createReservation.js} +3 -222
  28. package/lib/chevre/service/assetTransaction/reserve/start/factory/createStartParams.d.ts +22 -0
  29. package/lib/chevre/service/assetTransaction/reserve/start/factory/createStartParams.js +90 -0
  30. package/lib/chevre/service/assetTransaction/reserve/{factory → start/factory}/price.d.ts +1 -1
  31. package/lib/chevre/service/assetTransaction/reserve/{factory → start/factory}/price.js +1 -1
  32. package/lib/chevre/service/assetTransaction/reserve/start.d.ts +74 -0
  33. package/lib/chevre/service/assetTransaction/reserve/start.js +570 -0
  34. package/lib/chevre/service/assetTransaction/reserve.d.ts +6 -128
  35. package/lib/chevre/service/assetTransaction/reserve.js +9 -1047
  36. package/lib/chevre/service/offer/event/{defaultOffer.d.ts → authorize/defaultOffer.d.ts} +1 -1
  37. package/lib/chevre/service/offer/event/{defaultOffer.js → authorize/defaultOffer.js} +1 -1
  38. package/lib/chevre/service/offer/event/{factory.d.ts → authorize/factory.d.ts} +13 -20
  39. package/lib/chevre/service/offer/event/{factory.js → authorize/factory.js} +72 -146
  40. package/lib/chevre/service/offer/event/{processStartReserve4chevre.d.ts → authorize/processStartReserve4chevre.d.ts} +19 -19
  41. package/lib/chevre/service/offer/event/{processStartReserve4chevre.js → authorize/processStartReserve4chevre.js} +8 -13
  42. package/lib/chevre/service/offer/event/authorize.d.ts +1 -1
  43. package/lib/chevre/service/offer/event/authorize.js +104 -128
  44. package/lib/chevre/service/offer/event/importFromCOA/factory.d.ts +9 -0
  45. package/lib/chevre/service/offer/event/importFromCOA/factory.js +67 -0
  46. package/lib/chevre/service/offer/event/importFromCOA.js +1 -1
  47. package/lib/chevre/service/offer/eventServiceByCOA/authorize.js +0 -3
  48. package/lib/chevre/service/offer/eventServiceByCOA/factory.d.ts +3 -3
  49. package/lib/chevre/service/order/onOrderStatusChanged/onOrderProcessing/factory.d.ts +4 -4
  50. package/lib/chevre/service/order/onOrderStatusChanged/onOrderProcessing/processOrder.d.ts +16 -0
  51. package/lib/chevre/service/order/onOrderStatusChanged/onOrderProcessing/processOrder.js +168 -0
  52. package/lib/chevre/service/order/onOrderStatusChanged/onOrderProcessing.d.ts +4 -5
  53. package/lib/chevre/service/order/onOrderStatusChanged/onOrderProcessing.js +4 -135
  54. package/lib/chevre/service/order/onOrderStatusChanged.d.ts +2 -2
  55. package/lib/chevre/service/order/onOrderStatusChanged.js +2 -1
  56. package/lib/chevre/service/order.d.ts +2 -2
  57. package/lib/chevre/service/order.js +2 -1
  58. package/lib/chevre/service/transaction/moneyTransfer.d.ts +3 -2
  59. package/lib/chevre/service/transaction/moneyTransfer.js +1 -2
  60. package/lib/chevre/service/transaction/placeOrderInProgress/start/factory.d.ts +10 -0
  61. package/lib/chevre/service/transaction/placeOrderInProgress/start/factory.js +36 -0
  62. package/lib/chevre/service/transaction/placeOrderInProgress/start.d.ts +6 -1
  63. package/lib/chevre/service/transaction/placeOrderInProgress/start.js +26 -12
  64. package/lib/chevre/service/validation/validateOrder.js +1 -1
  65. package/lib/chevre/settings.d.ts +1 -0
  66. package/lib/chevre/settings.js +5 -1
  67. package/package.json +3 -3
  68. package/example/src/chevre/migrateAuthorizeEventServiceOfferResult.ts +0 -163
  69. package/lib/chevre/service/assetTransaction/reserve/factory.d.ts +0 -96
  70. package/lib/chevre/service/transaction/placeOrderInProgress/factory.d.ts +0 -2
  71. package/lib/chevre/service/transaction/placeOrderInProgress/factory.js +0 -29
  72. package/lib/chevre/service/transaction/validation.d.ts +0 -14
  73. package/lib/chevre/service/transaction/validation.js +0 -101
@@ -0,0 +1,168 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.processOrder = void 0;
13
+ /**
14
+ * 注文処理時処理
15
+ */
16
+ const createDebug = require("debug");
17
+ const util = require("util");
18
+ const factory = require("../../../../factory");
19
+ const settings_1 = require("../../../../settings");
20
+ const factory_1 = require("./factory");
21
+ const debug = createDebug('chevre-domain:service:order');
22
+ function processOrder(params) {
23
+ return (repos) => __awaiter(this, void 0, void 0, function* () {
24
+ const simpleOrder = {
25
+ typeOf: params.order.typeOf,
26
+ // seller: {
27
+ // id: params.order.seller.id,
28
+ // typeOf: params.order.seller.typeOf,
29
+ // name: params.order.seller.name
30
+ // }, // 廃止(2024-03-06~)
31
+ // customer: { typeOf: maskedCustomer.typeOf, id: maskedCustomer.id }, // 廃止(2024-03-06~)
32
+ orderNumber: params.order.orderNumber,
33
+ // price: params.order.price,
34
+ // priceCurrency: params.order.priceCurrency,
35
+ orderDate: params.order.orderDate
36
+ };
37
+ if (params.order.itemOfferedTypeOf === factory.actionType.MoneyTransfer) {
38
+ yield createConfirmMoneyTransferTasksIfNotExist(params.order, simpleOrder)(repos);
39
+ }
40
+ else if (params.order.itemOfferedTypeOf === factory.reservationType.BusReservation
41
+ || params.order.itemOfferedTypeOf === factory.reservationType.EventReservation) {
42
+ // 冗長なconfirmReserveTransactionタスク作成を回避(2023-08-25~)
43
+ yield createConfirmReserveTransactionTasksIfNotExist(params.order, simpleOrder, params.options)(repos);
44
+ }
45
+ else if (params.order.itemOfferedTypeOf === factory.permit.PermitType.Permit) {
46
+ yield createConfirmRegisterServiceTasksIfNotExist(params.order, simpleOrder)(repos);
47
+ }
48
+ });
49
+ }
50
+ exports.processOrder = processOrder;
51
+ function createConfirmReserveTransactionTasksIfNotExist(order, simpleOrder, options) {
52
+ return (repos) => __awaiter(this, void 0, void 0, function* () {
53
+ const taskRunsAt = new Date();
54
+ const taskRunsAt4coa = new Date();
55
+ let confirmObjects;
56
+ if (order.offeredThroughIdentifier === factory.service.webAPI.Identifier.COA) {
57
+ confirmObjects = (0, factory_1.createConfirmReservationActionObject4COAByOrder)({ order });
58
+ }
59
+ else {
60
+ confirmObjects = (0, factory_1.createConfirmReservationActionObject4ChevreByOrder)({ order });
61
+ }
62
+ yield Promise.all(confirmObjects.map((confirmObject) => __awaiter(this, void 0, void 0, function* () {
63
+ const data = {
64
+ project: order.project,
65
+ typeOf: factory.actionType.ConfirmAction,
66
+ object: confirmObject,
67
+ agent: order.project,
68
+ purpose: simpleOrder
69
+ // instrument廃止(2024-03-13~)
70
+ // instrument: {
71
+ // typeOf: 'WebAPI',
72
+ // identifier: (confirmObject.typeOf === factory.assetTransactionType.COAReserveTransaction)
73
+ // ? factory.service.webAPI.Identifier.COA
74
+ // : factory.service.webAPI.Identifier.Chevre
75
+ // }
76
+ };
77
+ const taskIdentifier = util.format('%s:%s:%s:%s:%s:%s', data.project.id, factory.taskName.ConfirmReserveTransaction, data.purpose.typeOf, data.purpose.orderNumber, data.object.typeOf, data.object.transactionNumber);
78
+ const confirmReserveTransactionTask = {
79
+ identifier: taskIdentifier,
80
+ project: order.project,
81
+ name: factory.taskName.ConfirmReserveTransaction,
82
+ status: factory.taskStatus.Ready,
83
+ runsAt: (confirmObject.typeOf === factory.assetTransactionType.COAReserveTransaction) ? taskRunsAt4coa : taskRunsAt,
84
+ remainingNumberOfTries: settings_1.NUM_TRY_CONFIRM_RESERVE_TRANSACTION,
85
+ numberOfTried: 0,
86
+ executionResults: [],
87
+ data
88
+ };
89
+ yield repos.task.createIfNotExistByIdentifier(confirmReserveTransactionTask, { emitImmediately: true });
90
+ if (options.force === true) {
91
+ const existingTask = yield repos.task.findByIdentifier({
92
+ identifier: taskIdentifier,
93
+ name: confirmReserveTransactionTask.name,
94
+ project: { id: confirmReserveTransactionTask.project.id }
95
+ });
96
+ if (typeof (existingTask === null || existingTask === void 0 ? void 0 : existingTask.id) === 'string') {
97
+ const retryResult = yield repos.task.retryForciblyIfAborted({
98
+ id: existingTask.id,
99
+ remainingNumberOfTries: settings_1.NUM_TRY_CONFIRM_RESERVE_TRANSACTION
100
+ });
101
+ debug('retryResult:', retryResult, 'taskIdentifier:', taskIdentifier);
102
+ }
103
+ }
104
+ })));
105
+ });
106
+ }
107
+ function createConfirmMoneyTransferTasksIfNotExist(order, simpleOrder) {
108
+ return (repos) => __awaiter(this, void 0, void 0, function* () {
109
+ const taskRunsAt = new Date();
110
+ yield Promise.all(order.serialNumbers.map((moneyTransferTransactionNumber) => __awaiter(this, void 0, void 0, function* () {
111
+ const data = {
112
+ project: order.project,
113
+ typeOf: factory.actionType.ConfirmAction,
114
+ object: {
115
+ // pendingTransaction: { id: '' }, // 空文字であれば、transactionNumberで処理される
116
+ transactionNumber: moneyTransferTransactionNumber,
117
+ typeOf: factory.assetTransactionType.MoneyTransfer
118
+ },
119
+ agent: order.project,
120
+ purpose: simpleOrder
121
+ };
122
+ const taskIdentifier = util.format('%s:%s:%s:%s:%s:%s', data.project.id, factory.taskName.ConfirmMoneyTransfer, data.purpose.typeOf, simpleOrder.orderNumber, data.object.typeOf, data.object.transactionNumber);
123
+ const confirmMoneyTransferTransactionTask = {
124
+ identifier: taskIdentifier,
125
+ project: order.project,
126
+ name: factory.taskName.ConfirmMoneyTransfer,
127
+ status: factory.taskStatus.Ready,
128
+ runsAt: taskRunsAt,
129
+ remainingNumberOfTries: 10,
130
+ numberOfTried: 0,
131
+ executionResults: [],
132
+ data
133
+ };
134
+ yield repos.task.createIfNotExistByIdentifier(confirmMoneyTransferTransactionTask, { emitImmediately: true });
135
+ })));
136
+ });
137
+ }
138
+ function createConfirmRegisterServiceTasksIfNotExist(order, simpleOrder) {
139
+ return (repos) => __awaiter(this, void 0, void 0, function* () {
140
+ const taskRunsAt = new Date();
141
+ yield Promise.all(order.serialNumbers.map((registerServiceTransactionNumber) => __awaiter(this, void 0, void 0, function* () {
142
+ const data = {
143
+ project: order.project,
144
+ typeOf: factory.actionType.ConfirmAction,
145
+ object: {
146
+ endDate: order.orderDate,
147
+ transactionNumber: registerServiceTransactionNumber,
148
+ typeOf: factory.assetTransactionType.RegisterService
149
+ },
150
+ agent: order.project,
151
+ purpose: simpleOrder
152
+ };
153
+ const taskIdentifier = util.format('%s:%s:%s:%s:%s:%s', data.project.id, factory.taskName.ConfirmRegisterService, data.purpose.typeOf, simpleOrder.orderNumber, data.object.typeOf, data.object.transactionNumber);
154
+ const confirmRegisterServiceTask = {
155
+ identifier: taskIdentifier,
156
+ project: order.project,
157
+ name: factory.taskName.ConfirmRegisterService,
158
+ status: factory.taskStatus.Ready,
159
+ runsAt: taskRunsAt,
160
+ remainingNumberOfTries: 10,
161
+ numberOfTried: 0,
162
+ executionResults: [],
163
+ data
164
+ };
165
+ yield repos.task.createIfNotExistByIdentifier(confirmRegisterServiceTask, { emitImmediately: true });
166
+ })));
167
+ });
168
+ }
@@ -1,11 +1,10 @@
1
1
  import type { MongoRepository as TaskRepo } from '../../../repo/task';
2
2
  import * as factory from '../../../factory';
3
- import { IExternalOrder } from './onOrderProcessing/factory';
3
+ import { IExternalOrder, IProcessingOrder } from './onOrderProcessing/factory';
4
+ import { processOrder } from './onOrderProcessing/processOrder';
4
5
  type IPlaceOrderTransaction = Pick<factory.transaction.placeOrder.ITransaction, 'id' | 'typeOf' | 'potentialActions'>;
5
6
  declare function onOrderProcessing(params: {
6
- order: Omit<factory.order.IOrder, 'orderStatus'> & {
7
- orderStatus: factory.orderStatus.OrderProcessing;
8
- numAcceptedOffers: number;
7
+ order: IProcessingOrder & {
9
8
  itemOfferedTypeOf: factory.order.IItemOffered['typeOf'];
10
9
  serialNumbers: string[];
11
10
  offeredThroughIdentifier?: factory.service.webAPI.Identifier;
@@ -14,4 +13,4 @@ declare function onOrderProcessing(params: {
14
13
  }): (repos: {
15
14
  task: TaskRepo;
16
15
  }) => Promise<void>;
17
- export { IExternalOrder, onOrderProcessing };
16
+ export { IExternalOrder, onOrderProcessing, processOrder };
@@ -9,16 +9,17 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  });
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.onOrderProcessing = void 0;
12
+ exports.processOrder = exports.onOrderProcessing = void 0;
13
13
  /**
14
14
  * 注文処理時処理
15
15
  */
16
16
  const createDebug = require("debug");
17
- const util = require("util");
18
17
  const factory = require("../../../factory");
19
18
  const settings_1 = require("../../../settings");
20
19
  const createSendEmailMessageTaskIfNotExist_1 = require("./onOrderProcessing/createSendEmailMessageTaskIfNotExist");
21
20
  const factory_1 = require("./onOrderProcessing/factory");
21
+ const processOrder_1 = require("./onOrderProcessing/processOrder");
22
+ Object.defineProperty(exports, "processOrder", { enumerable: true, get: function () { return processOrder_1.processOrder; } });
22
23
  const debug = createDebug('chevre-domain:service:order');
23
24
  function onOrderProcessing(params) {
24
25
  return (repos) => __awaiter(this, void 0, void 0, function* () {
@@ -27,20 +28,6 @@ function onOrderProcessing(params) {
27
28
  let tasks = [];
28
29
  const sendEmailMessageByOrderPotentialActions = (_f = (_e = (_d = (_c = (_b = (_a = params.placeOrderTransaction) === null || _a === void 0 ? void 0 : _a.potentialActions) === null || _b === void 0 ? void 0 : _b.order) === null || _c === void 0 ? void 0 : _c.potentialActions) === null || _d === void 0 ? void 0 : _d.sendOrder) === null || _e === void 0 ? void 0 : _e.potentialActions) === null || _f === void 0 ? void 0 : _f.sendEmailMessage;
29
30
  const sendEmailMessageByOnOrderProcessing = (_k = (_j = (_h = (_g = params.placeOrderTransaction) === null || _g === void 0 ? void 0 : _g.potentialActions) === null || _h === void 0 ? void 0 : _h.order) === null || _j === void 0 ? void 0 : _j.onOrderProcessing) === null || _k === void 0 ? void 0 : _k.sendEmailMessage;
30
- // const maskedCustomer = createMaskedCustomer(params.order, { noProfile: true });
31
- const simpleOrder = {
32
- typeOf: params.order.typeOf,
33
- // seller: {
34
- // id: params.order.seller.id,
35
- // typeOf: params.order.seller.typeOf,
36
- // name: params.order.seller.name
37
- // }, // 廃止(2024-03-06~)
38
- // customer: { typeOf: maskedCustomer.typeOf, id: maskedCustomer.id }, // 廃止(2024-03-06~)
39
- orderNumber: params.order.orderNumber,
40
- // price: params.order.price,
41
- // priceCurrency: params.order.priceCurrency,
42
- orderDate: params.order.orderDate
43
- };
44
31
  switch (params.order.orderStatus) {
45
32
  case factory.orderStatus.OrderProcessing:
46
33
  tasks = [
@@ -54,21 +41,7 @@ function onOrderProcessing(params) {
54
41
  yield repos.task.saveMany(tasks, { emitImmediately: true });
55
42
  switch (params.order.orderStatus) {
56
43
  case factory.orderStatus.OrderProcessing:
57
- if (params.order.itemOfferedTypeOf === factory.actionType.MoneyTransfer) {
58
- yield createConfirmMoneyTransferTasksIfNotExist(params.order, simpleOrder)(repos);
59
- }
60
- else if (params.order.itemOfferedTypeOf === factory.reservationType.BusReservation
61
- || params.order.itemOfferedTypeOf === factory.reservationType.EventReservation) {
62
- // 冗長なconfirmReserveTransactionタスク作成を回避(2023-08-25~)
63
- yield createConfirmReserveTransactionTasksIfNotExist(params.order, simpleOrder)(repos);
64
- }
65
- else if (params.order.itemOfferedTypeOf === factory.permit.PermitType.Permit) {
66
- yield createConfirmRegisterServiceTasksIfNotExist(params.order, simpleOrder)(repos);
67
- }
68
- // 完全廃止(2024-03-12~)
69
- // await createGivePointAwardTaskIfNotExist({
70
- // potentialActions: params.placeOrderTransaction?.potentialActions?.order?.potentialActions
71
- // })(repos);
44
+ yield (0, processOrder_1.processOrder)({ order: params.order, options: { force: false } })(repos);
72
45
  // OrderProcessingにおけるEメール送信に対応(2024-01-17~)
73
46
  yield (0, createSendEmailMessageTaskIfNotExist_1.createSendEmailMessageTaskIfNotExist)({
74
47
  sendEmailMessage: [
@@ -83,107 +56,3 @@ function onOrderProcessing(params) {
83
56
  });
84
57
  }
85
58
  exports.onOrderProcessing = onOrderProcessing;
86
- function createConfirmReserveTransactionTasksIfNotExist(order, simpleOrder) {
87
- return (repos) => __awaiter(this, void 0, void 0, function* () {
88
- const taskRunsAt = new Date();
89
- const taskRunsAt4coa = new Date();
90
- let confirmObjects;
91
- if (order.offeredThroughIdentifier === factory.service.webAPI.Identifier.COA) {
92
- confirmObjects = (0, factory_1.createConfirmReservationActionObject4COAByOrder)({ order });
93
- }
94
- else {
95
- confirmObjects = (0, factory_1.createConfirmReservationActionObject4ChevreByOrder)({ order });
96
- }
97
- yield Promise.all(confirmObjects.map((confirmObject) => __awaiter(this, void 0, void 0, function* () {
98
- const data = {
99
- project: order.project,
100
- typeOf: factory.actionType.ConfirmAction,
101
- object: confirmObject,
102
- agent: order.project,
103
- purpose: simpleOrder
104
- // instrument廃止(2024-03-13~)
105
- // instrument: {
106
- // typeOf: 'WebAPI',
107
- // identifier: (confirmObject.typeOf === factory.assetTransactionType.COAReserveTransaction)
108
- // ? factory.service.webAPI.Identifier.COA
109
- // : factory.service.webAPI.Identifier.Chevre
110
- // }
111
- };
112
- const taskIdentifier = util.format('%s:%s:%s:%s:%s:%s', data.project.id, factory.taskName.ConfirmReserveTransaction, data.purpose.typeOf, data.purpose.orderNumber, data.object.typeOf, data.object.transactionNumber);
113
- const confirmReserveTransactionTask = {
114
- identifier: taskIdentifier,
115
- project: order.project,
116
- name: factory.taskName.ConfirmReserveTransaction,
117
- status: factory.taskStatus.Ready,
118
- runsAt: (confirmObject.typeOf === factory.assetTransactionType.COAReserveTransaction) ? taskRunsAt4coa : taskRunsAt,
119
- remainingNumberOfTries: 10,
120
- numberOfTried: 0,
121
- executionResults: [],
122
- data
123
- };
124
- yield repos.task.createIfNotExistByIdentifier(confirmReserveTransactionTask, { emitImmediately: true });
125
- })));
126
- });
127
- }
128
- function createConfirmMoneyTransferTasksIfNotExist(order, simpleOrder) {
129
- return (repos) => __awaiter(this, void 0, void 0, function* () {
130
- const taskRunsAt = new Date();
131
- yield Promise.all(order.serialNumbers.map((moneyTransferTransactionNumber) => __awaiter(this, void 0, void 0, function* () {
132
- const data = {
133
- project: order.project,
134
- typeOf: factory.actionType.ConfirmAction,
135
- object: {
136
- // pendingTransaction: { id: '' }, // 空文字であれば、transactionNumberで処理される
137
- transactionNumber: moneyTransferTransactionNumber,
138
- typeOf: factory.assetTransactionType.MoneyTransfer
139
- },
140
- agent: order.project,
141
- purpose: simpleOrder
142
- };
143
- const taskIdentifier = util.format('%s:%s:%s:%s:%s:%s', data.project.id, factory.taskName.ConfirmMoneyTransfer, data.purpose.typeOf, simpleOrder.orderNumber, data.object.typeOf, data.object.transactionNumber);
144
- const confirmMoneyTransferTransactionTask = {
145
- identifier: taskIdentifier,
146
- project: order.project,
147
- name: factory.taskName.ConfirmMoneyTransfer,
148
- status: factory.taskStatus.Ready,
149
- runsAt: taskRunsAt,
150
- remainingNumberOfTries: 10,
151
- numberOfTried: 0,
152
- executionResults: [],
153
- data
154
- };
155
- yield repos.task.createIfNotExistByIdentifier(confirmMoneyTransferTransactionTask, { emitImmediately: true });
156
- })));
157
- });
158
- }
159
- function createConfirmRegisterServiceTasksIfNotExist(order, simpleOrder) {
160
- return (repos) => __awaiter(this, void 0, void 0, function* () {
161
- const taskRunsAt = new Date();
162
- yield Promise.all(order.serialNumbers.map((registerServiceTransactionNumber) => __awaiter(this, void 0, void 0, function* () {
163
- const data = {
164
- project: order.project,
165
- typeOf: factory.actionType.ConfirmAction,
166
- object: {
167
- endDate: order.orderDate,
168
- transactionNumber: registerServiceTransactionNumber,
169
- typeOf: factory.assetTransactionType.RegisterService
170
- },
171
- agent: order.project,
172
- purpose: simpleOrder
173
- };
174
- const taskIdentifier = util.format('%s:%s:%s:%s:%s:%s', data.project.id, factory.taskName.ConfirmRegisterService, data.purpose.typeOf, simpleOrder.orderNumber, data.object.typeOf, data.object.transactionNumber);
175
- const confirmRegisterServiceTask = {
176
- identifier: taskIdentifier,
177
- project: order.project,
178
- name: factory.taskName.ConfirmRegisterService,
179
- status: factory.taskStatus.Ready,
180
- runsAt: taskRunsAt,
181
- remainingNumberOfTries: 10,
182
- numberOfTried: 0,
183
- executionResults: [],
184
- data
185
- };
186
- yield repos.task.createIfNotExistByIdentifier(confirmRegisterServiceTask, { emitImmediately: true });
187
- })));
188
- });
189
- }
@@ -6,6 +6,6 @@ import { onOrderDelivered } from './onOrderStatusChanged/onOrderDelivered';
6
6
  import { onOrderDeliveredPartially } from './onOrderStatusChanged/onOrderDeliveredPartially';
7
7
  import { onOrderInTransit } from './onOrderStatusChanged/onOrderInTransit';
8
8
  import { onOrderPaymentDue } from './onOrderStatusChanged/onOrderPaymentDue';
9
- import { IExternalOrder, onOrderProcessing } from './onOrderStatusChanged/onOrderProcessing';
9
+ import { IExternalOrder, onOrderProcessing, processOrder } from './onOrderStatusChanged/onOrderProcessing';
10
10
  import { onOrderReturned } from './onOrderStatusChanged/onOrderReturned';
11
- export { IExternalOrder, onOrderCancelled, onOrderDelivered, onOrderDeliveredPartially, onOrderInTransit, onOrderPaymentDue, onOrderProcessing, onOrderReturned };
11
+ export { IExternalOrder, onOrderCancelled, onOrderDelivered, onOrderDeliveredPartially, onOrderInTransit, onOrderPaymentDue, onOrderProcessing, onOrderReturned, processOrder };
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.onOrderReturned = exports.onOrderProcessing = exports.onOrderPaymentDue = exports.onOrderInTransit = exports.onOrderDeliveredPartially = exports.onOrderDelivered = exports.onOrderCancelled = void 0;
3
+ exports.processOrder = exports.onOrderReturned = exports.onOrderProcessing = exports.onOrderPaymentDue = exports.onOrderInTransit = exports.onOrderDeliveredPartially = exports.onOrderDelivered = exports.onOrderCancelled = void 0;
4
4
  /**
5
5
  * 注文ステータス変更時処理
6
6
  */
@@ -16,5 +16,6 @@ const onOrderPaymentDue_1 = require("./onOrderStatusChanged/onOrderPaymentDue");
16
16
  Object.defineProperty(exports, "onOrderPaymentDue", { enumerable: true, get: function () { return onOrderPaymentDue_1.onOrderPaymentDue; } });
17
17
  const onOrderProcessing_1 = require("./onOrderStatusChanged/onOrderProcessing");
18
18
  Object.defineProperty(exports, "onOrderProcessing", { enumerable: true, get: function () { return onOrderProcessing_1.onOrderProcessing; } });
19
+ Object.defineProperty(exports, "processOrder", { enumerable: true, get: function () { return onOrderProcessing_1.processOrder; } });
19
20
  const onOrderReturned_1 = require("./onOrderStatusChanged/onOrderReturned");
20
21
  Object.defineProperty(exports, "onOrderReturned", { enumerable: true, get: function () { return onOrderReturned_1.onOrderReturned; } });
@@ -4,10 +4,10 @@
4
4
  import { confirmPayTransaction } from './order/confirmPayTransaction';
5
5
  import { deleteOrder } from './order/deleteOrder';
6
6
  import { onAssetTransactionStatusChanged, paymentDue2Processing } from './order/onAssetTransactionStatusChanged';
7
- import { onOrderProcessing } from './order/onOrderStatusChanged';
7
+ import { onOrderProcessing, processOrder } from './order/onOrderStatusChanged';
8
8
  import { onOrderUpdated } from './order/onOrderUpdated';
9
9
  import { payOrder } from './order/payOrder';
10
10
  import { placeOrder } from './order/placeOrder';
11
11
  import { placeOrderWithoutTransaction } from './order/placeOrderWithoutTransaction';
12
12
  import { sendOrder } from './order/sendOrder';
13
- export { confirmPayTransaction, deleteOrder, onAssetTransactionStatusChanged, onOrderProcessing, onOrderUpdated, paymentDue2Processing, payOrder, placeOrder, placeOrderWithoutTransaction, sendOrder };
13
+ export { confirmPayTransaction, deleteOrder, onAssetTransactionStatusChanged, onOrderProcessing, onOrderUpdated, paymentDue2Processing, payOrder, placeOrder, placeOrderWithoutTransaction, processOrder, sendOrder };
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.sendOrder = exports.placeOrderWithoutTransaction = exports.placeOrder = exports.payOrder = exports.paymentDue2Processing = exports.onOrderUpdated = exports.onOrderProcessing = exports.onAssetTransactionStatusChanged = exports.deleteOrder = exports.confirmPayTransaction = void 0;
3
+ exports.sendOrder = exports.processOrder = exports.placeOrderWithoutTransaction = exports.placeOrder = exports.payOrder = exports.paymentDue2Processing = exports.onOrderUpdated = exports.onOrderProcessing = exports.onAssetTransactionStatusChanged = exports.deleteOrder = exports.confirmPayTransaction = void 0;
4
4
  /**
5
5
  * 注文サービス
6
6
  */
@@ -13,6 +13,7 @@ Object.defineProperty(exports, "onAssetTransactionStatusChanged", { enumerable:
13
13
  Object.defineProperty(exports, "paymentDue2Processing", { enumerable: true, get: function () { return onAssetTransactionStatusChanged_1.paymentDue2Processing; } });
14
14
  const onOrderStatusChanged_1 = require("./order/onOrderStatusChanged");
15
15
  Object.defineProperty(exports, "onOrderProcessing", { enumerable: true, get: function () { return onOrderStatusChanged_1.onOrderProcessing; } });
16
+ Object.defineProperty(exports, "processOrder", { enumerable: true, get: function () { return onOrderStatusChanged_1.processOrder; } });
16
17
  const onOrderUpdated_1 = require("./order/onOrderUpdated");
17
18
  Object.defineProperty(exports, "onOrderUpdated", { enumerable: true, get: function () { return onOrderUpdated_1.onOrderUpdated; } });
18
19
  const payOrder_1 = require("./order/payOrder");
@@ -2,6 +2,7 @@ import type { MongoRepository as ActionRepo } from '../../repo/action';
2
2
  import type { MongoRepository as AssetTransactionRepo } from '../../repo/assetTransaction';
3
3
  import type { AuthorizationRepo } from '../../repo/code';
4
4
  import type { MongoRepository as OrderRepo } from '../../repo/order';
5
+ import type { PassportRepo } from '../../repo/passport';
5
6
  import type { MongoRepository as ProductRepo } from '../../repo/product';
6
7
  import type { MongoRepository as ProjectRepo } from '../../repo/project';
7
8
  import type { MongoRepository as SellerRepo } from '../../repo/seller';
@@ -9,11 +10,12 @@ import type { MongoRepository as TaskRepo } from '../../repo/task';
9
10
  import type { TicketRepo } from '../../repo/ticket';
10
11
  import type { IStartedTransaction, MongoRepository as TransactionRepo } from '../../repo/transaction';
11
12
  import type { RedisRepository as TransactionNumberRepo } from '../../repo/transactionNumber';
12
- import { IPassportValidator as IWaiterPassportValidator, moneyTransfer as MoneyTransferFactory } from '../../factory/transaction';
13
+ import { moneyTransfer as MoneyTransferFactory } from '../../factory/transaction';
13
14
  export interface IStartOperationRepos {
14
15
  action: ActionRepo;
15
16
  authorization: AuthorizationRepo;
16
17
  order: OrderRepo;
18
+ passport: PassportRepo;
17
19
  product: ProductRepo;
18
20
  project: ProjectRepo;
19
21
  seller: SellerRepo;
@@ -31,7 +33,6 @@ export type IConfirmOperation<T> = (repos: {
31
33
  action: ActionRepo;
32
34
  transaction: TransactionRepo;
33
35
  }) => Promise<T>;
34
- export type IPassportValidator = IWaiterPassportValidator;
35
36
  export type IStartParams = MoneyTransferFactory.IStartParams;
36
37
  /**
37
38
  * 取引開始
@@ -19,7 +19,6 @@ const order_1 = require("../../factory/order");
19
19
  const factory_1 = require("./moneyTransfer/exportTasks/factory");
20
20
  const factory_2 = require("./moneyTransfer/factory");
21
21
  const potentialActions_1 = require("./moneyTransfer/potentialActions");
22
- const validation_1 = require("./validation");
23
22
  const MoneyTransferAssetTransactionService = require("../assetTransaction/moneyTransfer");
24
23
  const CodeService = require("../code");
25
24
  /**
@@ -28,7 +27,7 @@ const CodeService = require("../code");
28
27
  */
29
28
  function start(params) {
30
29
  return (repos) => __awaiter(this, void 0, void 0, function* () {
31
- const { passport } = yield (0, validation_1.validateWaiterPassport)(params);
30
+ const { passport } = yield repos.passport.validatePassportTokenIfExist(params);
32
31
  const sellers = yield repos.seller.search({
33
32
  limit: 1,
34
33
  page: 1,
@@ -0,0 +1,10 @@
1
+ import * as factory from '../../../../factory';
2
+ declare const AGENT_IDENTIFIER_NAME_PASSPORT = "passport";
3
+ type IVerifiedPassport = factory.waiter.passport.IPassport & {
4
+ /**
5
+ * 許可証識別子(2024-07-06~)
6
+ */
7
+ identifier: string;
8
+ };
9
+ declare function createStartParams(params: factory.transaction.placeOrder.IStartParamsWithoutDetail, expiresInSeconds: number, passport: IVerifiedPassport | undefined, seller: Pick<factory.seller.ISeller, 'id' | 'name' | 'typeOf' | 'project' | 'additionalProperty'>, broker?: factory.order.IBroker, customerType?: string, memeberOfPayload?: factory.transaction.placeOrder.IMemberOfPayload): factory.transaction.placeOrder.IStartParams;
10
+ export { AGENT_IDENTIFIER_NAME_PASSPORT, createStartParams };
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createStartParams = exports.AGENT_IDENTIFIER_NAME_PASSPORT = void 0;
4
+ const factory = require("../../../../factory");
5
+ const AGENT_IDENTIFIER_NAME_PASSPORT = 'passport';
6
+ exports.AGENT_IDENTIFIER_NAME_PASSPORT = AGENT_IDENTIFIER_NAME_PASSPORT;
7
+ function createStartParams(params, expiresInSeconds, passport, seller, broker, customerType, memeberOfPayload) {
8
+ var _a, _b, _c, _d;
9
+ let clientUser;
10
+ let instrument;
11
+ if (typeof ((_a = params.object.clientUser) === null || _a === void 0 ? void 0 : _a.client_id) === 'string') {
12
+ const { sub, token_use, iss, exp, iat, version, jti, client_id, username, aud, typ } = params.object.clientUser;
13
+ clientUser = { sub, token_use, iss, exp, iat, version, jti, client_id, username, aud, typ };
14
+ instrument = { id: client_id, typeOf: factory.creativeWorkType.WebApplication };
15
+ }
16
+ const transactionObject = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, (typeof (passport === null || passport === void 0 ? void 0 : passport.scope) === 'string') ? { passport } : undefined), (typeof (clientUser === null || clientUser === void 0 ? void 0 : clientUser.client_id) === 'string') ? { clientUser } : undefined), (typeof ((_b = params.object) === null || _b === void 0 ? void 0 : _b.name) === 'string') ? { name: (_c = params.object) === null || _c === void 0 ? void 0 : _c.name } : undefined), (typeof (broker === null || broker === void 0 ? void 0 : broker.typeOf) === 'string') ? { broker: broker } : undefined), (typeof ((_d = params.object.customer) === null || _d === void 0 ? void 0 : _d.typeOf) === 'string') ? { customer: params.object.customer } : undefined), (typeof customerType === 'string') ? { customerType } : undefined);
17
+ if (typeof seller.id !== 'string') {
18
+ throw new factory.errors.NotFound('seller.id');
19
+ }
20
+ if (typeof expiresInSeconds !== 'number') {
21
+ throw new factory.errors.ArgumentNull('expiresInSeconds');
22
+ }
23
+ const agentIdentifier = [
24
+ ...(Array.isArray(params.agent.identifier)) ? params.agent.identifier : [],
25
+ // add passport(2024-07-05~)
26
+ ...(typeof (passport === null || passport === void 0 ? void 0 : passport.identifier) === 'string') ? [{ name: AGENT_IDENTIFIER_NAME_PASSPORT, value: passport.identifier }] : []
27
+ ];
28
+ const agent = Object.assign(Object.assign(Object.assign({}, params.agent), (memeberOfPayload !== undefined) ? { memeberOfPayload } : undefined), { identifier: agentIdentifier });
29
+ return Object.assign({ project: { typeOf: seller.project.typeOf, id: seller.project.id }, typeOf: factory.transactionType.PlaceOrder, agent, seller: {
30
+ id: seller.id,
31
+ name: seller.name,
32
+ typeOf: seller.typeOf,
33
+ additionalProperty: (Array.isArray(seller.additionalProperty)) ? seller.additionalProperty : [] // 追加特性を追加(2023-08-08~)
34
+ }, object: transactionObject, expiresInSeconds }, (typeof (instrument === null || instrument === void 0 ? void 0 : instrument.id) === 'string') ? { instrument } : undefined);
35
+ }
36
+ exports.createStartParams = createStartParams;
@@ -1,18 +1,23 @@
1
1
  import type { MongoRepository as MemberRepo } from '../../../repo/member';
2
+ import type { PassportRepo } from '../../../repo/passport';
2
3
  import type { MongoRepository as ProjectMakesOfferRepo } from '../../../repo/projectMakesOffer';
3
4
  import type { MongoRepository as SellerRepo } from '../../../repo/seller';
4
5
  import type { IStartedTransaction, MongoRepository as TransactionRepo } from '../../../repo/transaction';
5
6
  import { placeOrder as PlaceOrderFactory } from '../../../factory/transaction';
6
7
  interface IStartOperationRepos {
7
8
  member: MemberRepo;
9
+ passport: PassportRepo;
8
10
  projectMakesOffer: ProjectMakesOfferRepo;
9
11
  seller: SellerRepo;
10
12
  transaction: TransactionRepo;
11
13
  }
12
14
  type IStartOperation<T> = (repos: IStartOperationRepos) => Promise<T>;
13
15
  type IStartParams = PlaceOrderFactory.IStartParams;
16
+ interface IStartOptions {
17
+ lockPassport: boolean;
18
+ }
14
19
  /**
15
20
  * 取引開始
16
21
  */
17
- declare function start(params: IStartParams): IStartOperation<IStartedTransaction>;
22
+ declare function start(params: IStartParams, options: IStartOptions): IStartOperation<IStartedTransaction>;
18
23
  export { start };
@@ -10,18 +10,16 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.start = void 0;
13
- const errorHandler_1 = require("../../../errorHandler");
14
13
  const factory = require("../../../factory");
15
- const validation_1 = require("../validation");
16
- const factory_1 = require("./factory");
14
+ const factory_1 = require("./start/factory");
17
15
  const validateStartRequest_1 = require("./validation/validateStartRequest");
18
16
  /**
19
17
  * 取引開始
20
18
  */
21
- function start(params) {
19
+ function start(params, options) {
22
20
  return (repos) => __awaiter(this, void 0, void 0, function* () {
23
21
  var _a;
24
- const { passport, customerType } = yield (0, validation_1.validateWaiterPassport)(params);
22
+ const { passport, customerType } = yield repos.passport.validatePassportTokenIfExist(params);
25
23
  const { memeberOfPayload, sellerMakesOffer, seller } = yield (0, validateStartRequest_1.validateStartRequest)(Object.assign(Object.assign(Object.assign({ project: { id: params.project.id }, seller: { id: params.seller.id } }, (typeof (passport === null || passport === void 0 ? void 0 : passport.scope) === 'string') ? { customerType } : undefined), (params.object.clientUser !== undefined) ? { clientUser: params.object.clientUser } : undefined), (typeof params.agent.memberOfToken === 'string') ? { memberOfToken: params.agent.memberOfToken } : undefined))(repos);
26
24
  const expiresInSeconds = (_a = sellerMakesOffer.eligibleTransactionDuration) === null || _a === void 0 ? void 0 : _a.maxValue;
27
25
  if (typeof expiresInSeconds !== 'number') {
@@ -30,14 +28,30 @@ function start(params) {
30
28
  // 取引ファクトリーで新しい進行中取引オブジェクトを作成
31
29
  const startParams = (0, factory_1.createStartParams)(params, expiresInSeconds, passport, seller, params.broker, customerType, memeberOfPayload);
32
30
  let transaction;
33
- try {
34
- transaction = yield repos.transaction.start(startParams);
35
- }
36
- catch (error) {
37
- if (yield (0, errorHandler_1.isMongoError)(error)) {
38
- // no op
31
+ // lock passport(2024-07-05~)
32
+ if (options.lockPassport && passport !== undefined) {
33
+ try {
34
+ yield repos.passport.lock(passport);
35
+ }
36
+ catch (error) {
37
+ // in case already locked
38
+ const alreadyStartedTransaction = (yield repos.transaction.search({
39
+ limit: 1, page: 1,
40
+ typeOf: factory.transactionType.PlaceOrder,
41
+ project: { id: { $eq: startParams.project.id } },
42
+ agent: { identifiers: [{ name: factory_1.AGENT_IDENTIFIER_NAME_PASSPORT, value: passport.identifier }] },
43
+ inclusion: ['expires', 'startDate', 'status']
44
+ })).shift();
45
+ if (alreadyStartedTransaction !== undefined) {
46
+ transaction = alreadyStartedTransaction;
47
+ }
48
+ else {
49
+ throw error;
50
+ }
39
51
  }
40
- throw error;
52
+ }
53
+ if (transaction === undefined) {
54
+ transaction = yield repos.transaction.start(startParams);
41
55
  }
42
56
  return transaction;
43
57
  });
@@ -13,7 +13,7 @@ exports.validateOrder = void 0;
13
13
  // import * as createDebug from 'debug';
14
14
  const moment = require("moment");
15
15
  const factory = require("../../factory");
16
- const factory_1 = require("../offer/event/factory");
16
+ const factory_1 = require("../offer/event/authorize/factory");
17
17
  const factory_2 = require("../offer/product/factory");
18
18
  const validateMovieTicket_1 = require("../transaction/placeOrderInProgress/validation/validateMovieTicket");
19
19
  // const debug = createDebug('chevre-domain:service:validation');
@@ -4,6 +4,7 @@ export declare const TRIGGER_WEBHOOK_RETRY_INTERVAL_IN_MS: number;
4
4
  export declare const MAXIMUM_RESERVATION_GRACE_PERIOD_IN_DAYS: number;
5
5
  export declare const ABORTED_TASKS_WITHOUT_REPORT: string[];
6
6
  export declare const MAX_NUM_CREDIT_CARD_PAYMENT_METHOD: number;
7
+ export declare const NUM_TRY_CONFIRM_RESERVE_TRANSACTION: number;
7
8
  /**
8
9
  * 取引保管期間(Confirmed)
9
10
  */