@chevre/domain 24.0.0-alpha.12 → 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.
Files changed (19) hide show
  1. package/lib/chevre/service/order/onAssetTransactionStatusChanged/isDeliverable.d.ts +16 -0
  2. package/lib/chevre/service/order/onAssetTransactionStatusChanged/isDeliverable.js +97 -0
  3. package/lib/chevre/service/order/onAssetTransactionStatusChanged/onPayTransactionCanceled.d.ts +21 -0
  4. package/lib/chevre/service/order/onAssetTransactionStatusChanged/onPayTransactionCanceled.js +86 -0
  5. package/lib/chevre/service/order/onAssetTransactionStatusChanged/onPayTransactionConfirmed.d.ts +22 -0
  6. package/lib/chevre/service/order/onAssetTransactionStatusChanged/onPayTransactionConfirmed.js +112 -0
  7. package/lib/chevre/service/order/onAssetTransactionStatusChanged/onReserveTransactionConfirmed.d.ts +22 -0
  8. package/lib/chevre/service/order/onAssetTransactionStatusChanged/onReserveTransactionConfirmed.js +74 -0
  9. package/lib/chevre/service/order/onAssetTransactionStatusChanged/paymentDue2Processing.d.ts +12 -8
  10. package/lib/chevre/service/order/onAssetTransactionStatusChanged/paymentDue2Processing.js +3 -0
  11. package/lib/chevre/service/order/onAssetTransactionStatusChanged/processing2inTransit.d.ts +16 -0
  12. package/lib/chevre/service/order/onAssetTransactionStatusChanged/processing2inTransit.js +74 -0
  13. package/lib/chevre/service/order/onAssetTransactionStatusChanged.d.ts +1 -11
  14. package/lib/chevre/service/order/onAssetTransactionStatusChanged.js +35 -271
  15. package/lib/chevre/service/order/onOrderStatusChanged/onOrderInTransit.d.ts +6 -5
  16. package/lib/chevre/service/order/sendOrder.d.ts +4 -4
  17. package/lib/chevre/service/order/sendOrder.js +2 -0
  18. package/lib/chevre/service/task/sendOrder.js +2 -2
  19. 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
+ }
@@ -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
+ }
@@ -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
+ }
@@ -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, };
@@ -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
+ }
@@ -4,6 +4,16 @@ import type { SettingRepo } from '../../../repo/setting';
4
4
  import type { TaskRepo } from '../../../repo/task';
5
5
  import type { PlaceOrderRepo } from '../../../repo/transaction/placeOrder';
