@chevre/domain 21.2.0-alpha.4 → 21.2.0-alpha.41
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.
- package/example/src/chevre/aggregation/aggregateSystem.ts +58 -31
- package/example/src/chevre/countDelayedTasks.ts +17 -0
- package/example/src/chevre/countDelayedTransactions.ts +60 -0
- package/example/src/chevre/countMoneyTransferTransaction.ts +36 -0
- package/example/src/chevre/createManyEventsIfNotExist.ts +4 -1
- package/example/src/chevre/lockStockHolder.ts +48 -0
- package/example/src/chevre/migrateOrderAdditionalProperties.ts +85 -0
- package/example/src/chevre/migrateStockHolderKeys.ts +89 -0
- package/example/src/chevre/saveTasks.ts +13 -10
- package/example/src/chevre/searchAbortedTasks.ts +36 -0
- package/example/src/chevre/task/executeTasks.ts +26 -0
- package/example/src/chevre/transaction/findCreditCard.ts +1 -1
- package/example/src/chevre/transaction/makeExpired.ts +18 -0
- package/example/src/chevre/transaction/orderMembershipService.ts +1 -1
- package/example/src/chevre/transaction/startExportTasks.ts +20 -0
- package/example/src/chevre/updateTransaction.ts +1 -1
- package/lib/chevre/credentials.d.ts +1 -0
- package/lib/chevre/credentials.js +2 -1
- package/lib/chevre/eventEmitter/assetTransaction.d.ts +21 -0
- package/lib/chevre/eventEmitter/assetTransaction.js +25 -0
- package/lib/chevre/eventEmitter/task.d.ts +18 -0
- package/lib/chevre/eventEmitter/task.js +25 -0
- package/lib/chevre/eventEmitter/transaction.d.ts +21 -0
- package/lib/chevre/eventEmitter/transaction.js +25 -0
- package/lib/chevre/eventEmitter.d.ts +4 -0
- package/lib/chevre/eventEmitter.js +9 -0
- package/lib/chevre/index.d.ts +3 -2
- package/lib/chevre/index.js +5 -3
- package/lib/chevre/repo/account.js +0 -4
- package/lib/chevre/repo/accountTitle.js +0 -4
- package/lib/chevre/repo/accountTransaction.d.ts +0 -10
- package/lib/chevre/repo/accountTransaction.js +0 -57
- package/lib/chevre/repo/accountingReport.js +0 -4
- package/lib/chevre/repo/action.js +0 -4
- package/lib/chevre/repo/additionalProperty.js +0 -4
- package/lib/chevre/repo/aggregation.js +0 -4
- package/lib/chevre/repo/assetTransaction.d.ts +16 -6
- package/lib/chevre/repo/assetTransaction.js +174 -50
- package/lib/chevre/repo/categoryCode.js +0 -4
- package/lib/chevre/repo/code.js +0 -4
- package/lib/chevre/repo/comment.d.ts +4 -1
- package/lib/chevre/repo/comment.js +20 -9
- package/lib/chevre/repo/confirmationNumber.d.ts +0 -1
- package/lib/chevre/repo/confirmationNumber.js +3 -15
- package/lib/chevre/repo/creativeWork.d.ts +1 -3
- package/lib/chevre/repo/creativeWork.js +0 -4
- package/lib/chevre/repo/customer.js +0 -4
- package/lib/chevre/repo/emailMessage.d.ts +1 -27
- package/lib/chevre/repo/emailMessage.js +0 -4
- package/lib/chevre/repo/event.d.ts +5 -1
- package/lib/chevre/repo/event.js +0 -4
- package/lib/chevre/repo/member.js +0 -4
- package/lib/chevre/repo/merchantReturnPolicy.d.ts +1 -3
- package/lib/chevre/repo/merchantReturnPolicy.js +0 -4
- package/lib/chevre/repo/mongoose/schemas/account.d.ts +5 -2
- package/lib/chevre/repo/mongoose/schemas/account.js +1 -0
- package/lib/chevre/repo/mongoose/schemas/accountTitle.d.ts +30 -3
- package/lib/chevre/repo/mongoose/schemas/accountTitle.js +1 -0
- package/lib/chevre/repo/mongoose/schemas/accountTransaction.d.ts +32 -3
- package/lib/chevre/repo/mongoose/schemas/accountTransaction.js +2 -1
- package/lib/chevre/repo/mongoose/schemas/accountingReport.d.ts +14 -3
- package/lib/chevre/repo/mongoose/schemas/accountingReport.js +1 -0
- package/lib/chevre/repo/mongoose/schemas/action.d.ts +44 -3
- package/lib/chevre/repo/mongoose/schemas/action.js +2 -1
- package/lib/chevre/repo/mongoose/schemas/additionalProperty.d.ts +18 -3
- package/lib/chevre/repo/mongoose/schemas/additionalProperty.js +1 -0
- package/lib/chevre/repo/mongoose/schemas/aggregation.d.ts +5 -2
- package/lib/chevre/repo/mongoose/schemas/aggregation.js +1 -0
- package/lib/chevre/repo/mongoose/schemas/assetTransaction.d.ts +45 -3
- package/lib/chevre/repo/mongoose/schemas/assetTransaction.js +3 -1
- package/lib/chevre/repo/mongoose/schemas/authorization.d.ts +20 -3
- package/lib/chevre/repo/mongoose/schemas/authorization.js +2 -1
- package/lib/chevre/repo/mongoose/schemas/categoryCode.d.ts +26 -3
- package/lib/chevre/repo/mongoose/schemas/categoryCode.js +1 -0
- package/lib/chevre/repo/mongoose/schemas/comments.d.ts +28 -3
- package/lib/chevre/repo/mongoose/schemas/comments.js +2 -1
- package/lib/chevre/repo/mongoose/schemas/creativeWork.d.ts +44 -3
- package/lib/chevre/repo/mongoose/schemas/creativeWork.js +1 -0
- package/lib/chevre/repo/mongoose/schemas/customer.d.ts +26 -3
- package/lib/chevre/repo/mongoose/schemas/customer.js +1 -0
- package/lib/chevre/repo/mongoose/schemas/emailMessages.d.ts +22 -3
- package/lib/chevre/repo/mongoose/schemas/emailMessages.js +1 -0
- package/lib/chevre/repo/mongoose/schemas/event.d.ts +72 -3
- package/lib/chevre/repo/mongoose/schemas/event.js +1 -0
- package/lib/chevre/repo/mongoose/schemas/member.d.ts +14 -3
- package/lib/chevre/repo/mongoose/schemas/member.js +1 -0
- package/lib/chevre/repo/mongoose/schemas/merchantReturnPolicy.d.ts +22 -3
- package/lib/chevre/repo/mongoose/schemas/merchantReturnPolicy.js +1 -0
- package/lib/chevre/repo/mongoose/schemas/offer.d.ts +66 -3
- package/lib/chevre/repo/mongoose/schemas/offer.js +1 -0
- package/lib/chevre/repo/mongoose/schemas/offerCatalog.d.ts +28 -3
- package/lib/chevre/repo/mongoose/schemas/offerCatalog.js +1 -0
- package/lib/chevre/repo/mongoose/schemas/order.d.ts +52 -3
- package/lib/chevre/repo/mongoose/schemas/order.js +2 -1
- package/lib/chevre/repo/mongoose/schemas/ownershipInfo.d.ts +26 -3
- package/lib/chevre/repo/mongoose/schemas/ownershipInfo.js +2 -1
- package/lib/chevre/repo/mongoose/schemas/place.d.ts +50 -3
- package/lib/chevre/repo/mongoose/schemas/place.js +1 -0
- package/lib/chevre/repo/mongoose/schemas/priceSpecification.d.ts +30 -3
- package/lib/chevre/repo/mongoose/schemas/priceSpecification.js +1 -0
- package/lib/chevre/repo/mongoose/schemas/product.d.ts +32 -3
- package/lib/chevre/repo/mongoose/schemas/product.js +1 -0
- package/lib/chevre/repo/mongoose/schemas/project.d.ts +24 -3
- package/lib/chevre/repo/mongoose/schemas/project.js +1 -0
- package/lib/chevre/repo/mongoose/schemas/reservation.d.ts +62 -3
- package/lib/chevre/repo/mongoose/schemas/reservation.js +2 -1
- package/lib/chevre/repo/mongoose/schemas/role.d.ts +12 -3
- package/lib/chevre/repo/mongoose/schemas/role.js +1 -0
- package/lib/chevre/repo/mongoose/schemas/seller.d.ts +32 -3
- package/lib/chevre/repo/mongoose/schemas/seller.js +1 -0
- package/lib/chevre/repo/mongoose/schemas/serviceOutput.d.ts +12 -3
- package/lib/chevre/repo/mongoose/schemas/serviceOutput.js +2 -1
- package/lib/chevre/repo/mongoose/schemas/task.d.ts +31 -3
- package/lib/chevre/repo/mongoose/schemas/task.js +3 -1
- package/lib/chevre/repo/mongoose/schemas/telemetry.d.ts +22 -3
- package/lib/chevre/repo/mongoose/schemas/telemetry.js +1 -0
- package/lib/chevre/repo/mongoose/schemas/transaction.d.ts +41 -3
- package/lib/chevre/repo/mongoose/schemas/transaction.js +3 -1
- package/lib/chevre/repo/mongoose/schemas/trip.d.ts +12 -3
- package/lib/chevre/repo/mongoose/schemas/trip.js +1 -0
- package/lib/chevre/repo/offer.js +0 -5
- package/lib/chevre/repo/offerCatalog.js +0 -4
- package/lib/chevre/repo/order.d.ts +25 -0
- package/lib/chevre/repo/order.js +5 -4
- package/lib/chevre/repo/orderNumber.d.ts +0 -1
- package/lib/chevre/repo/orderNumber.js +2 -12
- package/lib/chevre/repo/ownershipInfo.js +0 -4
- package/lib/chevre/repo/permit.js +0 -4
- package/lib/chevre/repo/place.d.ts +5 -1
- package/lib/chevre/repo/place.js +1 -10
- package/lib/chevre/repo/priceSpecification.js +0 -4
- package/lib/chevre/repo/product.js +0 -4
- package/lib/chevre/repo/project.js +0 -4
- package/lib/chevre/repo/reservation.js +0 -4
- package/lib/chevre/repo/role.js +0 -4
- package/lib/chevre/repo/seller.js +0 -4
- package/lib/chevre/repo/serviceOutput.js +0 -4
- package/lib/chevre/repo/serviceOutputIdentifier.d.ts +0 -1
- package/lib/chevre/repo/serviceOutputIdentifier.js +2 -12
- package/lib/chevre/repo/stockHolder.d.ts +1 -0
- package/lib/chevre/repo/stockHolder.js +74 -7
- package/lib/chevre/repo/task.d.ts +38 -2
- package/lib/chevre/repo/task.js +90 -10
- package/lib/chevre/repo/telemetry.js +0 -4
- package/lib/chevre/repo/transaction.d.ts +17 -2
- package/lib/chevre/repo/transaction.js +176 -56
- package/lib/chevre/repo/transactionNumber.d.ts +0 -1
- package/lib/chevre/repo/transactionNumber.js +2 -12
- package/lib/chevre/repo/trip.js +0 -4
- package/lib/chevre/service/aggregation/system.d.ts +67 -22
- package/lib/chevre/service/aggregation/system.js +101 -89
- package/lib/chevre/service/assetTransaction/cancelReservation.js +1 -5
- package/lib/chevre/service/assetTransaction/moneyTransfer.js +1 -1
- package/lib/chevre/service/assetTransaction/pay.js +2 -2
- package/lib/chevre/service/assetTransaction/refund.js +1 -1
- package/lib/chevre/service/assetTransaction/registerService.js +1 -2
- package/lib/chevre/service/assetTransaction/reserve.js +1 -1
- package/lib/chevre/service/assetTransaction.d.ts +6 -2
- package/lib/chevre/service/assetTransaction.js +9 -5
- package/lib/chevre/service/notification.d.ts +3 -1
- package/lib/chevre/service/notification.js +28 -7
- package/lib/chevre/service/offer/event/voidTransaction.d.ts +2 -0
- package/lib/chevre/service/offer/event/voidTransaction.js +17 -1
- package/lib/chevre/service/offer.js +1 -1
- package/lib/chevre/service/order/onOrderStatusChanged.js +1 -1
- package/lib/chevre/service/order/placeOrder.js +1 -1
- package/lib/chevre/service/order/returnOrder.js +1 -5
- package/lib/chevre/service/order/sendOrder.js +1 -1
- package/lib/chevre/service/payment/any/onPaid.js +1 -1
- package/lib/chevre/service/payment/any/onRefund.js +1 -1
- package/lib/chevre/service/payment/any.js +25 -10
- package/lib/chevre/service/product.js +1 -5
- package/lib/chevre/service/reserve/cancelReservation.js +0 -2
- package/lib/chevre/service/reserve/potentialActions/onReservationCanceled.d.ts +0 -3
- package/lib/chevre/service/reserve/potentialActions/onReservationCanceled.js +20 -20
- package/lib/chevre/service/reserve/potentialActions/onReservationCheckedIn.js +2 -3
- package/lib/chevre/service/reserve/potentialActions/onReservationConfirmed.js +2 -31
- package/lib/chevre/service/reserve/potentialActions/onReservationUsed.js +2 -3
- package/lib/chevre/service/reserve/useReservation.js +1 -8
- package/lib/chevre/service/task/confirmRegisterServiceTransaction.js +1 -1
- package/lib/chevre/service/task/returnPayTransaction.js +1 -5
- package/lib/chevre/service/task/voidReserveTransaction.js +3 -1
- package/lib/chevre/service/task.d.ts +9 -0
- package/lib/chevre/service/task.js +43 -4
- package/lib/chevre/service/transaction/moneyTransfer.js +1 -3
- package/lib/chevre/service/transaction/placeOrder/exportTasks/factory.js +30 -29
- package/lib/chevre/service/transaction/placeOrder.js +1 -5
- package/lib/chevre/service/transaction/placeOrderInProgress.js +2 -2
- package/lib/chevre/service/transaction/returnOrder.js +1 -5
- package/lib/chevre/service/transaction.d.ts +6 -0
- package/lib/chevre/service/transaction.js +9 -7
- package/lib/chevre/settings.d.ts +3 -2
- package/lib/chevre/settings.js +9 -8
- package/package.json +4 -4
- package/example/src/chevre/migrateMoneyTransferPendingTransactionIdentifier.ts +0 -96
- package/example/src/chevre/migrateMovieAdditionalProperties.ts +0 -98
|
@@ -5,6 +5,7 @@ import { RedisRepository as OfferRateLimitRepo } from '../../../repo/rateLimit/o
|
|
|
5
5
|
import { MongoRepository as ReservationRepo } from '../../../repo/reservation';
|
|
6
6
|
import { StockHolderRepository as StockHolderRepo } from '../../../repo/stockHolder';
|
|
7
7
|
import { MongoRepository as TaskRepo } from '../../../repo/task';
|
|
8
|
+
import { MongoRepository as TransactionRepo } from '../../../repo/transaction';
|
|
8
9
|
export import WebAPIIdentifier = factory.service.webAPI.Identifier;
|
|
9
10
|
interface IVoidTransactionRepos {
|
|
10
11
|
action: ActionRepo;
|
|
@@ -13,6 +14,7 @@ interface IVoidTransactionRepos {
|
|
|
13
14
|
offerRateLimit: OfferRateLimitRepo;
|
|
14
15
|
reservation: ReservationRepo;
|
|
15
16
|
task: TaskRepo;
|
|
17
|
+
transaction: TransactionRepo;
|
|
16
18
|
}
|
|
17
19
|
/**
|
|
18
20
|
* イベントオファー承認取消(タスクから実行)
|
|
@@ -26,8 +26,13 @@ exports.WebAPIIdentifier = factory.service.webAPI.Identifier;
|
|
|
26
26
|
*/
|
|
27
27
|
function voidTransaction(params) {
|
|
28
28
|
return (repos) => __awaiter(this, void 0, void 0, function* () {
|
|
29
|
+
const transaction = yield repos.transaction.findById({
|
|
30
|
+
typeOf: params.purpose.typeOf,
|
|
31
|
+
id: params.purpose.id,
|
|
32
|
+
inclusion: ['_id', 'typeOf', 'status']
|
|
33
|
+
});
|
|
29
34
|
// 座席仮予約アクション検索
|
|
30
|
-
|
|
35
|
+
let authorizeActions = yield repos.action.searchByPurpose({
|
|
31
36
|
typeOf: factory.actionType.AuthorizeAction,
|
|
32
37
|
purpose: {
|
|
33
38
|
typeOf: params.purpose.typeOf,
|
|
@@ -36,6 +41,17 @@ function voidTransaction(params) {
|
|
|
36
41
|
})
|
|
37
42
|
.then((actions) => actions
|
|
38
43
|
.filter((a) => a.object.typeOf === factory.action.authorize.offer.seatReservation.ObjectType.SeatReservation));
|
|
44
|
+
switch (transaction.status) {
|
|
45
|
+
case factory.transactionStatusType.InProgress:
|
|
46
|
+
throw new factory.errors.NotImplemented(`${transaction.status} not implemented`);
|
|
47
|
+
// 確定取引に対応(2023-05-07~)
|
|
48
|
+
case factory.transactionStatusType.Confirmed:
|
|
49
|
+
// アクションステータスを検証する
|
|
50
|
+
authorizeActions = authorizeActions.filter((a) => a.actionStatus !== factory.actionStatusType.CompletedActionStatus);
|
|
51
|
+
break;
|
|
52
|
+
default:
|
|
53
|
+
// no op
|
|
54
|
+
}
|
|
39
55
|
yield Promise.all(authorizeActions.map((action) => __awaiter(this, void 0, void 0, function* () {
|
|
40
56
|
yield repos.action.cancel({ typeOf: action.typeOf, id: action.id });
|
|
41
57
|
switch (action.instrument.identifier) {
|
|
@@ -204,10 +204,6 @@ function onReturn(returnActionAttributes) {
|
|
|
204
204
|
}
|
|
205
205
|
}
|
|
206
206
|
// タスク保管
|
|
207
|
-
|
|
208
|
-
yield repos.task.saveMany(taskAttributes);
|
|
209
|
-
// await Promise.all(taskAttributes.map(async (taskAttribute) => {
|
|
210
|
-
// return repos.task.save(taskAttribute);
|
|
211
|
-
// }));
|
|
207
|
+
yield repos.task.saveMany(taskAttributes, { emitImmediately: true });
|
|
212
208
|
});
|
|
213
209
|
}
|
|
@@ -52,10 +52,18 @@ exports.voidPayTransaction = voidPayTransaction;
|
|
|
52
52
|
function invalidatePaymentUrl(params) {
|
|
53
53
|
return (repos) => __awaiter(this, void 0, void 0, function* () {
|
|
54
54
|
var _a, _b, _c, _d, _e;
|
|
55
|
+
if (params.purpose.typeOf !== factory.transactionType.PlaceOrder) {
|
|
56
|
+
throw new factory.errors.Argument('purpose.typeOf', `must be ${factory.transactionType.PlaceOrder}`);
|
|
57
|
+
}
|
|
55
58
|
const transaction = yield repos.transaction.findById({
|
|
56
59
|
typeOf: params.purpose.typeOf,
|
|
57
60
|
id: params.purpose.id
|
|
58
61
|
});
|
|
62
|
+
// 確定取引に対応(2023-05-03~)
|
|
63
|
+
if (transaction.status === factory.transactionStatusType.Confirmed) {
|
|
64
|
+
// no op
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
59
67
|
const paymentMethodIdByPaymentUrl = (_a = transaction.object.paymentMethods) === null || _a === void 0 ? void 0 : _a.paymentMethodId;
|
|
60
68
|
const paymentMethodType = (_b = transaction.object.paymentMethods) === null || _b === void 0 ? void 0 : _b.typeOf;
|
|
61
69
|
if (typeof paymentMethodIdByPaymentUrl === 'string' && paymentMethodIdByPaymentUrl.length > 0
|
|
@@ -70,12 +78,10 @@ function invalidatePaymentUrl(params) {
|
|
|
70
78
|
? transaction.seller.name
|
|
71
79
|
: String((_c = transaction.seller.name) === null || _c === void 0 ? void 0 : _c.ja),
|
|
72
80
|
id: transaction.seller.id
|
|
73
|
-
// project: transaction.seller.project
|
|
74
81
|
},
|
|
75
82
|
recipient: { typeOf: transaction.agent.typeOf, name: transaction.agent.name },
|
|
76
83
|
object: [{
|
|
77
84
|
typeOf: factory.service.paymentService.PaymentServiceType.CreditCard,
|
|
78
|
-
// tslint:disable-next-line:max-line-length
|
|
79
85
|
id: (_e = (_d = transaction.object.paymentMethods) === null || _d === void 0 ? void 0 : _d.issuedThrough) === null || _e === void 0 ? void 0 : _e.id,
|
|
80
86
|
paymentMethod: {
|
|
81
87
|
additionalProperty: [],
|
|
@@ -103,10 +109,11 @@ function processVoidPayTransaction(params) {
|
|
|
103
109
|
transaction = yield repos.transaction.findInProgressById({ typeOf: params.purpose.typeOf, id: params.purpose.id });
|
|
104
110
|
}
|
|
105
111
|
else {
|
|
106
|
-
transaction = yield repos.transaction.findById({
|
|
112
|
+
transaction = (yield repos.transaction.findById({
|
|
107
113
|
typeOf: params.purpose.typeOf,
|
|
108
|
-
id: params.purpose.id
|
|
109
|
-
|
|
114
|
+
id: params.purpose.id,
|
|
115
|
+
inclusion: ['_id', 'typeOf', 'status']
|
|
116
|
+
}));
|
|
110
117
|
}
|
|
111
118
|
// 承認アクションを取得
|
|
112
119
|
let authorizeActions;
|
|
@@ -122,7 +129,7 @@ function processVoidPayTransaction(params) {
|
|
|
122
129
|
const authorizeActionsOnTransaction = yield repos.action.searchByPurpose({
|
|
123
130
|
typeOf: factory.actionType.AuthorizeAction,
|
|
124
131
|
purpose: {
|
|
125
|
-
typeOf:
|
|
132
|
+
typeOf: transaction.typeOf,
|
|
126
133
|
id: transaction.id
|
|
127
134
|
}
|
|
128
135
|
});
|
|
@@ -131,12 +138,20 @@ function processVoidPayTransaction(params) {
|
|
|
131
138
|
return ((_a = a.object) === null || _a === void 0 ? void 0 : _a.typeOf) === factory.action.authorize.paymentMethod.any.ResultType.Payment
|
|
132
139
|
&& ((_b = a.instrument) === null || _b === void 0 ? void 0 : _b.identifier) === factory.action.authorize.paymentMethod.any.ServiceIdentifier.Chevre;
|
|
133
140
|
});
|
|
141
|
+
switch (transaction.status) {
|
|
142
|
+
case factory.transactionStatusType.InProgress:
|
|
143
|
+
throw new factory.errors.NotImplemented(`${transaction.status} not implemented`);
|
|
144
|
+
// 確定取引に対応(2023-05-03~)
|
|
145
|
+
case factory.transactionStatusType.Confirmed:
|
|
146
|
+
// アクションステータスを検証する
|
|
147
|
+
authorizeActions = authorizeActions.filter((a) => a.actionStatus !== factory.actionStatusType.CompletedActionStatus);
|
|
148
|
+
break;
|
|
149
|
+
default:
|
|
150
|
+
// no op
|
|
151
|
+
}
|
|
134
152
|
}
|
|
135
153
|
const errors = [];
|
|
136
154
|
for (const action of authorizeActions) {
|
|
137
|
-
// 直列にゆっくり処理する場合↓
|
|
138
|
-
// tslint:disable-next-line:no-magic-numbers
|
|
139
|
-
// await new Promise((resolve) => setTimeout(() => { resolve(); }, 1000));
|
|
140
155
|
// 失敗するケースがあっても、残りが少なくとも処理されるようにエラーハンドリング
|
|
141
156
|
try {
|
|
142
157
|
// 取引が存在すれば中止
|
|
@@ -194,7 +209,7 @@ function publishPaymentUrl(params) {
|
|
|
194
209
|
paymentUrl: result.paymentUrl,
|
|
195
210
|
issuedThrough: { id: (typeof startParams.object.id === 'string') ? startParams.object.id : '' }
|
|
196
211
|
};
|
|
197
|
-
yield repos.transaction.
|
|
212
|
+
yield repos.transaction.findByIdAndUpdateInProgress({
|
|
198
213
|
id: transaction.id,
|
|
199
214
|
update: { $set: { 'object.paymentMethods': paymentMethodByPaymentUrl } }
|
|
200
215
|
});
|
|
@@ -77,10 +77,6 @@ function onRegistered(actionAttributes, __) {
|
|
|
77
77
|
}
|
|
78
78
|
}
|
|
79
79
|
// タスク保管
|
|
80
|
-
|
|
81
|
-
yield repos.task.saveMany(taskAttributes);
|
|
82
|
-
// await Promise.all(taskAttributes.map(async (taskAttribute) => {
|
|
83
|
-
// return repos.task.save(taskAttribute);
|
|
84
|
-
// }));
|
|
80
|
+
yield repos.task.saveMany(taskAttributes, { emitImmediately: true });
|
|
85
81
|
});
|
|
86
82
|
}
|
|
@@ -144,7 +144,6 @@ function cancelPendingReservation(actionAttributesList) {
|
|
|
144
144
|
// canceledReservationId: canceledReservation?.id
|
|
145
145
|
);
|
|
146
146
|
yield repos.action.complete({ typeOf: action.typeOf, id: action.id, result: actionResult });
|
|
147
|
-
// await onReservationCanceledByAction(actionAttributes)({ task: repos.task });
|
|
148
147
|
if (actionObject.typeOf === factory.reservationType.ReservationPackage) {
|
|
149
148
|
// 最新のconfirmedReservationsを検索
|
|
150
149
|
canceledReservations = yield repos.reservation.search({
|
|
@@ -297,7 +296,6 @@ function cancelReservation(actionAttributesList) {
|
|
|
297
296
|
// canceledReservationId: canceledReservation?.id
|
|
298
297
|
);
|
|
299
298
|
yield repos.action.complete({ typeOf: action.typeOf, id: action.id, result: actionResult });
|
|
300
|
-
// await onReservationCanceledByAction(actionAttributes)({ task: repos.task });
|
|
301
299
|
let canceledReservations = [];
|
|
302
300
|
if (actionAttributes.object.typeOf === factory.reservationType.ReservationPackage) {
|
|
303
301
|
const reservationNumber = actionAttributes.object.reservationNumber;
|
|
@@ -4,9 +4,6 @@ type IEventReservation = factory.reservation.IReservation<factory.reservationTyp
|
|
|
4
4
|
/**
|
|
5
5
|
* 予約取消後のアクション
|
|
6
6
|
*/
|
|
7
|
-
export declare function onReservationCanceledByAction(actionAttributes: factory.action.cancel.reservation.IAttributes): (repos: {
|
|
8
|
-
task: TaskRepo;
|
|
9
|
-
}) => Promise<void>;
|
|
10
7
|
export declare function onReservationCanceled(canceledReservations: IEventReservation[], useInformReservation: boolean): (repos: {
|
|
11
8
|
task: TaskRepo;
|
|
12
9
|
}) => Promise<void>;
|
|
@@ -9,7 +9,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.onReservationCanceled =
|
|
12
|
+
exports.onReservationCanceled = void 0;
|
|
13
13
|
/**
|
|
14
14
|
* 予約取消時アクション
|
|
15
15
|
*/
|
|
@@ -19,26 +19,26 @@ const settings_1 = require("../../../settings");
|
|
|
19
19
|
const offer_1 = require("../../offer");
|
|
20
20
|
const factory_1 = require("../factory");
|
|
21
21
|
const informReservations = settings_1.settings.onReservationStatusChanged.informReservation;
|
|
22
|
-
const INFORM_TASK_DELAY_IN_SECONDS = 30;
|
|
23
22
|
/**
|
|
24
23
|
* 予約取消後のアクション
|
|
25
24
|
*/
|
|
26
|
-
function onReservationCanceledByAction(
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
}
|
|
41
|
-
|
|
25
|
+
// export function onReservationCanceledByAction(
|
|
26
|
+
// actionAttributes: factory.action.cancel.reservation.IAttributes
|
|
27
|
+
// ) {
|
|
28
|
+
// return async (repos: {
|
|
29
|
+
// task: TaskRepo;
|
|
30
|
+
// }) => {
|
|
31
|
+
// const potentialActions = actionAttributes.potentialActions;
|
|
32
|
+
// const taskAttributes: factory.task.IAttributes<factory.taskName>[] = [];
|
|
33
|
+
// if (potentialActions !== undefined) {
|
|
34
|
+
// // no op
|
|
35
|
+
// }
|
|
36
|
+
// // タスク保管
|
|
37
|
+
// if (taskAttributes.length > 0) {
|
|
38
|
+
// await repos.task.saveMany(taskAttributes, { emitImmediately: true });
|
|
39
|
+
// }
|
|
40
|
+
// };
|
|
41
|
+
// }
|
|
42
42
|
function onReservationCanceled(canceledReservations, useInformReservation) {
|
|
43
43
|
return (repos) => __awaiter(this, void 0, void 0, function* () {
|
|
44
44
|
if (Array.isArray(canceledReservations) && canceledReservations.length > 0) {
|
|
@@ -50,7 +50,7 @@ function onReservationCanceled(canceledReservations, useInformReservation) {
|
|
|
50
50
|
if (Array.isArray(informReservations)) {
|
|
51
51
|
// やや遅延させる(確定通知が未達の可能性を考慮して)
|
|
52
52
|
const informTaskRunsAt = moment(now)
|
|
53
|
-
.add(
|
|
53
|
+
.add(settings_1.INFORM_RESERVATION_TASK_DELAY_IN_SECONDS, 'seconds')
|
|
54
54
|
.toDate();
|
|
55
55
|
const reservations4inform = canceledReservations.map((r) => {
|
|
56
56
|
return {
|
|
@@ -91,7 +91,7 @@ function onReservationCanceled(canceledReservations, useInformReservation) {
|
|
|
91
91
|
}
|
|
92
92
|
// タスク保管
|
|
93
93
|
if (taskAttributes.length > 0) {
|
|
94
|
-
yield repos.task.saveMany(taskAttributes);
|
|
94
|
+
yield repos.task.saveMany(taskAttributes, { emitImmediately: true });
|
|
95
95
|
}
|
|
96
96
|
// 冗長な作成を避ける
|
|
97
97
|
yield (0, offer_1.createAggregateScreeningEventIfNotExist)({
|
|
@@ -19,7 +19,6 @@ const settings_1 = require("../../../settings");
|
|
|
19
19
|
const offer_1 = require("../../offer");
|
|
20
20
|
const factory_1 = require("../factory");
|
|
21
21
|
const informReservations = settings_1.settings.onReservationStatusChanged.informReservation;
|
|
22
|
-
const INFORM_TASK_DELAY_IN_SECONDS = 30;
|
|
23
22
|
// tslint:disable-next-line:max-func-body-length
|
|
24
23
|
function onReservationCheckedIn(params) {
|
|
25
24
|
// tslint:disable-next-line:max-func-body-length
|
|
@@ -31,7 +30,7 @@ function onReservationCheckedIn(params) {
|
|
|
31
30
|
if (Array.isArray(informReservations)) {
|
|
32
31
|
// やや遅延させる(確定通知が未達の可能性を考慮して)
|
|
33
32
|
const informTaskRunsAt = moment(params.now)
|
|
34
|
-
.add(
|
|
33
|
+
.add(settings_1.INFORM_RESERVATION_TASK_DELAY_IN_SECONDS, 'seconds')
|
|
35
34
|
.toDate();
|
|
36
35
|
informReservations.forEach((informReservation) => {
|
|
37
36
|
var _a;
|
|
@@ -107,7 +106,7 @@ function onReservationCheckedIn(params) {
|
|
|
107
106
|
});
|
|
108
107
|
}
|
|
109
108
|
if (tasks.length > 0) {
|
|
110
|
-
yield repos.task.saveMany(tasks);
|
|
109
|
+
yield repos.task.saveMany(tasks, { emitImmediately: true });
|
|
111
110
|
}
|
|
112
111
|
// 冗長な作成を避ける
|
|
113
112
|
const reservationForIds = (_a = params.object.reservationFor) === null || _a === void 0 ? void 0 : _a.ids;
|
|
@@ -57,38 +57,9 @@ function onReservationConfirmedByAction(actionAttributes
|
|
|
57
57
|
}));
|
|
58
58
|
}
|
|
59
59
|
}
|
|
60
|
-
// inform galobally
|
|
61
|
-
// if (Array.isArray(informReservations)) {
|
|
62
|
-
// const reservation4inform: IReservation4informConfirmed = maskUnderName(confirmedReservation);
|
|
63
|
-
// taskAttributes.push(...informReservations.map<ITriggerWebhookTaskAttributes>((informReservation) => {
|
|
64
|
-
// const informUrl: string = String(informReservation.recipient?.url);
|
|
65
|
-
// const informReservationAttributes: InformReservationActionattributes = {
|
|
66
|
-
// agent: confirmedReservation.project,
|
|
67
|
-
// object: [reservation4inform],
|
|
68
|
-
// project: confirmedReservation.project,
|
|
69
|
-
// recipient: {
|
|
70
|
-
// id: '',
|
|
71
|
-
// name: informUrl,
|
|
72
|
-
// typeOf: factory.creativeWorkType.WebApplication,
|
|
73
|
-
// url: informUrl
|
|
74
|
-
// },
|
|
75
|
-
// typeOf: factory.actionType.InformAction
|
|
76
|
-
// };
|
|
77
|
-
// return {
|
|
78
|
-
// project: actionAttributes.project,
|
|
79
|
-
// name: factory.taskName.TriggerWebhook,
|
|
80
|
-
// status: factory.taskStatus.Ready,
|
|
81
|
-
// runsAt: now,
|
|
82
|
-
// remainingNumberOfTries: NUM_TRY_INFORM_RESERVATION,
|
|
83
|
-
// numberOfTried: 0,
|
|
84
|
-
// executionResults: [],
|
|
85
|
-
// data: informReservationAttributes
|
|
86
|
-
// };
|
|
87
|
-
// }));
|
|
88
|
-
// }
|
|
89
60
|
// タスク保管
|
|
90
61
|
if (taskAttributes.length > 0) {
|
|
91
|
-
yield repos.task.saveMany(taskAttributes);
|
|
62
|
+
yield repos.task.saveMany(taskAttributes, { emitImmediately: true });
|
|
92
63
|
}
|
|
93
64
|
});
|
|
94
65
|
}
|
|
@@ -142,7 +113,7 @@ function onReservationConfirmed(confirmedReservations) {
|
|
|
142
113
|
}
|
|
143
114
|
// タスク保管
|
|
144
115
|
if (taskAttributes.length > 0) {
|
|
145
|
-
yield repos.task.saveMany(taskAttributes);
|
|
116
|
+
yield repos.task.saveMany(taskAttributes, { emitImmediately: true });
|
|
146
117
|
}
|
|
147
118
|
}
|
|
148
119
|
});
|
|
@@ -19,7 +19,6 @@ const settings_1 = require("../../../settings");
|
|
|
19
19
|
const offer_1 = require("../../offer");
|
|
20
20
|
const factory_1 = require("../factory");
|
|
21
21
|
const informReservations = settings_1.settings.onReservationStatusChanged.informReservation;
|
|
22
|
-
const INFORM_TASK_DELAY_IN_SECONDS = 30;
|
|
23
22
|
/**
|
|
24
23
|
* 予約使用
|
|
25
24
|
*/
|
|
@@ -32,7 +31,7 @@ function onReservationUsed(action, attendedReservation) {
|
|
|
32
31
|
if (Array.isArray(informReservations)) {
|
|
33
32
|
// やや遅延させる(確定通知が未達の可能性を考慮して)
|
|
34
33
|
const informTaskRunsAt = moment(now)
|
|
35
|
-
.add(
|
|
34
|
+
.add(settings_1.INFORM_RESERVATION_TASK_DELAY_IN_SECONDS, 'seconds')
|
|
36
35
|
.toDate();
|
|
37
36
|
const reservation4inform = {
|
|
38
37
|
typeOf: attendedReservation.typeOf,
|
|
@@ -97,7 +96,7 @@ function onReservationUsed(action, attendedReservation) {
|
|
|
97
96
|
}
|
|
98
97
|
}
|
|
99
98
|
if (tasks.length > 0) {
|
|
100
|
-
yield repos.task.saveMany(tasks);
|
|
99
|
+
yield repos.task.saveMany(tasks, { emitImmediately: true });
|
|
101
100
|
}
|
|
102
101
|
// 冗長な作成を避ける
|
|
103
102
|
yield (0, offer_1.createAggregateScreeningEventIfNotExist)({
|
|
@@ -31,13 +31,6 @@ function verifyToken4reservation(params) {
|
|
|
31
31
|
orderNumber: payload.orderNumber,
|
|
32
32
|
reservationId: params.reservationId
|
|
33
33
|
});
|
|
34
|
-
// 注文検索
|
|
35
|
-
// const order: Pick<factory.order.IOrder, 'orderStatus' | 'acceptedOffers'> =
|
|
36
|
-
// await repos.order.findByOrderNumber({
|
|
37
|
-
// orderNumber: payload.orderNumber,
|
|
38
|
-
// inclusion: ['orderStatus', 'acceptedOffers'],
|
|
39
|
-
// exclusion: []
|
|
40
|
-
// });
|
|
41
34
|
// ステータス検証
|
|
42
35
|
switch (order.orderStatus) {
|
|
43
36
|
case factory.orderStatus.OrderDelivered:
|
|
@@ -75,7 +68,7 @@ function useReservation(params) {
|
|
|
75
68
|
// 取得属性最適化(2023-01-30~)
|
|
76
69
|
const reservation = yield repos.reservation.findById({
|
|
77
70
|
id: reservationId,
|
|
78
|
-
inclusion: ['
|
|
71
|
+
inclusion: ['_id', 'issuedThrough', 'project', 'reservationFor', 'reservationNumber', 'reservedTicket', 'typeOf']
|
|
79
72
|
});
|
|
80
73
|
// instrument?.tokenを検証
|
|
81
74
|
const token = (_a = params === null || params === void 0 ? void 0 : params.instrument) === null || _a === void 0 ? void 0 : _a.token;
|
|
@@ -95,7 +95,7 @@ function onRegistered(actionAttributes) {
|
|
|
95
95
|
taskAttributes.push(...orderProgramMembershipTasks);
|
|
96
96
|
}
|
|
97
97
|
// タスク保管
|
|
98
|
-
yield repos.task.saveMany(taskAttributes);
|
|
98
|
+
yield repos.task.saveMany(taskAttributes, { emitImmediately: true });
|
|
99
99
|
});
|
|
100
100
|
}
|
|
101
101
|
exports.onRegistered = onRegistered;
|
|
@@ -219,10 +219,6 @@ function onRefund(refundActionAttributes) {
|
|
|
219
219
|
});
|
|
220
220
|
}
|
|
221
221
|
// タスク保管
|
|
222
|
-
|
|
223
|
-
yield repos.task.saveMany(taskAttributes);
|
|
224
|
-
// await Promise.all(taskAttributes.map(async (taskAttribute) => {
|
|
225
|
-
// return repos.task.save(taskAttribute);
|
|
226
|
-
// }));
|
|
222
|
+
yield repos.task.saveMany(taskAttributes, { emitImmediately: true });
|
|
227
223
|
});
|
|
228
224
|
}
|
|
@@ -17,6 +17,7 @@ const offer_1 = require("../../repo/rateLimit/offer");
|
|
|
17
17
|
const reservation_1 = require("../../repo/reservation");
|
|
18
18
|
const stockHolder_1 = require("../../repo/stockHolder");
|
|
19
19
|
const task_1 = require("../../repo/task");
|
|
20
|
+
const transaction_1 = require("../../repo/transaction");
|
|
20
21
|
const EventOfferService = require("../offer/event");
|
|
21
22
|
/**
|
|
22
23
|
* タスク実行関数
|
|
@@ -38,7 +39,8 @@ function call(data) {
|
|
|
38
39
|
stockHolder: stockHolderRepo,
|
|
39
40
|
offerRateLimit: offerRateLimitRepo,
|
|
40
41
|
reservation: reservationRepo,
|
|
41
|
-
task: taskRepo
|
|
42
|
+
task: taskRepo,
|
|
43
|
+
transaction: new transaction_1.MongoRepository(settings.connection)
|
|
42
44
|
});
|
|
43
45
|
});
|
|
44
46
|
}
|
|
@@ -16,11 +16,20 @@ export type TaskOperation<T> = (repos: {
|
|
|
16
16
|
task: TaskRepo;
|
|
17
17
|
}) => Promise<T>;
|
|
18
18
|
export type IOperation<T> = (settings: IConnectionSettings) => Promise<T>;
|
|
19
|
+
export declare function executeById(params: {
|
|
20
|
+
id: string;
|
|
21
|
+
executor?: {
|
|
22
|
+
name: string;
|
|
23
|
+
};
|
|
24
|
+
}): IOperation<void>;
|
|
19
25
|
/**
|
|
20
26
|
* タスク名でタスクをひとつ実行する
|
|
21
27
|
*/
|
|
22
28
|
export declare function executeByName<T extends factory.taskName>(params: {
|
|
23
29
|
name: T;
|
|
30
|
+
executor?: {
|
|
31
|
+
name: string;
|
|
32
|
+
};
|
|
24
33
|
}): IOperation<void>;
|
|
25
34
|
/**
|
|
26
35
|
* タスクを実行する
|
|
@@ -9,7 +9,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.notifyAbortedTasks = exports.abort = exports.retry = exports.execute = exports.executeByName = void 0;
|
|
12
|
+
exports.notifyAbortedTasks = exports.abort = exports.retry = exports.execute = exports.executeByName = exports.executeById = void 0;
|
|
13
13
|
/**
|
|
14
14
|
* タスクサービス
|
|
15
15
|
*/
|
|
@@ -18,19 +18,54 @@ const factory = require("../factory");
|
|
|
18
18
|
const task_1 = require("../repo/task");
|
|
19
19
|
const NotificationService = require("./notification");
|
|
20
20
|
const factory_1 = require("./notification/factory");
|
|
21
|
+
const credentials_1 = require("../credentials");
|
|
21
22
|
const settings_1 = require("../settings");
|
|
22
23
|
const debug = createDebug('chevre-domain:service:task');
|
|
24
|
+
const DEFAULT_EXECUTOR_NAME = `${process.env.GAE_APPLICATION}:${process.env.GAE_SERVICE}:jobs`;
|
|
25
|
+
function executeById(params) {
|
|
26
|
+
return (settings) => __awaiter(this, void 0, void 0, function* () {
|
|
27
|
+
var _a;
|
|
28
|
+
const taskRepo = new task_1.MongoRepository(settings.connection);
|
|
29
|
+
// 未実行のタスクを取得
|
|
30
|
+
// tslint:disable-next-line:no-null-keyword
|
|
31
|
+
let task = null;
|
|
32
|
+
try {
|
|
33
|
+
task = yield taskRepo.executeById({
|
|
34
|
+
id: params.id,
|
|
35
|
+
executor: {
|
|
36
|
+
name: (typeof ((_a = params.executor) === null || _a === void 0 ? void 0 : _a.name) === 'string') ? params.executor.name : DEFAULT_EXECUTOR_NAME
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
// tslint:disable-next-line:no-single-line-block-comment
|
|
42
|
+
/* istanbul ignore next */
|
|
43
|
+
debug('service.task.executeById error:', error);
|
|
44
|
+
}
|
|
45
|
+
// タスクがなければ終了
|
|
46
|
+
if (task !== null) {
|
|
47
|
+
yield execute(task)(settings);
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
exports.executeById = executeById;
|
|
23
52
|
/**
|
|
24
53
|
* タスク名でタスクをひとつ実行する
|
|
25
54
|
*/
|
|
26
55
|
function executeByName(params) {
|
|
27
56
|
return (settings) => __awaiter(this, void 0, void 0, function* () {
|
|
57
|
+
var _a;
|
|
28
58
|
const taskRepo = new task_1.MongoRepository(settings.connection);
|
|
29
59
|
// 未実行のタスクを取得
|
|
30
60
|
// tslint:disable-next-line:no-null-keyword
|
|
31
61
|
let task = null;
|
|
32
62
|
try {
|
|
33
|
-
task = yield taskRepo.executeOneByName(
|
|
63
|
+
task = yield taskRepo.executeOneByName({
|
|
64
|
+
name: params.name,
|
|
65
|
+
executor: {
|
|
66
|
+
name: (typeof ((_a = params.executor) === null || _a === void 0 ? void 0 : _a.name) === 'string') ? params.executor.name : DEFAULT_EXECUTOR_NAME
|
|
67
|
+
}
|
|
68
|
+
});
|
|
34
69
|
}
|
|
35
70
|
catch (error) {
|
|
36
71
|
// tslint:disable-next-line:no-single-line-block-comment
|
|
@@ -106,7 +141,9 @@ function abort(params) {
|
|
|
106
141
|
}
|
|
107
142
|
// 開発者へ報告
|
|
108
143
|
const message = (0, factory_1.task2lineNotify)({ task: abortedTask });
|
|
109
|
-
yield NotificationService.report2developers(message.subject, message.content)(
|
|
144
|
+
yield NotificationService.report2developers(message.subject, message.content)({
|
|
145
|
+
accessToken: credentials_1.credentials.lineNotify.accessTokenAlert
|
|
146
|
+
});
|
|
110
147
|
}
|
|
111
148
|
});
|
|
112
149
|
}
|
|
@@ -123,7 +160,9 @@ function notifyAbortedTasks(params) {
|
|
|
123
160
|
if (abortedTasks.length > 0) {
|
|
124
161
|
// 開発者へ報告
|
|
125
162
|
const message = (0, factory_1.tasks2lineNotify)({ tasks: abortedTasks });
|
|
126
|
-
yield NotificationService.report2developers(message.subject, message.content)(
|
|
163
|
+
yield NotificationService.report2developers(message.subject, message.content)({
|
|
164
|
+
accessToken: credentials_1.credentials.lineNotify.accessTokenAlert
|
|
165
|
+
});
|
|
127
166
|
}
|
|
128
167
|
});
|
|
129
168
|
}
|
|
@@ -576,9 +576,7 @@ function exportTasksById(params) {
|
|
|
576
576
|
transaction,
|
|
577
577
|
runsAt: taskRunsAt
|
|
578
578
|
});
|
|
579
|
-
|
|
580
|
-
yield repos.task.saveMany(taskAttributes);
|
|
581
|
-
// await Promise.all(taskAttributes.map(async (a) => repos.task.save(a)));
|
|
579
|
+
yield repos.task.saveMany(taskAttributes, { emitImmediately: true });
|
|
582
580
|
});
|
|
583
581
|
}
|
|
584
582
|
exports.exportTasksById = exportTasksById;
|