@chevre/domain 24.0.0-alpha.11 → 24.0.0-alpha.13
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/lib/chevre/service/order/onAssetTransactionStatusChanged/isDeliverable.d.ts +16 -0
- package/lib/chevre/service/order/onAssetTransactionStatusChanged/isDeliverable.js +97 -0
- package/lib/chevre/service/order/onAssetTransactionStatusChanged/onPayTransactionCanceled.d.ts +21 -0
- package/lib/chevre/service/order/onAssetTransactionStatusChanged/onPayTransactionCanceled.js +86 -0
- package/lib/chevre/service/order/onAssetTransactionStatusChanged/onPayTransactionConfirmed.d.ts +22 -0
- package/lib/chevre/service/order/onAssetTransactionStatusChanged/onPayTransactionConfirmed.js +112 -0
- package/lib/chevre/service/order/onAssetTransactionStatusChanged/onReserveTransactionConfirmed.d.ts +22 -0
- package/lib/chevre/service/order/onAssetTransactionStatusChanged/onReserveTransactionConfirmed.js +74 -0
- package/lib/chevre/service/order/onAssetTransactionStatusChanged/paymentDue2Processing.d.ts +25 -0
- package/lib/chevre/service/order/onAssetTransactionStatusChanged/paymentDue2Processing.js +111 -0
- package/lib/chevre/service/order/onAssetTransactionStatusChanged/processing2inTransit.d.ts +16 -0
- package/lib/chevre/service/order/onAssetTransactionStatusChanged/processing2inTransit.js +74 -0
- package/lib/chevre/service/order/onAssetTransactionStatusChanged.d.ts +6 -28
- package/lib/chevre/service/order/onAssetTransactionStatusChanged.js +37 -345
- package/lib/chevre/service/order/onOrderStatusChanged/onOrderInTransit.d.ts +6 -5
- package/lib/chevre/service/order/placeOrder.d.ts +12 -11
- package/lib/chevre/service/order/sendOrder.d.ts +4 -4
- package/lib/chevre/service/order/sendOrder.js +2 -0
- package/lib/chevre/service/order.d.ts +3 -6
- package/lib/chevre/service/order.js +3 -9
- package/lib/chevre/service/payment/any/{fixOrderAsNeeded.d.ts → authorize/fixOrderAsNeeded.d.ts} +5 -5
- package/lib/chevre/service/payment/any/{fixOrderAsNeeded.js → authorize/fixOrderAsNeeded.js} +3 -3
- package/lib/chevre/service/payment/any/authorize.d.ts +90 -0
- package/lib/chevre/service/payment/any/authorize.js +225 -0
- package/lib/chevre/service/payment/any/findAcceptAction.d.ts +43 -0
- package/lib/chevre/service/payment/any/findAcceptAction.js +94 -0
- package/lib/chevre/service/payment/any/findAuthorizeAction.d.ts +41 -0
- package/lib/chevre/service/payment/any/findAuthorizeAction.js +83 -0
- package/lib/chevre/service/payment/any/findCheckAction.d.ts +44 -0
- package/lib/chevre/service/payment/any/findCheckAction.js +89 -0
- package/lib/chevre/service/payment/any/invalidatePaymentUrl.d.ts +28 -0
- package/lib/chevre/service/payment/any/invalidatePaymentUrl.js +185 -0
- package/lib/chevre/service/payment/any/processVoidPayTransaction.d.ts +29 -0
- package/lib/chevre/service/payment/any/processVoidPayTransaction.js +125 -0
- package/lib/chevre/service/payment/any/publishPaymentUrl.d.ts +64 -0
- package/lib/chevre/service/payment/any/publishPaymentUrl.js +133 -0
- package/lib/chevre/service/payment/any/voidPayTransaction.d.ts +31 -0
- package/lib/chevre/service/payment/any/voidPayTransaction.js +38 -0
- package/lib/chevre/service/payment/any.d.ts +8 -305
- package/lib/chevre/service/payment/any.js +17 -857
- package/lib/chevre/service/task/sendOrder.js +2 -2
- package/lib/chevre/service/transaction/placeOrder/exportTasksById.d.ts +5 -4
- package/package.json +3 -3
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { AcceptedOfferRepo } from '../../../repo/acceptedOffer';
|
|
2
|
+
import type { AssetTransactionRepo } from '../../../repo/assetTransaction';
|
|
3
|
+
import type { OrderRepo } from '../../../repo/order';
|
|
4
|
+
import * as factory from '../../../factory';
|
|
5
|
+
declare function isDeliverable(params: {
|
|
6
|
+
project: {
|
|
7
|
+
id: string;
|
|
8
|
+
};
|
|
9
|
+
orderNumber: string;
|
|
10
|
+
assetTransactionType: factory.assetTransactionType.Reserve | factory.assetTransactionType.MoneyTransfer | factory.assetTransactionType.RegisterService;
|
|
11
|
+
}): (repos: {
|
|
12
|
+
acceptedOffer: AcceptedOfferRepo;
|
|
13
|
+
assetTransaction: AssetTransactionRepo;
|
|
14
|
+
order: OrderRepo;
|
|
15
|
+
}) => Promise<boolean>;
|
|
16
|
+
export { isDeliverable };
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.isDeliverable = isDeliverable;
|
|
30
|
+
const debug_1 = __importDefault(require("debug"));
|
|
31
|
+
const factory = __importStar(require("../../../factory"));
|
|
32
|
+
const debug = (0, debug_1.default)('chevre-domain:service:order');
|
|
33
|
+
function isDeliverable(params) {
|
|
34
|
+
return async (repos) => {
|
|
35
|
+
let allReserveTransactionConfirmed = false;
|
|
36
|
+
let allMoneyTransferTransactionConfirmed = false;
|
|
37
|
+
let allRegisterServiceTransactionConfirmed = false;
|
|
38
|
+
if (params.assetTransactionType === factory.assetTransactionType.Reserve) {
|
|
39
|
+
allMoneyTransferTransactionConfirmed = true;
|
|
40
|
+
allRegisterServiceTransactionConfirmed = true;
|
|
41
|
+
// 注文のreservationNumberを取得
|
|
42
|
+
const reservationNumbers = await repos.acceptedOffer.distinctValues({ orderNumber: { $in: [params.orderNumber] } }, 'acceptedOffers.itemOffered.reservationNumber');
|
|
43
|
+
if (reservationNumbers.length > 0) {
|
|
44
|
+
const referencedReserveTransactions = await repos.assetTransaction.search({
|
|
45
|
+
project: { id: { $eq: params.project.id } },
|
|
46
|
+
typeOf: factory.assetTransactionType.Reserve,
|
|
47
|
+
transactionNumber: { $in: reservationNumbers }
|
|
48
|
+
}, ['status']);
|
|
49
|
+
allReserveTransactionConfirmed =
|
|
50
|
+
referencedReserveTransactions.length === reservationNumbers.length
|
|
51
|
+
&& referencedReserveTransactions.every(({ status }) => status === factory.transactionStatusType.Confirmed);
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
allReserveTransactionConfirmed = true;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
else if (params.assetTransactionType === factory.assetTransactionType.MoneyTransfer) {
|
|
58
|
+
allReserveTransactionConfirmed = true;
|
|
59
|
+
allRegisterServiceTransactionConfirmed = true;
|
|
60
|
+
// 注文のMoneyTransferTransaction.transactionNumberを取得
|
|
61
|
+
const moneyTransferTransactionNumbers = await repos.acceptedOffer.distinctValues({ orderNumber: { $in: [params.orderNumber] } }, 'acceptedOffers.serialNumber');
|
|
62
|
+
if (moneyTransferTransactionNumbers.length > 0) {
|
|
63
|
+
debug('is deliverable?...', params.orderNumber, 'moneyTransferTransactionNumbers:', moneyTransferTransactionNumbers);
|
|
64
|
+
const referencedMoneyTransferTransactions = await repos.assetTransaction.search({
|
|
65
|
+
project: { id: { $eq: params.project.id } },
|
|
66
|
+
typeOf: factory.assetTransactionType.MoneyTransfer,
|
|
67
|
+
transactionNumber: { $in: moneyTransferTransactionNumbers }
|
|
68
|
+
}, ['status']);
|
|
69
|
+
allMoneyTransferTransactionConfirmed =
|
|
70
|
+
referencedMoneyTransferTransactions.length === moneyTransferTransactionNumbers.length
|
|
71
|
+
&& referencedMoneyTransferTransactions.every(({ status }) => status === factory.transactionStatusType.Confirmed);
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
allMoneyTransferTransactionConfirmed = true;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
else if (params.assetTransactionType === factory.assetTransactionType.RegisterService) {
|
|
78
|
+
allReserveTransactionConfirmed = true;
|
|
79
|
+
allMoneyTransferTransactionConfirmed = true;
|
|
80
|
+
const registerServiceTransactionNumbers = await repos.acceptedOffer.distinctValues({ orderNumber: { $in: [params.orderNumber] } }, 'acceptedOffers.serialNumber');
|
|
81
|
+
if (registerServiceTransactionNumbers.length > 0) {
|
|
82
|
+
const referencedRegisterServiceTransactions = await repos.assetTransaction.search({
|
|
83
|
+
project: { id: { $eq: params.project.id } },
|
|
84
|
+
typeOf: factory.assetTransactionType.RegisterService,
|
|
85
|
+
transactionNumber: { $in: registerServiceTransactionNumbers }
|
|
86
|
+
}, ['status']);
|
|
87
|
+
allRegisterServiceTransactionConfirmed =
|
|
88
|
+
referencedRegisterServiceTransactions.length === registerServiceTransactionNumbers.length
|
|
89
|
+
&& referencedRegisterServiceTransactions.every(({ status }) => status === factory.transactionStatusType.Confirmed);
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
allRegisterServiceTransactionConfirmed = true;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return allReserveTransactionConfirmed && allMoneyTransferTransactionConfirmed && allRegisterServiceTransactionConfirmed;
|
|
96
|
+
};
|
|
97
|
+
}
|
package/lib/chevre/service/order/onAssetTransactionStatusChanged/onPayTransactionCanceled.d.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { AcceptedOfferRepo } from '../../../repo/acceptedOffer';
|
|
2
|
+
import type { AssetTransactionRepo } from '../../../repo/assetTransaction';
|
|
3
|
+
import type { OrderRepo } from '../../../repo/order';
|
|
4
|
+
import type { SettingRepo } from '../../../repo/setting';
|
|
5
|
+
import type { TaskRepo } from '../../../repo/task';
|
|
6
|
+
import type { PlaceOrderRepo } from '../../../repo/transaction/placeOrder';
|
|
7
|
+
import * as factory from '../../../factory';
|
|
8
|
+
interface IOnPayTransactionCanceledRepos {
|
|
9
|
+
acceptedOffer: AcceptedOfferRepo;
|
|
10
|
+
assetTransaction: AssetTransactionRepo;
|
|
11
|
+
order: OrderRepo;
|
|
12
|
+
setting: SettingRepo;
|
|
13
|
+
task: TaskRepo;
|
|
14
|
+
placeOrder: PlaceOrderRepo;
|
|
15
|
+
}
|
|
16
|
+
declare function onPayTransactionCanceled(params: factory.task.onAssetTransactionStatusChanged.IData & {
|
|
17
|
+
object: factory.task.onAssetTransactionStatusChanged.IObjectAsPayTransaction & {
|
|
18
|
+
status: factory.transactionStatusType.Canceled | factory.transactionStatusType.Expired;
|
|
19
|
+
};
|
|
20
|
+
}): (repos: IOnPayTransactionCanceledRepos) => Promise<void>;
|
|
21
|
+
export { IOnPayTransactionCanceledRepos, onPayTransactionCanceled, };
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.onPayTransactionCanceled = onPayTransactionCanceled;
|
|
27
|
+
const findPlaceOrderTransaction_1 = require("../findPlaceOrderTransaction");
|
|
28
|
+
const onOrderStatusChanged_1 = require("../onOrderStatusChanged");
|
|
29
|
+
const factory = __importStar(require("../../../factory"));
|
|
30
|
+
function onPayTransactionCanceled(params) {
|
|
31
|
+
return async (repos
|
|
32
|
+
// settings: Settings
|
|
33
|
+
) => {
|
|
34
|
+
if (typeof params.useOnOrderStatusChanged !== 'boolean') {
|
|
35
|
+
throw new factory.errors.Argument('useOnOrderStatusChanged', 'must be boolean');
|
|
36
|
+
}
|
|
37
|
+
// 注文が存在すればキャンセル(2023-08-30~)
|
|
38
|
+
await cancelOrderIfExist({
|
|
39
|
+
project: { id: params.project.id },
|
|
40
|
+
paymentMethodId: params.object.transactionNumber,
|
|
41
|
+
useOnOrderStatusChanged: params.useOnOrderStatusChanged
|
|
42
|
+
})(repos);
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
function cancelOrderIfExist(params) {
|
|
46
|
+
return async (repos) => {
|
|
47
|
+
if (params.paymentMethodId.length === 0) {
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
// 注文のpaymentMethodIdを取得
|
|
51
|
+
const ordersByPaymentMethodId = await repos.order.projectFields({
|
|
52
|
+
limit: 1,
|
|
53
|
+
page: 1,
|
|
54
|
+
paymentMethods: {
|
|
55
|
+
paymentMethodIds: [params.paymentMethodId]
|
|
56
|
+
},
|
|
57
|
+
project: { id: { $eq: params.project.id } }
|
|
58
|
+
}, { inclusion: ['confirmationNumber', 'orderNumber'] });
|
|
59
|
+
const orderByPaymentMethodId = ordersByPaymentMethodId.shift();
|
|
60
|
+
if (orderByPaymentMethodId !== undefined) {
|
|
61
|
+
const placeOrderTransaction = await (0, findPlaceOrderTransaction_1.findPlaceOrderTransaction)({
|
|
62
|
+
project: { id: params.project.id },
|
|
63
|
+
confirmationNumber: orderByPaymentMethodId.confirmationNumber,
|
|
64
|
+
orderNumber: orderByPaymentMethodId.orderNumber
|
|
65
|
+
})(repos);
|
|
66
|
+
const order = await repos.order.changeStatus({
|
|
67
|
+
project: { id: params.project.id },
|
|
68
|
+
orderNumber: orderByPaymentMethodId.orderNumber,
|
|
69
|
+
orderStatus: factory.orderStatus.OrderCancelled,
|
|
70
|
+
previousOrderStatus: factory.orderStatus.OrderPaymentDue
|
|
71
|
+
});
|
|
72
|
+
if (params.useOnOrderStatusChanged) {
|
|
73
|
+
await (0, onOrderStatusChanged_1.onOrderCancelled)({
|
|
74
|
+
order: {
|
|
75
|
+
orderDate: order.orderDate,
|
|
76
|
+
orderNumber: order.orderNumber,
|
|
77
|
+
orderStatus: factory.orderStatus.OrderCancelled // 強制的にOrderCancelledとして処理する
|
|
78
|
+
},
|
|
79
|
+
placeOrderTransaction
|
|
80
|
+
})({
|
|
81
|
+
task: repos.task
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
}
|
package/lib/chevre/service/order/onAssetTransactionStatusChanged/onPayTransactionConfirmed.d.ts
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { AcceptedOfferRepo } from '../../../repo/acceptedOffer';
|
|
2
|
+
import type { AssetTransactionRepo } from '../../../repo/assetTransaction';
|
|
3
|
+
import type { OrderRepo } from '../../../repo/order';
|
|
4
|
+
import type { SettingRepo } from '../../../repo/setting';
|
|
5
|
+
import type { TaskRepo } from '../../../repo/task';
|
|
6
|
+
import type { PlaceOrderRepo } from '../../../repo/transaction/placeOrder';
|
|
7
|
+
import * as factory from '../../../factory';
|
|
8
|
+
import { Settings } from '../../../settings';
|
|
9
|
+
interface IOnPayTransactionConfirmedRepos {
|
|
10
|
+
acceptedOffer: AcceptedOfferRepo;
|
|
11
|
+
assetTransaction: AssetTransactionRepo;
|
|
12
|
+
order: OrderRepo;
|
|
13
|
+
setting: SettingRepo;
|
|
14
|
+
task: TaskRepo;
|
|
15
|
+
placeOrder: PlaceOrderRepo;
|
|
16
|
+
}
|
|
17
|
+
declare function onPayTransactionConfirmed(params: factory.task.onAssetTransactionStatusChanged.IData & {
|
|
18
|
+
object: factory.task.onAssetTransactionStatusChanged.IObjectAsPayTransaction & {
|
|
19
|
+
status: factory.transactionStatusType.Confirmed;
|
|
20
|
+
};
|
|
21
|
+
}): (repos: IOnPayTransactionConfirmedRepos, settings: Settings) => Promise<void>;
|
|
22
|
+
export { IOnPayTransactionConfirmedRepos, onPayTransactionConfirmed };
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.onPayTransactionConfirmed = onPayTransactionConfirmed;
|
|
27
|
+
const paymentDue2Processing_1 = require("../onAssetTransactionStatusChanged/paymentDue2Processing");
|
|
28
|
+
const factory = __importStar(require("../../../factory"));
|
|
29
|
+
function onPayTransactionConfirmed(params) {
|
|
30
|
+
return async (repos, settings) => {
|
|
31
|
+
if (typeof params.useOnOrderStatusChanged !== 'boolean') {
|
|
32
|
+
throw new factory.errors.Argument('useOnOrderStatusChanged', 'must be boolean');
|
|
33
|
+
}
|
|
34
|
+
const orderNumber = params.purpose?.orderNumber;
|
|
35
|
+
const confirmationNumber = params.purpose?.confirmationNumber;
|
|
36
|
+
// 確定時の決済方法区分指定(2023-08-29~)
|
|
37
|
+
const specifiedPaymentMethodIdentifire = params.object?.object?.paymentMethod?.identifier;
|
|
38
|
+
if (typeof specifiedPaymentMethodIdentifire === 'string' && specifiedPaymentMethodIdentifire.length > 0) {
|
|
39
|
+
await fixPaymentMethodIdentifierIfPossible({
|
|
40
|
+
project: { id: params.project.id },
|
|
41
|
+
paymentMethodId: params.object.transactionNumber,
|
|
42
|
+
paymentMethod: { identifier: specifiedPaymentMethodIdentifire },
|
|
43
|
+
referencesOrder: { orderNumber }
|
|
44
|
+
})(repos);
|
|
45
|
+
}
|
|
46
|
+
if (typeof orderNumber === 'string' && typeof confirmationNumber === 'string') {
|
|
47
|
+
// PayTransactionのステータス検証
|
|
48
|
+
const processable = await isProcessable({ project: { id: params.project.id }, orderNumber })(repos);
|
|
49
|
+
if (processable) {
|
|
50
|
+
await (0, paymentDue2Processing_1.paymentDue2Processing)({
|
|
51
|
+
project: { id: params.project.id },
|
|
52
|
+
confirmationNumber,
|
|
53
|
+
orderNumber,
|
|
54
|
+
useOnOrderStatusChanged: params.useOnOrderStatusChanged
|
|
55
|
+
})(repos, settings);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
function fixPaymentMethodIdentifierIfPossible(params) {
|
|
61
|
+
return async (repos) => {
|
|
62
|
+
const referencedPayTransactions = await repos.assetTransaction.search({
|
|
63
|
+
project: { id: { $eq: params.project.id } },
|
|
64
|
+
typeOf: factory.assetTransactionType.Pay,
|
|
65
|
+
statuses: [factory.transactionStatusType.Confirmed],
|
|
66
|
+
transactionNumber: { $in: [params.paymentMethodId] }
|
|
67
|
+
}, ['object']);
|
|
68
|
+
const referencedPayTransaction = referencedPayTransactions.shift();
|
|
69
|
+
if (referencedPayTransaction === undefined) {
|
|
70
|
+
throw new factory.errors.NotFound(factory.assetTransactionType.Pay);
|
|
71
|
+
}
|
|
72
|
+
// 対面決済かつ決済取引上の決済方法区分と一致すれば、注文を変更
|
|
73
|
+
if (referencedPayTransaction.object.typeOf === factory.service.paymentService.PaymentServiceType.FaceToFace
|
|
74
|
+
&& referencedPayTransaction.object.paymentMethod.identifier === params.paymentMethod.identifier) {
|
|
75
|
+
await repos.order.fixPaymentMethodIdentifier({
|
|
76
|
+
project: { id: params.project.id },
|
|
77
|
+
orderNumber: params.referencesOrder.orderNumber,
|
|
78
|
+
invoice: {
|
|
79
|
+
paymentMethodId: params.paymentMethodId,
|
|
80
|
+
paymentMethod: { identifier: params.paymentMethod.identifier }
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
function isProcessable(params) {
|
|
87
|
+
return async (repos) => {
|
|
88
|
+
// 注文のpaymentMethodIdを取得
|
|
89
|
+
const order = await repos.order.projectFieldsByOrderNumber({
|
|
90
|
+
orderNumber: params.orderNumber,
|
|
91
|
+
project: { id: params.project.id },
|
|
92
|
+
inclusion: ['paymentMethods']
|
|
93
|
+
});
|
|
94
|
+
// PayTransactionのステータス検証
|
|
95
|
+
let allPayTransactionConfirmed;
|
|
96
|
+
const paymentMethodIds = order.paymentMethods.filter((invoice) => typeof invoice.paymentMethodId === 'string' && invoice.paymentMethodId.length > 0)
|
|
97
|
+
.map((invoice) => invoice.paymentMethodId);
|
|
98
|
+
if (paymentMethodIds.length > 0) {
|
|
99
|
+
const referencedPayTransactions = await repos.assetTransaction.search({
|
|
100
|
+
project: { id: { $eq: params.project.id } },
|
|
101
|
+
typeOf: factory.assetTransactionType.Pay,
|
|
102
|
+
transactionNumber: { $in: paymentMethodIds }
|
|
103
|
+
}, ['status']);
|
|
104
|
+
allPayTransactionConfirmed =
|
|
105
|
+
referencedPayTransactions.every((payTransation) => payTransation.status === factory.transactionStatusType.Confirmed);
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
allPayTransactionConfirmed = true;
|
|
109
|
+
}
|
|
110
|
+
return allPayTransactionConfirmed;
|
|
111
|
+
};
|
|
112
|
+
}
|
package/lib/chevre/service/order/onAssetTransactionStatusChanged/onReserveTransactionConfirmed.d.ts
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { AcceptedOfferRepo } from '../../../repo/acceptedOffer';
|
|
2
|
+
import type { AssetTransactionRepo } from '../../../repo/assetTransaction';
|
|
3
|
+
import type { OrderRepo } from '../../../repo/order';
|
|
4
|
+
import type { SettingRepo } from '../../../repo/setting';
|
|
5
|
+
import type { TaskRepo } from '../../../repo/task';
|
|
6
|
+
import type { PlaceOrderRepo } from '../../../repo/transaction/placeOrder';
|
|
7
|
+
import * as factory from '../../../factory';
|
|
8
|
+
import { Settings } from '../../../settings';
|
|
9
|
+
interface IOnReserveTransactionConfirmedRepos {
|
|
10
|
+
acceptedOffer: AcceptedOfferRepo;
|
|
11
|
+
assetTransaction: AssetTransactionRepo;
|
|
12
|
+
order: OrderRepo;
|
|
13
|
+
setting: SettingRepo;
|
|
14
|
+
task: TaskRepo;
|
|
15
|
+
placeOrder: PlaceOrderRepo;
|
|
16
|
+
}
|
|
17
|
+
declare function onReserveTransactionConfirmed(params: factory.task.onAssetTransactionStatusChanged.IData & {
|
|
18
|
+
object: factory.task.onAssetTransactionStatusChanged.IObjectAsReserveTransaction & {
|
|
19
|
+
status: factory.transactionStatusType.Confirmed;
|
|
20
|
+
};
|
|
21
|
+
}): (repos: IOnReserveTransactionConfirmedRepos, settings: Settings) => Promise<void>;
|
|
22
|
+
export { IOnReserveTransactionConfirmedRepos, onReserveTransactionConfirmed, };
|
package/lib/chevre/service/order/onAssetTransactionStatusChanged/onReserveTransactionConfirmed.js
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.onReserveTransactionConfirmed = onReserveTransactionConfirmed;
|
|
27
|
+
const isDeliverable_1 = require("./isDeliverable");
|
|
28
|
+
const processing2inTransit_1 = require("./processing2inTransit");
|
|
29
|
+
const factory = __importStar(require("../../../factory"));
|
|
30
|
+
function onReserveTransactionConfirmed(params) {
|
|
31
|
+
return async (repos, settings) => {
|
|
32
|
+
if (typeof params.useOnOrderStatusChanged !== 'boolean') {
|
|
33
|
+
throw new factory.errors.Argument('useOnOrderStatusChanged', 'must be boolean');
|
|
34
|
+
}
|
|
35
|
+
const orderNumber = params.purpose?.orderNumber;
|
|
36
|
+
const confirmationNumber = params.purpose?.confirmationNumber;
|
|
37
|
+
switch (params.object.typeOf) {
|
|
38
|
+
case factory.assetTransactionType.COAReserveTransaction:
|
|
39
|
+
if (typeof orderNumber === 'string' && typeof confirmationNumber === 'string') {
|
|
40
|
+
// 基本的に1注文に1予約番号なのでdeliverable = true
|
|
41
|
+
const deliverable = true;
|
|
42
|
+
if (deliverable) {
|
|
43
|
+
await (0, processing2inTransit_1.processing2inTransit)({
|
|
44
|
+
project: { id: params.project.id },
|
|
45
|
+
// confirmationNumber,
|
|
46
|
+
orderNumber,
|
|
47
|
+
useOnOrderStatusChanged: params.useOnOrderStatusChanged
|
|
48
|
+
})(repos, settings);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
break;
|
|
52
|
+
case factory.assetTransactionType.Reserve:
|
|
53
|
+
if (typeof orderNumber === 'string' && typeof confirmationNumber === 'string') {
|
|
54
|
+
// ReserveTransactionのステータス検証
|
|
55
|
+
const deliverable = await (0, isDeliverable_1.isDeliverable)({
|
|
56
|
+
project: { id: params.project.id },
|
|
57
|
+
orderNumber,
|
|
58
|
+
assetTransactionType: params.object.typeOf
|
|
59
|
+
})(repos);
|
|
60
|
+
if (deliverable) {
|
|
61
|
+
await (0, processing2inTransit_1.processing2inTransit)({
|
|
62
|
+
project: { id: params.project.id },
|
|
63
|
+
// confirmationNumber,
|
|
64
|
+
orderNumber,
|
|
65
|
+
useOnOrderStatusChanged: params.useOnOrderStatusChanged
|
|
66
|
+
})(repos, settings);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
break;
|
|
70
|
+
default:
|
|
71
|
+
// no op
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { AcceptedOfferRepo } from '../../../repo/acceptedOffer';
|
|
2
|
+
import type { OrderRepo } from '../../../repo/order';
|
|
3
|
+
import type { SettingRepo } from '../../../repo/setting';
|
|
4
|
+
import type { TaskRepo } from '../../../repo/task';
|
|
5
|
+
import type { PlaceOrderRepo } from '../../../repo/transaction/placeOrder';
|
|
6
|
+
import { Settings } from '../../../settings';
|
|
7
|
+
interface IPaymentDue2ProcessingRepos {
|
|
8
|
+
acceptedOffer: AcceptedOfferRepo;
|
|
9
|
+
order: OrderRepo;
|
|
10
|
+
setting: SettingRepo;
|
|
11
|
+
task: TaskRepo;
|
|
12
|
+
placeOrder: PlaceOrderRepo;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* 全決済取引確定を完了した注文に関して、アイテムを処理する
|
|
16
|
+
*/
|
|
17
|
+
declare function paymentDue2Processing(params: {
|
|
18
|
+
project: {
|
|
19
|
+
id: string;
|
|
20
|
+
};
|
|
21
|
+
confirmationNumber: string;
|
|
22
|
+
orderNumber: string;
|
|
23
|
+
useOnOrderStatusChanged: boolean;
|
|
24
|
+
}): (repos: IPaymentDue2ProcessingRepos, settings: Settings) => Promise<void>;
|
|
25
|
+
export { IPaymentDue2ProcessingRepos, paymentDue2Processing, };
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.paymentDue2Processing = paymentDue2Processing;
|
|
30
|
+
const debug_1 = __importDefault(require("debug"));
|
|
31
|
+
const findPlaceOrderTransaction_1 = require("../findPlaceOrderTransaction");
|
|
32
|
+
const onOrderStatusChanged_1 = require("../onOrderStatusChanged");
|
|
33
|
+
const factory = __importStar(require("../../../factory"));
|
|
34
|
+
const debug = (0, debug_1.default)('chevre-domain:service:order');
|
|
35
|
+
/**
|
|
36
|
+
* 全決済取引確定を完了した注文に関して、アイテムを処理する
|
|
37
|
+
*/
|
|
38
|
+
function paymentDue2Processing(params) {
|
|
39
|
+
return async (repos, settings) => {
|
|
40
|
+
const placeOrderTransaction = await (0, findPlaceOrderTransaction_1.findPlaceOrderTransaction)({
|
|
41
|
+
project: { id: params.project.id },
|
|
42
|
+
confirmationNumber: params.confirmationNumber,
|
|
43
|
+
orderNumber: params.orderNumber
|
|
44
|
+
})(repos);
|
|
45
|
+
// const existingOrder: Pick<factory.order.IOrder, 'project'> = await repos.order.projectFieldsByOrderNumber({
|
|
46
|
+
// orderNumber: params.orderNumber,
|
|
47
|
+
// project: { id: params.project.id },
|
|
48
|
+
// inclusion: ['project']
|
|
49
|
+
// });
|
|
50
|
+
let order;
|
|
51
|
+
try {
|
|
52
|
+
order = await repos.order.changeStatus({
|
|
53
|
+
project: { id: params.project.id },
|
|
54
|
+
orderNumber: params.orderNumber,
|
|
55
|
+
orderStatus: factory.orderStatus.OrderProcessing,
|
|
56
|
+
previousOrderStatus: factory.orderStatus.OrderPaymentDue
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
catch (error) {
|
|
60
|
+
let throwsError = true;
|
|
61
|
+
// すでにステータスが進行していた場合、OrderPaymentDue->OrderProcessingの処理自体は成功しているので、後処理を続行する
|
|
62
|
+
order = await repos.order.projectFieldsByOrderNumber({
|
|
63
|
+
orderNumber: params.orderNumber,
|
|
64
|
+
project: { id: params.project.id },
|
|
65
|
+
inclusion: [
|
|
66
|
+
'orderNumber', 'broker', 'confirmationNumber', 'customer', 'dateReturned',
|
|
67
|
+
'name', 'orderDate', 'orderStatus', 'orderedItem', 'paymentMethods',
|
|
68
|
+
'previousOrderStatus', 'price', 'priceCurrency', 'project', 'returner', 'seller', 'typeOf'
|
|
69
|
+
] // explicit projection(2024-07-25~)
|
|
70
|
+
});
|
|
71
|
+
if (order.orderStatus === factory.orderStatus.OrderInTransit
|
|
72
|
+
|| order.orderStatus === factory.orderStatus.OrderDelivered
|
|
73
|
+
|| order.orderStatus === factory.orderStatus.OrderReturned) {
|
|
74
|
+
throwsError = false;
|
|
75
|
+
}
|
|
76
|
+
if (throwsError) {
|
|
77
|
+
throw error;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
if (params.useOnOrderStatusChanged) {
|
|
81
|
+
// 全acceptedOffersを検索(2023-12-08~)
|
|
82
|
+
// const acceptedOffers = await repos.acceptedOffer.searchAcceptedOffersByOrderNumber(
|
|
83
|
+
// {
|
|
84
|
+
// orderNumber: { $eq: order.orderNumber },
|
|
85
|
+
// project: { id: { $eq: params.project.id } }
|
|
86
|
+
// },
|
|
87
|
+
// ['itemOffered', 'offeredThrough']
|
|
88
|
+
// );
|
|
89
|
+
const { numAcceptedOffers } = await repos.acceptedOffer.countByOrderNumber({
|
|
90
|
+
orderNumber: { $eq: order.orderNumber },
|
|
91
|
+
project: { id: { $eq: params.project.id } }
|
|
92
|
+
});
|
|
93
|
+
const itemOfferedTypeOfs = await repos.acceptedOffer.distinctValues({ orderNumber: { $in: [params.orderNumber] } }, 'acceptedOffers.itemOffered.typeOf');
|
|
94
|
+
const serialNumbers = await repos.acceptedOffer.distinctValues({ orderNumber: { $in: [params.orderNumber] } }, 'acceptedOffers.serialNumber');
|
|
95
|
+
const offeredThroughIdentifier = (await repos.acceptedOffer.distinctValues({ orderNumber: { $in: [params.orderNumber] } }, 'acceptedOffers.offeredThrough.identifier')).shift();
|
|
96
|
+
debug('onAssetTransactionStatusChanged paymentDue2Processing: calling onOrderProcessing...', 'numAcceptedOffers:', numAcceptedOffers, 'itemOfferedTypeOfs:', itemOfferedTypeOfs, 'serialNumbers:', serialNumbers, 'offeredThroughIdentifier:', offeredThroughIdentifier);
|
|
97
|
+
await (0, onOrderStatusChanged_1.onOrderProcessing)({
|
|
98
|
+
order: {
|
|
99
|
+
...order,
|
|
100
|
+
// acceptedOffers,
|
|
101
|
+
numAcceptedOffers,
|
|
102
|
+
itemOfferedTypeOf: itemOfferedTypeOfs[0], // 1つしかない前提
|
|
103
|
+
serialNumbers,
|
|
104
|
+
offeredThroughIdentifier,
|
|
105
|
+
orderStatus: factory.orderStatus.OrderProcessing // 強制的にOrderProcessingとして処理する
|
|
106
|
+
},
|
|
107
|
+
placeOrderTransaction
|
|
108
|
+
})(repos, settings);
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { OrderRepo } from '../../../repo/order';
|
|
2
|
+
import type { TaskRepo } from '../../../repo/task';
|
|
3
|
+
import type { PlaceOrderRepo } from '../../../repo/transaction/placeOrder';
|
|
4
|
+
import { Settings } from '../../../settings';
|
|
5
|
+
declare function processing2inTransit(params: {
|
|
6
|
+
project: {
|
|
7
|
+
id: string;
|
|
8
|
+
};
|
|
9
|
+
orderNumber: string;
|
|
10
|
+
useOnOrderStatusChanged: boolean;
|
|
11
|
+
}): (repos: {
|
|
12
|
+
order: OrderRepo;
|
|
13
|
+
task: TaskRepo;
|
|
14
|
+
placeOrder: PlaceOrderRepo;
|
|
15
|
+
}, settings: Settings) => Promise<void>;
|
|
16
|
+
export { processing2inTransit };
|