@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.
Files changed (43) 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 +25 -0
  10. package/lib/chevre/service/order/onAssetTransactionStatusChanged/paymentDue2Processing.js +111 -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 +6 -28
  14. package/lib/chevre/service/order/onAssetTransactionStatusChanged.js +37 -345
  15. package/lib/chevre/service/order/onOrderStatusChanged/onOrderInTransit.d.ts +6 -5
  16. package/lib/chevre/service/order/placeOrder.d.ts +12 -11
  17. package/lib/chevre/service/order/sendOrder.d.ts +4 -4
  18. package/lib/chevre/service/order/sendOrder.js +2 -0
  19. package/lib/chevre/service/order.d.ts +3 -6
  20. package/lib/chevre/service/order.js +3 -9
  21. package/lib/chevre/service/payment/any/{fixOrderAsNeeded.d.ts → authorize/fixOrderAsNeeded.d.ts} +5 -5
  22. package/lib/chevre/service/payment/any/{fixOrderAsNeeded.js → authorize/fixOrderAsNeeded.js} +3 -3
  23. package/lib/chevre/service/payment/any/authorize.d.ts +90 -0
  24. package/lib/chevre/service/payment/any/authorize.js +225 -0
  25. package/lib/chevre/service/payment/any/findAcceptAction.d.ts +43 -0
  26. package/lib/chevre/service/payment/any/findAcceptAction.js +94 -0
  27. package/lib/chevre/service/payment/any/findAuthorizeAction.d.ts +41 -0
  28. package/lib/chevre/service/payment/any/findAuthorizeAction.js +83 -0
  29. package/lib/chevre/service/payment/any/findCheckAction.d.ts +44 -0
  30. package/lib/chevre/service/payment/any/findCheckAction.js +89 -0
  31. package/lib/chevre/service/payment/any/invalidatePaymentUrl.d.ts +28 -0
  32. package/lib/chevre/service/payment/any/invalidatePaymentUrl.js +185 -0
  33. package/lib/chevre/service/payment/any/processVoidPayTransaction.d.ts +29 -0
  34. package/lib/chevre/service/payment/any/processVoidPayTransaction.js +125 -0
  35. package/lib/chevre/service/payment/any/publishPaymentUrl.d.ts +64 -0
  36. package/lib/chevre/service/payment/any/publishPaymentUrl.js +133 -0
  37. package/lib/chevre/service/payment/any/voidPayTransaction.d.ts +31 -0
  38. package/lib/chevre/service/payment/any/voidPayTransaction.js +38 -0
  39. package/lib/chevre/service/payment/any.d.ts +8 -305
  40. package/lib/chevre/service/payment/any.js +17 -857
  41. package/lib/chevre/service/task/sendOrder.js +2 -2
  42. package/lib/chevre/service/transaction/placeOrder/exportTasksById.d.ts +5 -4
  43. 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
+ }
@@ -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 };