6
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
+ */
7
17
  declare function paymentDue2Processing(params: {
8
18
  project: {
9
19
  id: string;
@@ -11,11 +21,5 @@ declare function paymentDue2Processing(params: {
11
21
  confirmationNumber: string;
12
22
  orderNumber: string;
13
23
  useOnOrderStatusChanged: boolean;
14
- }): (repos: {
15
- acceptedOffer: AcceptedOfferRepo;
16
- order: OrderRepo;
17
- setting: SettingRepo;
18
- task: TaskRepo;
19
- placeOrder: PlaceOrderRepo;
20
- }, settings: Settings) => Promise<void>;
21
- export { paymentDue2Processing, };
24
+ }): (repos: IPaymentDue2ProcessingRepos, settings: Settings) => Promise<void>;
25
+ export { IPaymentDue2ProcessingRepos, paymentDue2Processing, };
@@ -32,6 +32,9 @@ const findPlaceOrderTransaction_1 = require("../findPlaceOrderTransaction");
32
32
  const onOrderStatusChanged_1 = require("../onOrderStatusChanged");
33
33
  const factory = __importStar(require("../../../factory"));
34
34
  const debug = (0, debug_1.default)('chevre-domain:service:order');
35
+ /**
36
+ * 全決済取引確定を完了した注文に関して、アイテムを処理する
37
+ */
35
38
  function paymentDue2Processing(params) {
36
39
  return async (repos, settings) => {
37
40
  const placeOrderTransaction = await (0, findPlaceOrderTransaction_1.findPlaceOrderTransaction)({
@@ -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 };
@@ -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.processing2inTransit = processing2inTransit;
27
+ const onOrderStatusChanged_1 = require("../onOrderStatusChanged");
28
+ const factory = __importStar(require("../../../factory"));
29
+ function processing2inTransit(params) {
30
+ return async (repos, settings) => {
31
+ // const existingOrder: Pick<factory.order.IOrder, 'project'> = await repos.order.projectFieldsByOrderNumber({
32
+ // orderNumber: params.orderNumber,
33
+ // project: { id: params.project.id },
34
+ // inclusion: ['project']
35
+ // });
36
+ let order;
37
+ try {
38
+ order = await repos.order.changeStatus({
39
+ project: { id: params.project.id },
40
+ orderNumber: params.orderNumber,
41
+ orderStatus: factory.orderStatus.OrderInTransit,
42
+ previousOrderStatus: factory.orderStatus.OrderProcessing
43
+ });
44
+ }
45
+ catch (error) {
46
+ let throwsError = true;
47
+ // すでにステータスが進行していた場合、OrderProcessing->OrderInTransitの処理自体は成功しているので、後処理を続行する
48
+ order = await repos.order.projectFieldsByOrderNumber({
49
+ orderNumber: params.orderNumber,
50
+ project: { id: params.project.id },
51
+ inclusion: [
52
+ 'orderNumber', 'broker', 'confirmationNumber', 'customer', 'dateReturned',
53
+ 'name', 'orderDate', 'orderStatus', 'orderedItem', 'paymentMethods',
54
+ 'previousOrderStatus', 'price', 'priceCurrency', 'project', 'returner', 'seller', 'typeOf'
55
+ ] // explicit projection(2024-07-25~)
56
+ });
57
+ if (order.orderStatus === factory.orderStatus.OrderDelivered
58
+ || order.orderStatus === factory.orderStatus.OrderReturned) {
59
+ throwsError = false;
60
+ }
61
+ if (throwsError) {
62
+ throw error;
63
+ }
64
+ }
65
+ if (params.useOnOrderStatusChanged) {
66
+ await (0, onOrderStatusChanged_1.onOrderInTransit)({
67
+ order: {
68
+ ...order,
69
+ orderStatus: factory.orderStatus.OrderInTransit
70
+ }
71
+ })(repos, settings);
72
+ }
73
+ };
74
+ }
@@ -5,6 +5,7 @@ import type { SettingRepo } from '../../repo/setting';
5
5
  import type { TaskRepo } from '../../repo/task';
6
6
  import type { PlaceOrderRepo } from '../../repo/transaction/placeOrder';
7
7
  import { paymentDue2Processing } from './onAssetTransactionStatusChanged/paymentDue2Processing';
8
+ import { processing2inTransit } from './onAssetTransactionStatusChanged/processing2inTransit';
8
9
  import * as factory from '../../factory';
9
10
  import { Settings } from '../../settings';
10
11
  interface IOnAssetTransactionStatusChangedRepos {
@@ -16,15 +17,4 @@ interface IOnAssetTransactionStatusChangedRepos {
16
17
  placeOrder: PlaceOrderRepo;
17
18
  }
18
19
  declare function onAssetTransactionStatusChanged(params: factory.task.IData<factory.taskName.OnAssetTransactionStatusChanged>): (repos: IOnAssetTransactionStatusChangedRepos, settings: Settings) => Promise<void>;
19
- declare function processing2inTransit(params: {
20
- project: {
21
- id: string;
22
- };
23
- orderNumber: string;
24
- useOnOrderStatusChanged: boolean;
25
- }): (repos: {
26
- order: OrderRepo;
27
- task: TaskRepo;
28
- placeOrder: PlaceOrderRepo;
29
- }, settings: Settings) => Promise<void>;
30
20
  export { IOnAssetTransactionStatusChangedRepos, onAssetTransactionStatusChanged, paymentDue2Processing, processing2inTransit };
@@ -22,20 +22,18 @@ var __importStar = (this && this.__importStar) || function (mod) {
22
22
  __setModuleDefault(result, mod);
23
23
  return result;
24
24
  };
25
- var __importDefault = (this && this.__importDefault) || function (mod) {
26
- return (mod && mod.__esModule) ? mod : { "default": mod };
27
- };
28
25
  Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.paymentDue2Processing = void 0;
26
+ exports.processing2inTransit = exports.paymentDue2Processing = void 0;
30
27
  exports.onAssetTransactionStatusChanged = onAssetTransactionStatusChanged;
31
- exports.processing2inTransit = processing2inTransit;
32
- const debug_1 = __importDefault(require("debug"));
33
- const findPlaceOrderTransaction_1 = require("./findPlaceOrderTransaction");
34
- const onOrderStatusChanged_1 = require("./onOrderStatusChanged");
28
+ const isDeliverable_1 = require("./onAssetTransactionStatusChanged/isDeliverable");
29
+ const onPayTransactionCanceled_1 = require("./onAssetTransactionStatusChanged/onPayTransactionCanceled");
30
+ const onPayTransactionConfirmed_1 = require("./onAssetTransactionStatusChanged/onPayTransactionConfirmed");
31
+ const onReserveTransactionConfirmed_1 = require("./onAssetTransactionStatusChanged/onReserveTransactionConfirmed");
35
32
  const paymentDue2Processing_1 = require("./onAssetTransactionStatusChanged/paymentDue2Processing");
36
33
  Object.defineProperty(exports, "paymentDue2Processing", { enumerable: true, get: function () { return paymentDue2Processing_1.paymentDue2Processing; } });
34
+ const processing2inTransit_1 = require("./onAssetTransactionStatusChanged/processing2inTransit");
35
+ Object.defineProperty(exports, "processing2inTransit", { enumerable: true, get: function () { return processing2inTransit_1.processing2inTransit; } });
37
36
  const factory = __importStar(require("../../factory"));
38
- const debug = (0, debug_1.default)('chevre-domain:service:order');
39
37
  function onAssetTransactionStatusChanged(params) {
40
38
  return async (repos, settings) => {
41
39
  if (typeof params.useOnOrderStatusChanged !== 'boolean') {
@@ -47,70 +45,41 @@ function onAssetTransactionStatusChanged(params) {
47
45
  const confirmationNumber = params.purpose?.confirmationNumber;
48
46
  switch (params.object.typeOf) {
49
47
  case factory.assetTransactionType.Pay:
50
- // 確定時の決済方法区分指定(2023-08-29~)
51
- const specifiedPaymentMethodIdentifire = params.object?.object?.paymentMethod?.identifier;
52
- if (typeof specifiedPaymentMethodIdentifire === 'string' && specifiedPaymentMethodIdentifire.length > 0) {
53
- await fixPaymentMethodIdentifierIfPossible({
54
- project: { id: params.project.id },
55
- paymentMethodId: params.object.transactionNumber,
56
- paymentMethod: { identifier: specifiedPaymentMethodIdentifire },
57
- referencesOrder: { orderNumber }
58
- })(repos);
59
- }
60
- if (typeof orderNumber === 'string' && typeof confirmationNumber === 'string') {
61
- // PayTransactionのステータス検証
62
- const processable = await isProcessable({ project: { id: params.project.id }, orderNumber })(repos);
63
- if (processable) {
64
- await (0, paymentDue2Processing_1.paymentDue2Processing)({
65
- project: { id: params.project.id },
66
- confirmationNumber,
67
- orderNumber,
68
- useOnOrderStatusChanged: params.useOnOrderStatusChanged
69
- })(repos, settings);
48
+ await (0, onPayTransactionConfirmed_1.onPayTransactionConfirmed)({
49
+ ...params,
50
+ object: {
51
+ ...params.object,
52
+ status: params.object.status
70
53
  }
71
- }
54
+ })(repos, settings);
72
55
  break;
73
56
  case factory.assetTransactionType.COAReserveTransaction:
74
- if (typeof orderNumber === 'string' && typeof confirmationNumber === 'string') {
75
- // 基本的に1注文に1予約番号なのでdeliverable = true
76
- const deliverable = true;
77
- if (deliverable) {
78
- await processing2inTransit({
79
- project: { id: params.project.id },
80
- // confirmationNumber,
81
- orderNumber,
82
- useOnOrderStatusChanged: params.useOnOrderStatusChanged
83
- })(repos, settings);
57
+ await (0, onReserveTransactionConfirmed_1.onReserveTransactionConfirmed)({
58
+ ...params,
59
+ object: {
60
+ ...params.object,
61
+ status: params.object.status
84
62
  }
85
- }
63
+ })(repos, settings);
86
64
  break;
87
65
  case factory.assetTransactionType.Reserve:
88
- if (typeof orderNumber === 'string' && typeof confirmationNumber === 'string') {
89
- // ReserveTransactionのステータス検証
90
- const deliverable = await isDeliverable({
91
- project: { id: params.project.id },
92
- orderNumber,
93
- assetTransactionType: params.object.typeOf
94
- })(repos);
95
- if (deliverable) {
96
- await processing2inTransit({
97
- project: { id: params.project.id },
98
- // confirmationNumber,
99
- orderNumber,
100
- useOnOrderStatusChanged: params.useOnOrderStatusChanged
101
- })(repos, settings);
66
+ await (0, onReserveTransactionConfirmed_1.onReserveTransactionConfirmed)({
67
+ ...params,
68
+ object: {
69
+ ...params.object,
70
+ status: params.object.status
102
71
  }
103
- }
72
+ })(repos, settings);
104
73
  break;
105
74
  case factory.assetTransactionType.MoneyTransfer:
106
75
  if (typeof orderNumber === 'string' && typeof confirmationNumber === 'string') {
107
- const deliverable = await isDeliverable({
76
+ const deliverable = await (0, isDeliverable_1.isDeliverable)({
108
77
  project: { id: params.project.id },
109
78
  orderNumber,
110
79
  assetTransactionType: params.object.typeOf
111
80
  })(repos);
112
81
  if (deliverable) {
113
- await processing2inTransit({
82
+ await (0, processing2inTransit_1.processing2inTransit)({
114
83
  project: { id: params.project.id },
115
84
  // confirmationNumber,
116
85
  orderNumber,
@@ -121,13 +90,13 @@ function onAssetTransactionStatusChanged(params) {
121
90
  break;
122
91
  case factory.assetTransactionType.RegisterService:
123
92
  if (typeof orderNumber === 'string' && typeof confirmationNumber === 'string') {
124
- const deliverable = await isDeliverable({
93
+ const deliverable = await (0, isDeliverable_1.isDeliverable)({
125
94
  project: { id: params.project.id },
126
95
  orderNumber,
127
96
  assetTransactionType: params.object.typeOf
128
97
  })(repos);
129
98
  if (deliverable) {
130
- await processing2inTransit({
99
+ await (0, processing2inTransit_1.processing2inTransit)({
131
100
  project: { id: params.project.id },
132
101
  // confirmationNumber,
133
102
  orderNumber,
@@ -144,11 +113,12 @@ function onAssetTransactionStatusChanged(params) {
144
113
  case factory.transactionStatusType.Expired:
145
114
  switch (params.object.typeOf) {
146
115
  case factory.assetTransactionType.Pay:
147
- // 注文が存在すればキャンセル(2023-08-30~)
148
- await cancelOrderIfExist({
149
- project: { id: params.project.id },
150
- paymentMethodId: params.object.transactionNumber,
151
- useOnOrderStatusChanged: params.useOnOrderStatusChanged
116
+ await (0, onPayTransactionCanceled_1.onPayTransactionCanceled)({
117
+ ...params,
118
+ object: {
119
+ ...params.object,
120
+ status: params.object.status
121
+ }
152
122
  })(repos);
153
123
  break;
154
124
  default:
@@ -160,209 +130,3 @@ function onAssetTransactionStatusChanged(params) {
160
130
  }
161
131
  };
162
132
  }
163
- function fixPaymentMethodIdentifierIfPossible(params) {
164
- return async (repos) => {
165
- const referencedPayTransactions = await repos.assetTransaction.search({
166
- project: { id: { $eq: params.project.id } },
167
- typeOf: factory.assetTransactionType.Pay,
168
- statuses: [factory.transactionStatusType.Confirmed],
169
- transactionNumber: { $in: [params.paymentMethodId] }
170
- }, ['object']);
171
- const referencedPayTransaction = referencedPayTransactions.shift();
172
- if (referencedPayTransaction === undefined) {
173
- throw new factory.errors.NotFound(factory.assetTransactionType.Pay);
174
- }
175
- // 対面決済かつ決済取引上の決済方法区分と一致すれば、注文を変更
176
- if (referencedPayTransaction.object.typeOf === factory.service.paymentService.PaymentServiceType.FaceToFace
177
- && referencedPayTransaction.object.paymentMethod.identifier === params.paymentMethod.identifier) {
178
- await repos.order.fixPaymentMethodIdentifier({
179
- project: { id: params.project.id },
180
- orderNumber: params.referencesOrder.orderNumber,
181
- invoice: {
182
- paymentMethodId: params.paymentMethodId,
183
- paymentMethod: { identifier: params.paymentMethod.identifier }
184
- }
185
- });
186
- }
187
- };
188
- }
189
- function isProcessable(params) {
190
- return async (repos) => {
191
- // 注文のpaymentMethodIdを取得
192
- const order = await repos.order.projectFieldsByOrderNumber({
193
- orderNumber: params.orderNumber,
194
- project: { id: params.project.id },
195
- inclusion: ['paymentMethods']
196
- });
197
- // PayTransactionのステータス検証
198
- let allPayTransactionConfirmed;
199
- const paymentMethodIds = order.paymentMethods.filter((invoice) => typeof invoice.paymentMethodId === 'string' && invoice.paymentMethodId.length > 0)
200
- .map((invoice) => invoice.paymentMethodId);
201
- if (paymentMethodIds.length > 0) {
202
- const referencedPayTransactions = await repos.assetTransaction.search({
203
- project: { id: { $eq: params.project.id } },
204
- typeOf: factory.assetTransactionType.Pay,
205
- transactionNumber: { $in: paymentMethodIds }
206
- }, ['status']);
207
- allPayTransactionConfirmed =
208
- referencedPayTransactions.every((payTransation) => payTransation.status === factory.transactionStatusType.Confirmed);
209
- }
210
- else {
211
- allPayTransactionConfirmed = true;
212
- }
213
- return allPayTransactionConfirmed;
214
- };
215
- }
216
- function cancelOrderIfExist(params) {
217
- return async (repos) => {
218
- if (params.paymentMethodId.length === 0) {
219
- return;
220
- }
221
- // 注文のpaymentMethodIdを取得
222
- const ordersByPaymentMethodId = await repos.order.projectFields({
223
- limit: 1,
224
- page: 1,
225
- paymentMethods: {
226
- paymentMethodIds: [params.paymentMethodId]
227
- },
228
- project: { id: { $eq: params.project.id } }
229
- }, { inclusion: ['confirmationNumber', 'orderNumber'] });
230
- const orderByPaymentMethodId = ordersByPaymentMethodId.shift();
231
- if (orderByPaymentMethodId !== undefined) {
232
- const placeOrderTransaction = await (0, findPlaceOrderTransaction_1.findPlaceOrderTransaction)({
233
- project: { id: params.project.id },
234
- confirmationNumber: orderByPaymentMethodId.confirmationNumber,
235
- orderNumber: orderByPaymentMethodId.orderNumber
236
- })(repos);
237
- const order = await repos.order.changeStatus({
238
- project: { id: params.project.id },
239
- orderNumber: orderByPaymentMethodId.orderNumber,
240
- orderStatus: factory.orderStatus.OrderCancelled,
241
- previousOrderStatus: factory.orderStatus.OrderPaymentDue
242
- });
243
- if (params.useOnOrderStatusChanged) {
244
- await (0, onOrderStatusChanged_1.onOrderCancelled)({
245
- order: {
246
- orderDate: order.orderDate,
247
- orderNumber: order.orderNumber,
248
- orderStatus: factory.orderStatus.OrderCancelled // 強制的にOrderCancelledとして処理する
249
- },
250
- placeOrderTransaction
251
- })({
252
- task: repos.task
253
- });
254
- }
255
- }
256
- };
257
- }
258
- function isDeliverable(params) {
259
- return async (repos) => {
260
- let allReserveTransactionConfirmed = false;
261
- let allMoneyTransferTransactionConfirmed = false;
262
- let allRegisterServiceTransactionConfirmed = false;
263
- if (params.assetTransactionType === factory.assetTransactionType.Reserve) {
264
- allMoneyTransferTransactionConfirmed = true;
265
- allRegisterServiceTransactionConfirmed = true;
266
- // 注文のreservationNumberを取得
267
- const reservationNumbers = await repos.acceptedOffer.distinctValues({ orderNumber: { $in: [params.orderNumber] } }, 'acceptedOffers.itemOffered.reservationNumber');
268
- if (reservationNumbers.length > 0) {
269
- const referencedReserveTransactions = await repos.assetTransaction.search({
270
- project: { id: { $eq: params.project.id } },
271
- typeOf: factory.assetTransactionType.Reserve,
272
- transactionNumber: { $in: reservationNumbers }
273
- }, ['status']);
274
- allReserveTransactionConfirmed =
275
- referencedReserveTransactions.length === reservationNumbers.length
276
- && referencedReserveTransactions.every(({ status }) => status === factory.transactionStatusType.Confirmed);
277
- }
278
- else {
279
- allReserveTransactionConfirmed = true;
280
- }
281
- }
282
- else if (params.assetTransactionType === factory.assetTransactionType.MoneyTransfer) {
283
- allReserveTransactionConfirmed = true;
284
- allRegisterServiceTransactionConfirmed = true;
285
- // 注文のMoneyTransferTransaction.transactionNumberを取得
286
- const moneyTransferTransactionNumbers = await repos.acceptedOffer.distinctValues({ orderNumber: { $in: [params.orderNumber] } }, 'acceptedOffers.serialNumber');
287
- if (moneyTransferTransactionNumbers.length > 0) {
288
- debug('is deliverable?...', params.orderNumber, 'moneyTransferTransactionNumbers:', moneyTransferTransactionNumbers);
289
- const referencedMoneyTransferTransactions = await repos.assetTransaction.search({
290
- project: { id: { $eq: params.project.id } },
291
- typeOf: factory.assetTransactionType.MoneyTransfer,
292
- transactionNumber: { $in: moneyTransferTransactionNumbers }
293
- }, ['status']);
294
- allMoneyTransferTransactionConfirmed =
295
- referencedMoneyTransferTransactions.length === moneyTransferTransactionNumbers.length
296
- && referencedMoneyTransferTransactions.every(({ status }) => status === factory.transactionStatusType.Confirmed);
297
- }
298
- else {
299
- allMoneyTransferTransactionConfirmed = true;
300
- }
301
- }
302
- else if (params.assetTransactionType === factory.assetTransactionType.RegisterService) {
303
- allReserveTransactionConfirmed = true;
304
- allMoneyTransferTransactionConfirmed = true;
305
- const registerServiceTransactionNumbers = await repos.acceptedOffer.distinctValues({ orderNumber: { $in: [params.orderNumber] } }, 'acceptedOffers.serialNumber');
306
- if (registerServiceTransactionNumbers.length > 0) {
307
- const referencedRegisterServiceTransactions = await repos.assetTransaction.search({
308
- project: { id: { $eq: params.project.id } },
309
- typeOf: factory.assetTransactionType.RegisterService,
310
- transactionNumber: { $in: registerServiceTransactionNumbers }
311
- }, ['status']);
312
- allRegisterServiceTransactionConfirmed =
313
- referencedRegisterServiceTransactions.length === registerServiceTransactionNumbers.length
314
- && referencedRegisterServiceTransactions.every(({ status }) => status === factory.transactionStatusType.Confirmed);
315
- }
316
- else {
317
- allRegisterServiceTransactionConfirmed = true;
318
- }
319
- }
320
- return allReserveTransactionConfirmed && allMoneyTransferTransactionConfirmed && allRegisterServiceTransactionConfirmed;
321
- };
322
- }
323
- function processing2inTransit(params) {
324
- return async (repos, settings) => {
325
- // const existingOrder: Pick<factory.order.IOrder, 'project'> = await repos.order.projectFieldsByOrderNumber({
326
- // orderNumber: params.orderNumber,
327
- // project: { id: params.project.id },
328
- // inclusion: ['project']
329
- // });
330
- let order;
331
- try {
332
- order = await repos.order.changeStatus({
333
- project: { id: params.project.id },
334
- orderNumber: params.orderNumber,
335
- orderStatus: factory.orderStatus.OrderInTransit,
336
- previousOrderStatus: factory.orderStatus.OrderProcessing
337
- });
338
- }
339
- catch (error) {
340
- let throwsError = true;
341
- // すでにステータスが進行していた場合、OrderProcessing->OrderInTransitの処理自体は成功しているので、後処理を続行する
342
- order = await repos.order.projectFieldsByOrderNumber({
343
- orderNumber: params.orderNumber,
344
- project: { id: params.project.id },
345
- inclusion: [
346
- 'orderNumber', 'broker', 'confirmationNumber', 'customer', 'dateReturned',
347
- 'name', 'orderDate', 'orderStatus', 'orderedItem', 'paymentMethods',
348
- 'previousOrderStatus', 'price', 'priceCurrency', 'project', 'returner', 'seller', 'typeOf'
349
- ] // explicit projection(2024-07-25~)
350
- });
351
- if (order.orderStatus === factory.orderStatus.OrderDelivered
352
- || order.orderStatus === factory.orderStatus.OrderReturned) {
353
- throwsError = false;
354
- }
355
- if (throwsError) {
356
- throw error;
357
- }
358
- }
359
- if (params.useOnOrderStatusChanged) {
360
- await (0, onOrderStatusChanged_1.onOrderInTransit)({
361
- order: {
362
- ...order,
363
- orderStatus: factory.orderStatus.OrderInTransit
364
- }
365
- })(repos, settings);
366
- }
367
- };
368
- }
@@ -2,12 +2,13 @@ import type { TaskRepo } from '../../../repo/task';
2
2
  import type { PlaceOrderRepo } from '../../../repo/transaction/placeOrder';
3
3
  import * as factory from '../../../factory';
4
4
  import { Settings } from '../../../settings';
5
+ interface IOnOrderInTransitRepos {
6
+ task: TaskRepo;
7
+ placeOrder: PlaceOrderRepo;
8
+ }
5
9
  declare function onOrderInTransit(params: {
6
10
  order: Pick<factory.order.IOrder, 'id' | 'orderNumber' | 'broker' | 'confirmationNumber' | 'customer' | 'dateReturned' | 'name' | 'orderDate' | 'orderedItem' | 'paymentMethods' | 'previousOrderStatus' | 'price' | 'priceCurrency' | 'project' | 'returner' | 'seller' | 'typeOf'> & {
7
11
  orderStatus: factory.orderStatus.OrderInTransit;
8
12
  };
9
- }): (repos: {
10
- task: TaskRepo;
11
- placeOrder: PlaceOrderRepo;
12
- }, settings: Settings) => Promise<void>;
13
- export { onOrderInTransit };
13
+ }): (repos: IOnOrderInTransitRepos, settings: Settings) => Promise<void>;
14
+ export { IOnOrderInTransitRepos, onOrderInTransit };
@@ -6,8 +6,7 @@ import type { SettingRepo } from '../../repo/setting';
6
6
  import type { TaskRepo } from '../../repo/task';
7
7
  import type { PlaceOrderRepo } from '../../repo/transaction/placeOrder';
8
8
  import * as factory from '../../factory';
9
- import { Settings } from '../../settings';
10
- type ISendOperation<T> = (repos: {
9
+ interface ISendOrderRepos {
11
10
  acceptedOffer: AcceptedOfferRepo;
12
11
  action: ActionRepo;
13
12
  order: OrderRepo;
@@ -15,7 +14,8 @@ type ISendOperation<T> = (repos: {
15
14
  setting: SettingRepo;
16
15
  task: TaskRepo;
17
16
  placeOrder: PlaceOrderRepo;
18
- }, settings: Settings) => Promise<T>;
17
+ }
18
+ type ISendOperation<T> = (repos: ISendOrderRepos) => Promise<T>;
19
19
  /**
20
20
  * 注文を配送する
21
21
  */
@@ -35,4 +35,4 @@ declare function sendOrder(params: {
35
35
  };
36
36
  useOnOrderStatusChanged: boolean;
37
37
  }): ISendOperation<void>;
38
- export { sendOrder };
38
+ export { ISendOrderRepos, sendOrder };
@@ -33,6 +33,7 @@ const factory_1 = require("../delivery/factory");
33
33
  const findPlaceOrderTransaction_1 = require("./findPlaceOrderTransaction");
34
34
  const onOrderStatusChanged_1 = require("./onOrderStatusChanged");
35
35
  const factory = __importStar(require("../../factory"));
36
+ // import { Settings } from '../../settings';
36
37
  const debug = (0, debug_1.default)('chevre-domain:service:order');
37
38
  /**
38
39
  * 注文を配送する
@@ -127,6 +128,7 @@ function sendOrder(params) {
127
128
  });
128
129
  acceptedOffers = searchSlicedAcceptedOffersResult.acceptedOffers;
129
130
  debug('delivering...', order.orderNumber, acceptedOffers.map((offer) => `${offer.itemOffered.id}`), params.object.acceptedOffers, 'offerIndexBase:', offerIndexBase);
131
+ console.log('createOwnerships:', createOwnerships);
130
132
  // 所有権作成
131
133
  if (createOwnerships) {
132
134
  creatingOwnershipInfos = (0, factory_1.createOwnershipInfosFromOrder)({
@@ -37,7 +37,7 @@ const sendOrder_1 = require("../order/sendOrder");
37
37
  * タスク実行関数
38
38
  */
39
39
  function call(data) {
40
- return async ({ connection, settings }) => {
40
+ return async ({ connection }) => {
41
41
  await (0, sendOrder_1.sendOrder)({
42
42
  ...data,
43
43
  object: {
@@ -58,6 +58,6 @@ function call(data) {
58
58
  setting: new setting_1.SettingRepo(connection),
59
59
  task: new task_1.TaskRepo(connection),
60
60
  placeOrder: new placeOrder_1.PlaceOrderRepo(connection)
61
- }, settings);
61
+ });
62
62
  };
63
63
  }
package/package.json CHANGED
@@ -11,8 +11,8 @@
11
11
  "dependencies": {
12
12
  "@aws-sdk/client-cognito-identity-provider": "3.600.0",
13
13
  "@aws-sdk/credential-providers": "3.600.0",
14
- "@chevre/factory": "5.4.0-alpha.31",
15
- "@cinerino/sdk": "13.0.0",
14
+ "@chevre/factory": "5.4.0-alpha.32",
15
+ "@cinerino/sdk": "13.1.0",
16
16
  "@motionpicture/coa-service": "9.6.0",
17
17
  "@motionpicture/gmo-service": "5.4.0-alpha.1",
18
18
  "@sendgrid/client": "8.1.4",
@@ -99,5 +99,5 @@
99
99
  "postversion": "git push origin --tags",
100
100
  "prepublishOnly": "npm run clean && npm run build"
101
101
  },
102
- "version": "24.0.0-alpha.12"
102
+ "version": "24.0.0-alpha.13"
103
103
  }