@chevre/domain 21.25.0-alpha.2 → 21.25.0-alpha.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/example/src/chevre/deleteOwnershipInfosByWebApplication.ts +80 -0
- package/lib/chevre/repo/orderInTransaction.d.ts +5 -2
- package/lib/chevre/repo/orderInTransaction.js +12 -6
- package/lib/chevre/service/offer/product/factory.d.ts +10 -0
- package/lib/chevre/service/offer/product/factory.js +2 -1
- package/lib/chevre/service/offer/product.js +2 -1
- package/lib/chevre/service/transaction/placeOrderInProgress/confirm.d.ts +2 -0
- package/lib/chevre/service/transaction/placeOrderInProgress/confirm.js +87 -23
- package/lib/chevre/service/transaction/placeOrderInProgress/result/acceptedOffers.d.ts +4 -11
- package/lib/chevre/service/transaction/placeOrderInProgress/result/acceptedOffers.js +72 -95
- package/lib/chevre/service/transaction/placeOrderInProgress/result.d.ts +4 -3
- package/lib/chevre/service/transaction/placeOrderInProgress/result.js +14 -9
- package/lib/chevre/service/transaction/placeOrderInProgress/validation/validateMovieTicket.d.ts +17 -2
- package/lib/chevre/service/transaction/placeOrderInProgress/validation/validateMovieTicket.js +79 -67
- package/lib/chevre/service/transaction/placeOrderInProgress/validation.d.ts +3 -4
- package/lib/chevre/service/transaction/placeOrderInProgress/validation.js +23 -24
- package/package.json +1 -1
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
// tslint:disable:no-console
|
|
2
|
+
import * as mongoose from 'mongoose';
|
|
3
|
+
|
|
4
|
+
import { chevre } from '../../../lib/index';
|
|
5
|
+
|
|
6
|
+
// const project = { id: String(process.env.PROJECT_ID) };
|
|
7
|
+
|
|
8
|
+
// tslint:disable-next-line:max-func-body-length
|
|
9
|
+
async function main() {
|
|
10
|
+
await mongoose.connect(<string>process.env.MONGOLAB_URI, { autoIndex: false });
|
|
11
|
+
|
|
12
|
+
const ownershipInfoRepo = await chevre.repository.OwnershipInfo.createInstance(mongoose.connection);
|
|
13
|
+
|
|
14
|
+
const cursor = ownershipInfoRepo.getCursor(
|
|
15
|
+
{
|
|
16
|
+
'ownedBy.typeOf': { $eq: chevre.factory.creativeWorkType.WebApplication }
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
}
|
|
20
|
+
);
|
|
21
|
+
console.log('infos found');
|
|
22
|
+
|
|
23
|
+
let i = 0;
|
|
24
|
+
let updateCount = 0;
|
|
25
|
+
await cursor.eachAsync(async (doc) => {
|
|
26
|
+
i += 1;
|
|
27
|
+
const ownershipInfo: Pick<
|
|
28
|
+
chevre.factory.ownershipInfo.IOwnershipInfo<chevre.factory.ownershipInfo.IGood>,
|
|
29
|
+
'id' | 'project' | 'identifier' | 'ownedBy' | 'ownedFrom' | 'ownedThrough'
|
|
30
|
+
> = doc.toObject();
|
|
31
|
+
|
|
32
|
+
let noNeedToDelete = true;
|
|
33
|
+
let ownedById: string | undefined;
|
|
34
|
+
let ownedByTypeOf: string;
|
|
35
|
+
if (Array.isArray(ownershipInfo.ownedBy)) {
|
|
36
|
+
ownedByTypeOf = ownershipInfo.ownedBy[0].typeOf;
|
|
37
|
+
if (ownershipInfo.ownedBy.every(({ typeOf }) => typeOf === chevre.factory.creativeWorkType.WebApplication)) {
|
|
38
|
+
noNeedToDelete = false;
|
|
39
|
+
ownedById = ownershipInfo.ownedBy[0].id;
|
|
40
|
+
}
|
|
41
|
+
} else {
|
|
42
|
+
ownedByTypeOf = ownershipInfo.ownedBy.typeOf;
|
|
43
|
+
if (ownershipInfo.ownedBy.typeOf === chevre.factory.creativeWorkType.WebApplication) {
|
|
44
|
+
noNeedToDelete = false;
|
|
45
|
+
ownedById = ownershipInfo.ownedBy.id;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
if (noNeedToDelete) {
|
|
50
|
+
console.log(
|
|
51
|
+
'noNeedToDelete.',
|
|
52
|
+
ownershipInfo.project.id, ownershipInfo.identifier, ownershipInfo.id, ownedByTypeOf, ownershipInfo.ownedFrom,
|
|
53
|
+
i, updateCount);
|
|
54
|
+
} else {
|
|
55
|
+
console.log(
|
|
56
|
+
'deleting...',
|
|
57
|
+
ownershipInfo.project.id, ownershipInfo.identifier, ownershipInfo.id, ownedByTypeOf, ownershipInfo.ownedFrom,
|
|
58
|
+
i, updateCount);
|
|
59
|
+
if (typeof ownedById === 'string') {
|
|
60
|
+
await ownershipInfoRepo.deleteByIdAndOwnedById({
|
|
61
|
+
project: { id: ownershipInfo.project.id },
|
|
62
|
+
id: ownershipInfo.id,
|
|
63
|
+
ownedBy: { id: ownedById }
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
updateCount += 1;
|
|
67
|
+
console.log(
|
|
68
|
+
'deleted.',
|
|
69
|
+
ownershipInfo.project.id, ownershipInfo.identifier, ownershipInfo.id, ownedByTypeOf, ownershipInfo.ownedFrom,
|
|
70
|
+
i, updateCount);
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
console.log(i, 'infos checked');
|
|
75
|
+
console.log(updateCount, 'infos updated');
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
main()
|
|
79
|
+
.then()
|
|
80
|
+
.catch(console.error);
|
|
@@ -10,11 +10,14 @@ type IOrderInTransaction = Pick<factory.order.IOrder, 'orderNumber' | 'project'>
|
|
|
10
10
|
export declare class MongoRepository {
|
|
11
11
|
private readonly orderModel;
|
|
12
12
|
constructor(connection: Connection);
|
|
13
|
-
|
|
13
|
+
/**
|
|
14
|
+
* 取引進行中の注文からacceptedOffersを検索する
|
|
15
|
+
*/
|
|
16
|
+
findAcceptedOffersByOrderNumber(params: {
|
|
14
17
|
orderNumber: {
|
|
15
18
|
$eq: string;
|
|
16
19
|
};
|
|
17
|
-
}): Promise<
|
|
20
|
+
}): Promise<factory.order.IAcceptedOffer<factory.order.IItemOffered>[]>;
|
|
18
21
|
/**
|
|
19
22
|
* 注文を受注する
|
|
20
23
|
*/
|
|
@@ -32,15 +32,21 @@ class MongoRepository {
|
|
|
32
32
|
constructor(connection) {
|
|
33
33
|
this.orderModel = connection.model(order_1.modelName, (0, order_1.createSchema)());
|
|
34
34
|
}
|
|
35
|
-
|
|
35
|
+
/**
|
|
36
|
+
* 取引進行中の注文からacceptedOffersを検索する
|
|
37
|
+
*/
|
|
38
|
+
findAcceptedOffersByOrderNumber(params) {
|
|
36
39
|
return __awaiter(this, void 0, void 0, function* () {
|
|
37
|
-
|
|
38
|
-
return this.orderModel.find({
|
|
40
|
+
const doc = yield this.orderModel.findOne({
|
|
39
41
|
orderNumber: { $eq: params.orderNumber.$eq },
|
|
40
42
|
typeOf: { $eq: factory.transactionType.PlaceOrder }
|
|
41
|
-
})
|
|
42
|
-
.
|
|
43
|
-
.
|
|
43
|
+
}, { acceptedOffers: 1 })
|
|
44
|
+
.lean()
|
|
45
|
+
.exec();
|
|
46
|
+
if (doc === null) {
|
|
47
|
+
throw new factory.errors.NotFound('orderInTransaction');
|
|
48
|
+
}
|
|
49
|
+
return doc.acceptedOffers;
|
|
44
50
|
});
|
|
45
51
|
}
|
|
46
52
|
/**
|
|
@@ -13,6 +13,15 @@ export declare function createActionAttributes(params: {
|
|
|
13
13
|
transaction: factory.transaction.ITransaction<factory.transactionType.PlaceOrder>;
|
|
14
14
|
transactionNumber: string;
|
|
15
15
|
}): factory.action.authorize.offer.product.IAttributes;
|
|
16
|
+
type IResultAcceptedOffer = factory.action.authorize.offer.product.IResultAcceptedOffer;
|
|
17
|
+
export declare function responseBody2resultAcceptedOffer(params: {
|
|
18
|
+
project: {
|
|
19
|
+
id: string;
|
|
20
|
+
typeOf: factory.organizationType.Project;
|
|
21
|
+
};
|
|
22
|
+
responseBody: factory.assetTransaction.registerService.ITransaction;
|
|
23
|
+
acceptedOffer: factory.action.authorize.offer.product.IObject;
|
|
24
|
+
}): IResultAcceptedOffer;
|
|
16
25
|
export declare function createResult(params: {
|
|
17
26
|
project: {
|
|
18
27
|
id: string;
|
|
@@ -22,3 +31,4 @@ export declare function createResult(params: {
|
|
|
22
31
|
responseBody: factory.assetTransaction.registerService.ITransaction;
|
|
23
32
|
acceptedOffer: factory.action.authorize.offer.product.IObject;
|
|
24
33
|
}): factory.action.authorize.offer.product.IResult;
|
|
34
|
+
export {};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createResult = exports.createActionAttributes = exports.createRegisterServiceStartParams = void 0;
|
|
3
|
+
exports.createResult = exports.responseBody2resultAcceptedOffer = exports.createActionAttributes = exports.createRegisterServiceStartParams = void 0;
|
|
4
4
|
const moment = require("moment");
|
|
5
5
|
const factory = require("../../../factory");
|
|
6
6
|
function createRegisterServiceStartParams(params) {
|
|
@@ -150,6 +150,7 @@ function responseBody2resultAcceptedOffer(params) {
|
|
|
150
150
|
}
|
|
151
151
|
return acceptedOffers;
|
|
152
152
|
}
|
|
153
|
+
exports.responseBody2resultAcceptedOffer = responseBody2resultAcceptedOffer;
|
|
153
154
|
function createResult(params) {
|
|
154
155
|
const acceptedOffers4result = responseBody2resultAcceptedOffer(params);
|
|
155
156
|
// 金額計算
|
|
@@ -147,11 +147,12 @@ function authorize(params) {
|
|
|
147
147
|
});
|
|
148
148
|
requestBody = startParams;
|
|
149
149
|
responseBody = yield RegisterServiceTransaction.start(startParams)(repos);
|
|
150
|
+
const acceptedOffers4result = (0, factory_1.responseBody2resultAcceptedOffer)({ project: action.project, responseBody, acceptedOffer });
|
|
150
151
|
result = (0, factory_1.createResult)({ project: action.project, requestBody, responseBody, acceptedOffer });
|
|
151
152
|
yield (0, any_1.acceptOffer)({
|
|
152
153
|
project: transaction.project,
|
|
153
154
|
purpose: { id: transaction.id },
|
|
154
|
-
acceptedOffers:
|
|
155
|
+
acceptedOffers: acceptedOffers4result
|
|
155
156
|
})(repos);
|
|
156
157
|
}
|
|
157
158
|
catch (error) {
|
|
@@ -2,6 +2,7 @@ import type { MongoRepository as ActionRepo } from '../../../repo/action';
|
|
|
2
2
|
import type { MongoRepository as CodeRepo } from '../../../repo/code';
|
|
3
3
|
import type { RedisRepository as ConfirmationNumberRepo } from '../../../repo/confirmationNumber';
|
|
4
4
|
import type { MongoRepository as EmailMessageRepo } from '../../../repo/emailMessage';
|
|
5
|
+
import type { MongoRepository as OrderInTransactionRepo } from '../../../repo/orderInTransaction';
|
|
5
6
|
import type { RedisRepository as OrderNumberRepo } from '../../../repo/orderNumber';
|
|
6
7
|
import type { MongoRepository as ProjectRepo } from '../../../repo/project';
|
|
7
8
|
import type { MongoRepository as TransactionRepo } from '../../../repo/transaction';
|
|
@@ -13,6 +14,7 @@ interface IConfirmOperationRepos {
|
|
|
13
14
|
emailMessage?: EmailMessageRepo;
|
|
14
15
|
project: ProjectRepo;
|
|
15
16
|
transaction: TransactionRepo;
|
|
17
|
+
orderInTransaction: OrderInTransactionRepo;
|
|
16
18
|
orderNumber: OrderNumberRepo;
|
|
17
19
|
confirmationNumber: ConfirmationNumberRepo;
|
|
18
20
|
}
|
|
@@ -8,22 +8,12 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
8
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
|
-
var __rest = (this && this.__rest) || function (s, e) {
|
|
12
|
-
var t = {};
|
|
13
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
14
|
-
t[p] = s[p];
|
|
15
|
-
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
16
|
-
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
17
|
-
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
18
|
-
t[p[i]] = s[p[i]];
|
|
19
|
-
}
|
|
20
|
-
return t;
|
|
21
|
-
};
|
|
22
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
12
|
exports.confirm = void 0;
|
|
24
13
|
const moment = require("moment");
|
|
25
14
|
const errorHandler_1 = require("../../../errorHandler");
|
|
26
15
|
const factory = require("../../../factory");
|
|
16
|
+
const availableProductTypes_1 = require("../../../factory/availableProductTypes");
|
|
27
17
|
const potentialActions_1 = require("./potentialActions");
|
|
28
18
|
const publishCode_1 = require("./publishCode");
|
|
29
19
|
const publishConfirmationNumberIfNotExist_1 = require("./publishConfirmationNumberIfNotExist");
|
|
@@ -78,7 +68,10 @@ function confirm(params) {
|
|
|
78
68
|
expiresInSeconds: publishCodeExpiresInSeconds
|
|
79
69
|
})(repos);
|
|
80
70
|
}
|
|
81
|
-
const
|
|
71
|
+
// const acceptedOffers = await repos.orderInTransaction.findAcceptedOffersByOrderNumber({ orderNumber: { $eq: orderNumber } });
|
|
72
|
+
const { acceptedOffers } = dissolveAuthorizeActions(completedAuthorizeActions);
|
|
73
|
+
const { result, eventId, reservationIds } = createResult(Object.assign(Object.assign({}, params), { orderNumber, transaction: transaction, authorizeActions: completedAuthorizeActions, code,
|
|
74
|
+
acceptedOffers }));
|
|
82
75
|
// デフォルトEメールメッセージを検索
|
|
83
76
|
let emailMessageOnOrderSent;
|
|
84
77
|
if (repos.emailMessage !== undefined) {
|
|
@@ -125,7 +118,52 @@ function confirm(params) {
|
|
|
125
118
|
});
|
|
126
119
|
}
|
|
127
120
|
exports.confirm = confirm;
|
|
128
|
-
function
|
|
121
|
+
function dissolveAuthorizeActions(completedAuthorizeActions) {
|
|
122
|
+
const authorizeEventServiceOfferActions = completedAuthorizeActions
|
|
123
|
+
.filter((a) => (!Array.isArray(a.object))
|
|
124
|
+
&& a.object.typeOf === factory.action.authorize.offer.eventService.ObjectType.SeatReservation);
|
|
125
|
+
const authorizeProductOfferActions = completedAuthorizeActions
|
|
126
|
+
.filter((a) => Array.isArray(a.object)
|
|
127
|
+
&& a.object.length > 0
|
|
128
|
+
&& a.object.every(({ typeOf }) => typeOf === factory.offerType.Offer)
|
|
129
|
+
&& a.object.every(({ itemOffered }) => availableProductTypes_1.availableProductTypes.indexOf(itemOffered.typeOf) >= 0));
|
|
130
|
+
const authorizeMoneyTansferActions = completedAuthorizeActions
|
|
131
|
+
.filter((a) => {
|
|
132
|
+
var _a;
|
|
133
|
+
return (!Array.isArray(a.object))
|
|
134
|
+
&& a.object.typeOf === factory.offerType.Offer
|
|
135
|
+
&& ((_a = a.object.itemOffered) === null || _a === void 0 ? void 0 : _a.typeOf) === factory.actionType.MoneyTransfer;
|
|
136
|
+
});
|
|
137
|
+
const acceptedOffers = [];
|
|
138
|
+
authorizeEventServiceOfferActions.forEach((action) => {
|
|
139
|
+
var _a;
|
|
140
|
+
const acceptedOffersByAuthorizeAction = (_a = action.result) === null || _a === void 0 ? void 0 : _a.acceptedOffers;
|
|
141
|
+
if (Array.isArray(acceptedOffersByAuthorizeAction)) {
|
|
142
|
+
acceptedOffers.push(...acceptedOffersByAuthorizeAction);
|
|
143
|
+
}
|
|
144
|
+
});
|
|
145
|
+
authorizeProductOfferActions.forEach((action) => {
|
|
146
|
+
var _a;
|
|
147
|
+
const acceptedOffersByAuthorizeAction = (_a = action.result) === null || _a === void 0 ? void 0 : _a.acceptedOffers;
|
|
148
|
+
if (Array.isArray(acceptedOffersByAuthorizeAction)) {
|
|
149
|
+
acceptedOffers.push(...acceptedOffersByAuthorizeAction);
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
authorizeMoneyTansferActions.forEach((action) => {
|
|
153
|
+
var _a;
|
|
154
|
+
const acceptedOffersByAuthorizeAction = (_a = action.result) === null || _a === void 0 ? void 0 : _a.acceptedOffers;
|
|
155
|
+
if (Array.isArray(acceptedOffersByAuthorizeAction)) {
|
|
156
|
+
acceptedOffers.push(...acceptedOffersByAuthorizeAction);
|
|
157
|
+
}
|
|
158
|
+
});
|
|
159
|
+
return {
|
|
160
|
+
acceptedOffers,
|
|
161
|
+
authorizeEventServiceOfferActions,
|
|
162
|
+
authorizeProductOfferActions,
|
|
163
|
+
authorizeMoneyTansferActions
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
function createReservationIdsResult(order, acceptedOffers) {
|
|
129
167
|
var _a;
|
|
130
168
|
let eventId = '';
|
|
131
169
|
const reservationIds = [];
|
|
@@ -137,8 +175,8 @@ function createReservationIdsResult(order) {
|
|
|
137
175
|
// イベントIDが1つのみに対応
|
|
138
176
|
if (eventIdsByOrder.length === 1) {
|
|
139
177
|
eventId = eventIdsByOrder[0];
|
|
140
|
-
if (Array.isArray(
|
|
141
|
-
|
|
178
|
+
if (Array.isArray(acceptedOffers)) {
|
|
179
|
+
acceptedOffers.forEach((o) => {
|
|
142
180
|
if (o.itemOffered.typeOf === factory.reservationType.EventReservation
|
|
143
181
|
|| o.itemOffered.typeOf === factory.reservationType.BusReservation) {
|
|
144
182
|
reservationIds.push(o.itemOffered.id);
|
|
@@ -149,10 +187,31 @@ function createReservationIdsResult(order) {
|
|
|
149
187
|
}
|
|
150
188
|
return { eventId, reservationIds };
|
|
151
189
|
}
|
|
190
|
+
// tslint:disable-next-line:max-func-body-length
|
|
152
191
|
function createResult(params) {
|
|
153
192
|
const transaction = params.transaction;
|
|
193
|
+
const eventReservationAcceptedOffers = [];
|
|
194
|
+
const productAcceptedOffers = [];
|
|
195
|
+
const moneyTransferAcceptedOffers = [];
|
|
196
|
+
params.acceptedOffers.forEach((acceptedOffer) => {
|
|
197
|
+
const itemOfferedTypeOf = acceptedOffer.itemOffered.typeOf;
|
|
198
|
+
switch (itemOfferedTypeOf) {
|
|
199
|
+
case factory.reservationType.BusReservation:
|
|
200
|
+
case factory.reservationType.EventReservation:
|
|
201
|
+
eventReservationAcceptedOffers.push(acceptedOffer);
|
|
202
|
+
break;
|
|
203
|
+
case factory.permit.PermitType.Permit:
|
|
204
|
+
productAcceptedOffers.push(acceptedOffer);
|
|
205
|
+
break;
|
|
206
|
+
case factory.actionType.MoneyTransfer:
|
|
207
|
+
moneyTransferAcceptedOffers.push(acceptedOffer);
|
|
208
|
+
break;
|
|
209
|
+
default:
|
|
210
|
+
throw new factory.errors.NotImplemented(`${itemOfferedTypeOf} not implemented`);
|
|
211
|
+
}
|
|
212
|
+
});
|
|
154
213
|
// 取引の確定条件が全て整っているかどうか確認
|
|
155
|
-
(0, validation_1.validateTransaction)(transaction, params.authorizeActions);
|
|
214
|
+
(0, validation_1.validateTransaction)(transaction, params.authorizeActions, eventReservationAcceptedOffers);
|
|
156
215
|
// 注文作成
|
|
157
216
|
const order = (0, result_1.createOrder)({
|
|
158
217
|
orderNumber: params.orderNumber,
|
|
@@ -160,7 +219,10 @@ function createResult(params) {
|
|
|
160
219
|
orderDate: params.result.order.orderDate,
|
|
161
220
|
orderStatus: factory.orderStatus.OrderPaymentDue,
|
|
162
221
|
isGift: false,
|
|
163
|
-
authorizeActions: params.authorizeActions
|
|
222
|
+
authorizeActions: params.authorizeActions,
|
|
223
|
+
eventReservationAcceptedOffers,
|
|
224
|
+
productAcceptedOffers,
|
|
225
|
+
moneyTransferAcceptedOffers
|
|
164
226
|
});
|
|
165
227
|
(0, validation_1.validateEventOffers)({
|
|
166
228
|
transaction: transaction,
|
|
@@ -170,7 +232,8 @@ function createResult(params) {
|
|
|
170
232
|
// 注文オファー検証
|
|
171
233
|
(0, validation_1.validateNumItems)({
|
|
172
234
|
order: order,
|
|
173
|
-
result: params.result
|
|
235
|
+
result: params.result,
|
|
236
|
+
acceptedOffers: params.acceptedOffers
|
|
174
237
|
});
|
|
175
238
|
// 注文アイテム検証(2024-01-20~)
|
|
176
239
|
(0, validation_1.validateOrderedItem)({
|
|
@@ -188,19 +251,20 @@ function createResult(params) {
|
|
|
188
251
|
order.identifier = identifier;
|
|
189
252
|
order.url = url;
|
|
190
253
|
const authorizeActions = params.authorizeActions.map(({ id }) => ({ id }));
|
|
191
|
-
const { acceptedOffers
|
|
192
|
-
const orderAsResult =
|
|
254
|
+
// const { acceptedOffers, ...orderWithoutAcceptedOffers } = order;
|
|
255
|
+
// const orderAsResult: factory.transaction.placeOrder.IOrderAsResult = order;
|
|
193
256
|
let eventId;
|
|
194
257
|
let reservationIds;
|
|
195
258
|
if (params.options.expectsReservationIds) {
|
|
196
259
|
// ttts対応として予約IDリストとイベントIDを返却
|
|
197
|
-
const reservationIdsResult = createReservationIdsResult(order);
|
|
260
|
+
const reservationIdsResult = createReservationIdsResult(order, params.acceptedOffers);
|
|
198
261
|
eventId = reservationIdsResult.eventId;
|
|
199
262
|
reservationIds = reservationIdsResult.reservationIds;
|
|
200
263
|
}
|
|
201
264
|
return {
|
|
202
|
-
orderWithAcceptedOffers: order,
|
|
203
|
-
result: Object.assign({ order
|
|
265
|
+
// orderWithAcceptedOffers: order,
|
|
266
|
+
result: Object.assign({ order,
|
|
267
|
+
authorizeActions, numAcceptedOffers: params.acceptedOffers.length, options: {
|
|
204
268
|
ignoreAccpetedOffersFromResult: true
|
|
205
269
|
} }, (typeof params.code === 'string') ? { code: params.code } : undefined),
|
|
206
270
|
eventId,
|
|
@@ -2,24 +2,17 @@ import * as factory from '../../../../factory';
|
|
|
2
2
|
export type IAuthorizeMoneyTransferOffer = factory.action.authorize.offer.moneyTransfer.IAction;
|
|
3
3
|
export type IAuthorizeSeatReservationOffer = factory.action.authorize.offer.eventService.IAction<factory.service.webAPI.Identifier>;
|
|
4
4
|
export declare function createReservationAcceptedOffers(params: {
|
|
5
|
-
|
|
6
|
-
authorizeActions: factory.action.authorize.IAction<factory.action.authorize.IAttributes<any, any>>[];
|
|
5
|
+
eventReservationAcceptedOffers: factory.order.IAcceptedOffer<factory.order.IReservation>[];
|
|
7
6
|
}): {
|
|
8
|
-
reservationAcceptedOffers: factory.order.IAcceptedOffer<factory.order.IReservation>[];
|
|
9
7
|
reservationOrderItems: factory.order.IOrderedItem[];
|
|
10
8
|
};
|
|
11
9
|
export declare function createProductItems(params: {
|
|
12
|
-
transaction: factory.transaction.placeOrder.ITransaction;
|
|
13
|
-
authorizeActions: factory.action.authorize.IAction<factory.action.authorize.IAttributes<any, any>>[];
|
|
14
|
-
}): {
|
|
15
10
|
productAcceptedOffers: factory.order.IAcceptedOffer<factory.order.IPermit>[];
|
|
11
|
+
}): {
|
|
16
12
|
productOrderItems: factory.order.IOrderedItem[];
|
|
17
13
|
};
|
|
18
|
-
export declare function createMoneyTransferAcceptedOffers(
|
|
19
|
-
transaction: factory.transaction.placeOrder.ITransaction;
|
|
20
|
-
seller: factory.order.ISeller;
|
|
21
|
-
authorizeActions: factory.action.authorize.IAction<factory.action.authorize.IAttributes<any, any>>[];
|
|
22
|
-
}): {
|
|
14
|
+
export declare function createMoneyTransferAcceptedOffers(__: {
|
|
23
15
|
moneyTransferAcceptedOffers: factory.order.IAcceptedOffer<factory.order.IMoneyTransfer>[];
|
|
16
|
+
}): {
|
|
24
17
|
moneyTransferOrderItems: factory.order.IOrderedItem[];
|
|
25
18
|
};
|
|
@@ -2,35 +2,36 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.createMoneyTransferAcceptedOffers = exports.createProductItems = exports.createReservationAcceptedOffers = void 0;
|
|
4
4
|
const factory = require("../../../../factory");
|
|
5
|
-
const availableProductTypes_1 = require("../../../../factory/availableProductTypes");
|
|
6
5
|
function createReservationAcceptedOffers(params) {
|
|
7
|
-
const acceptedOffers = [];
|
|
6
|
+
// const acceptedOffers: factory.order.IAcceptedOffer<factory.order.IReservation>[] = [];
|
|
8
7
|
const orderedItems = [];
|
|
9
8
|
// 座席予約に対する承認アクション取り出す
|
|
10
|
-
const seatReservationAuthorizeActions = params.authorizeActions
|
|
11
|
-
|
|
9
|
+
// const seatReservationAuthorizeActions = <IAuthorizeSeatReservationOffer[]>params.authorizeActions
|
|
10
|
+
// .filter((a) => a.object.typeOf === factory.action.authorize.offer.eventService.ObjectType.SeatReservation);
|
|
12
11
|
const eventIds = [];
|
|
13
|
-
seatReservationAuthorizeActions.forEach((authorizeSeatReservationAction) => {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
}
|
|
12
|
+
// seatReservationAuthorizeActions.forEach((authorizeSeatReservationAction) => {
|
|
13
|
+
// const resultAcceptedOffers = authorizeSeatReservationAction.result?.acceptedOffers;
|
|
14
|
+
// });
|
|
15
|
+
if (Array.isArray(params.eventReservationAcceptedOffers) && params.eventReservationAcceptedOffers.length > 0) {
|
|
16
|
+
// acceptedOffers.push(...resultAcceptedOffers);
|
|
17
|
+
// プロダクトIDで最適化する
|
|
18
|
+
const reservationFor = params.eventReservationAcceptedOffers[0].itemOffered.reservationFor;
|
|
19
|
+
const issuedThrough = params.eventReservationAcceptedOffers[0].itemOffered.issuedThrough;
|
|
20
|
+
if (typeof (issuedThrough === null || issuedThrough === void 0 ? void 0 : issuedThrough.typeOf) === 'string') {
|
|
21
|
+
if (!eventIds.includes(String(reservationFor.id))) {
|
|
22
|
+
eventIds.push(String(reservationFor.id));
|
|
23
|
+
const orderedItem = reservationOffers2orderedItem({ reservationFor, issuedThrough });
|
|
24
|
+
orderedItems.push({
|
|
25
|
+
typeOf: 'OrderItem',
|
|
26
|
+
orderedItem
|
|
27
|
+
});
|
|
30
28
|
}
|
|
31
29
|
}
|
|
32
|
-
}
|
|
33
|
-
return {
|
|
30
|
+
}
|
|
31
|
+
return {
|
|
32
|
+
// reservationAcceptedOffers: acceptedOffers,
|
|
33
|
+
reservationOrderItems: orderedItems
|
|
34
|
+
};
|
|
34
35
|
}
|
|
35
36
|
exports.createReservationAcceptedOffers = createReservationAcceptedOffers;
|
|
36
37
|
function reservationOffers2orderedItem(params) {
|
|
@@ -82,85 +83,61 @@ function reservationOffers2orderedItem(params) {
|
|
|
82
83
|
}
|
|
83
84
|
}
|
|
84
85
|
function createProductItems(params) {
|
|
85
|
-
|
|
86
|
+
var _a;
|
|
87
|
+
// const acceptedOffers: factory.order.IAcceptedOffer<factory.order.IPermit>[] = [];
|
|
86
88
|
const orderedItems = [];
|
|
87
|
-
const authorizePaymentCardOfferActions = params.authorizeActions
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
89
|
+
// const authorizePaymentCardOfferActions = (<factory.action.authorize.offer.product.IAction[]>params.authorizeActions)
|
|
90
|
+
// .filter((a) =>
|
|
91
|
+
// Array.isArray(a.object)
|
|
92
|
+
// && a.object.length > 0
|
|
93
|
+
// && a.object[0].typeOf === factory.offerType.Offer
|
|
94
|
+
// && availableProductTypes.indexOf(a.object[0].itemOffered.typeOf) >= 0
|
|
95
|
+
// );
|
|
92
96
|
const productIds = [];
|
|
93
|
-
authorizePaymentCardOfferActions.forEach((a) => {
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
}
|
|
97
|
+
// authorizePaymentCardOfferActions.forEach((a) => {
|
|
98
|
+
// const resultAcceptedOffers = a.result?.acceptedOffers;
|
|
99
|
+
// });
|
|
100
|
+
if (Array.isArray(params.productAcceptedOffers) && params.productAcceptedOffers.length > 0) {
|
|
101
|
+
// acceptedOffers.push(...resultAcceptedOffers);
|
|
102
|
+
// プロダクトIDで最適化する
|
|
103
|
+
const issuedThrough = params.productAcceptedOffers[0].itemOffered.issuedThrough;
|
|
104
|
+
if (typeof (issuedThrough === null || issuedThrough === void 0 ? void 0 : issuedThrough.id) === 'string') {
|
|
105
|
+
if (!productIds.includes(issuedThrough.id)) {
|
|
106
|
+
productIds.push(issuedThrough.id);
|
|
107
|
+
orderedItems.push({
|
|
108
|
+
typeOf: 'OrderItem',
|
|
109
|
+
orderedItem: Object.assign({ id: String(issuedThrough.id), typeOf: issuedThrough.typeOf }, (typeof ((_a = issuedThrough.serviceType) === null || _a === void 0 ? void 0 : _a.typeOf) === 'string')
|
|
110
|
+
? { serviceType: issuedThrough.serviceType }
|
|
111
|
+
: undefined)
|
|
112
|
+
});
|
|
110
113
|
}
|
|
111
114
|
}
|
|
112
|
-
}
|
|
113
|
-
return {
|
|
115
|
+
}
|
|
116
|
+
return {
|
|
117
|
+
// productAcceptedOffers: acceptedOffers,
|
|
118
|
+
productOrderItems: orderedItems
|
|
119
|
+
};
|
|
114
120
|
}
|
|
115
121
|
exports.createProductItems = createProductItems;
|
|
116
|
-
function createMoneyTransferAcceptedOffers(
|
|
122
|
+
function createMoneyTransferAcceptedOffers(__) {
|
|
117
123
|
// 通貨転送承認アクション
|
|
118
|
-
const authorizeMoneyTansferActions = params.authorizeActions
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
const acceptedOffers = [];
|
|
124
|
+
// const authorizeMoneyTansferActions = (<IAuthorizeMoneyTransferOffer[]>params.authorizeActions)
|
|
125
|
+
// .filter((a) => a.object.typeOf === factory.offerType.Offer)
|
|
126
|
+
// .filter((a) => a.object.itemOffered?.typeOf === factory.actionType.MoneyTransfer);
|
|
127
|
+
// const acceptedOffers: factory.order.IAcceptedOffer<factory.order.IMoneyTransfer>[] = [];
|
|
122
128
|
const orderedItems = [];
|
|
123
|
-
authorizeMoneyTansferActions.forEach((authorizeMoneyTansferAction) => {
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
//
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
// const itemOffered: factory.order.IMoneyTransfer = {
|
|
137
|
-
// typeOf: factory.actionType.MoneyTransfer,
|
|
138
|
-
// amount: {
|
|
139
|
-
// typeOf: 'MonetaryAmount',
|
|
140
|
-
// value: amountValue,
|
|
141
|
-
// currency
|
|
142
|
-
// },
|
|
143
|
-
// toLocation: {
|
|
144
|
-
// typeOf: authorizeMoneyTansferAction.object.itemOffered.toLocation.typeOf,
|
|
145
|
-
// // いったんマスク
|
|
146
|
-
// identifier: 'xxx',
|
|
147
|
-
// issuedThrough: { id: authorizeMoneyTansferAction.object.itemOffered.toLocation.issuedThrough?.id }
|
|
148
|
-
// },
|
|
149
|
-
// object: {
|
|
150
|
-
// pendingTransaction: {
|
|
151
|
-
// typeOf: pendingTransaction.typeOf,
|
|
152
|
-
// // MonetaryAmountの識別子として、MoneyTransfer取引番号をセットする
|
|
153
|
-
// transactionNumber: String(pendingTransaction.transactionNumber)
|
|
154
|
-
// }
|
|
155
|
-
// },
|
|
156
|
-
// name: `${amountValue} ${currency}`
|
|
157
|
-
// };
|
|
158
|
-
// acceptedOffers.push({
|
|
159
|
-
// typeOf: factory.offerType.Offer,
|
|
160
|
-
// itemOffered
|
|
161
|
-
// });
|
|
162
|
-
// }
|
|
163
|
-
});
|
|
164
|
-
return { moneyTransferAcceptedOffers: acceptedOffers, moneyTransferOrderItems: orderedItems };
|
|
129
|
+
// authorizeMoneyTansferActions.forEach((authorizeMoneyTansferAction) => {
|
|
130
|
+
// if (authorizeMoneyTansferAction.result === undefined) {
|
|
131
|
+
// throw new factory.errors.Argument('Transaction', 'authorize money transfer offer result does not exist');
|
|
132
|
+
// }
|
|
133
|
+
// const resultAcceptedOffers = authorizeMoneyTansferAction.result?.acceptedOffers;
|
|
134
|
+
// if (Array.isArray(resultAcceptedOffers) && resultAcceptedOffers.length > 0) {
|
|
135
|
+
// acceptedOffers.push(...resultAcceptedOffers);
|
|
136
|
+
// }
|
|
137
|
+
// });
|
|
138
|
+
return {
|
|
139
|
+
// moneyTransferAcceptedOffers: acceptedOffers,
|
|
140
|
+
moneyTransferOrderItems: orderedItems
|
|
141
|
+
};
|
|
165
142
|
}
|
|
166
143
|
exports.createMoneyTransferAcceptedOffers = createMoneyTransferAcceptedOffers;
|
|
@@ -10,6 +10,7 @@ export declare function createOrder(params: {
|
|
|
10
10
|
orderStatus: factory.orderStatus;
|
|
11
11
|
isGift: boolean;
|
|
12
12
|
authorizeActions: factory.action.authorize.IAction<factory.action.authorize.IAttributes<any, any>>[];
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
eventReservationAcceptedOffers: factory.order.IAcceptedOffer<factory.order.IReservation>[];
|
|
14
|
+
productAcceptedOffers: factory.order.IAcceptedOffer<factory.order.IPermit>[];
|
|
15
|
+
moneyTransferAcceptedOffers: factory.order.IAcceptedOffer<factory.order.IMoneyTransfer>[];
|
|
16
|
+
}): factory.transaction.placeOrder.IOrderAsResult & {};
|
|
@@ -11,23 +11,28 @@ function createOrder(params) {
|
|
|
11
11
|
const seller = createSeller({ transaction: params.transaction });
|
|
12
12
|
const customer = createCustomer({ transaction: params.transaction });
|
|
13
13
|
// 予約がある場合
|
|
14
|
-
const { reservationAcceptedOffers, reservationOrderItems } =
|
|
14
|
+
// const { reservationAcceptedOffers, reservationOrderItems } = createReservationAcceptedOffers(params);
|
|
15
|
+
const { reservationOrderItems } = (0, acceptedOffers_1.createReservationAcceptedOffers)(params);
|
|
15
16
|
// 通貨転送がある場合
|
|
16
|
-
const { moneyTransferAcceptedOffers, moneyTransferOrderItems } =
|
|
17
|
+
// const { moneyTransferAcceptedOffers, moneyTransferOrderItems } = createMoneyTransferAcceptedOffers({ ...params, seller: seller });
|
|
18
|
+
const { moneyTransferOrderItems } = (0, acceptedOffers_1.createMoneyTransferAcceptedOffers)(params);
|
|
17
19
|
// プロダクトがある場合
|
|
18
|
-
const { productAcceptedOffers, productOrderItems } =
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
20
|
+
// const { productAcceptedOffers, productOrderItems } = createProductItems(params);
|
|
21
|
+
const { productOrderItems } = (0, acceptedOffers_1.createProductItems)(params);
|
|
22
|
+
// const acceptedOffers: factory.order.IAcceptedOffer<factory.order.IItemOffered>[] = [
|
|
23
|
+
// ...reservationAcceptedOffers,
|
|
24
|
+
// ...moneyTransferAcceptedOffers,
|
|
25
|
+
// ...productAcceptedOffers
|
|
26
|
+
// ];
|
|
24
27
|
const orderedItems = [...reservationOrderItems, ...moneyTransferOrderItems, ...productOrderItems];
|
|
25
28
|
// 決済方法をセット
|
|
26
29
|
const { paymentMethods, price } = createPaymentMethods({ transaction: params.transaction, authorizeActions: params.authorizeActions });
|
|
27
30
|
const discounts = [];
|
|
28
31
|
const name = (typeof params.transaction.object.name === 'string') ? params.transaction.object.name : undefined;
|
|
29
32
|
const broker = (typeof ((_a = params.transaction.object.broker) === null || _a === void 0 ? void 0 : _a.typeOf) === 'string') ? params.transaction.object.broker : undefined;
|
|
30
|
-
return Object.assign(Object.assign({ project: params.transaction.project, typeOf: factory.order.OrderType.Order, seller: seller, customer: customer, price: price, priceCurrency: factory.priceCurrency.JPY, paymentMethods: paymentMethods, discounts: discounts, confirmationNumber: '', orderNumber: params.orderNumber, orderedItem: orderedItems,
|
|
33
|
+
return Object.assign(Object.assign({ project: params.transaction.project, typeOf: factory.order.OrderType.Order, seller: seller, customer: customer, price: price, priceCurrency: factory.priceCurrency.JPY, paymentMethods: paymentMethods, discounts: discounts, confirmationNumber: '', orderNumber: params.orderNumber, orderedItem: orderedItems,
|
|
34
|
+
// acceptedOffers: acceptedOffers,
|
|
35
|
+
url: '', orderStatus: params.orderStatus, orderDate: params.orderDate, identifier: [], isGift: params.isGift }, (typeof name === 'string') ? { name } : undefined), (typeof (broker === null || broker === void 0 ? void 0 : broker.typeOf) === 'string') ? { broker } : undefined);
|
|
31
36
|
}
|
|
32
37
|
exports.createOrder = createOrder;
|
|
33
38
|
function createSeller(params) {
|
package/lib/chevre/service/transaction/placeOrderInProgress/validation/validateMovieTicket.d.ts
CHANGED
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
import * as factory from '../../../../factory';
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* 興行オファー承認に対して決済承認条件が整っているかどうか検証する
|
|
4
|
+
* 決済方法区分ごとに検証
|
|
4
5
|
*/
|
|
5
|
-
export declare function validateMovieTicket(
|
|
6
|
+
export declare function validateMovieTicket(
|
|
7
|
+
/**
|
|
8
|
+
* 決済方法区分
|
|
9
|
+
*/
|
|
10
|
+
paymentMethodType: string, transaction: {
|
|
11
|
+
id: string;
|
|
12
|
+
},
|
|
13
|
+
/**
|
|
14
|
+
* 決済承認アクション
|
|
15
|
+
*/
|
|
16
|
+
authorizeActions: factory.action.authorize.IAction<factory.action.authorize.IAttributes<any, any>>[],
|
|
17
|
+
/**
|
|
18
|
+
* 受け入れられた興行オファー
|
|
19
|
+
*/
|
|
20
|
+
eventReservationAcceptedOffers: factory.order.IAcceptedOffer<factory.order.IReservation>[]): void;
|
package/lib/chevre/service/transaction/placeOrderInProgress/validation/validateMovieTicket.js
CHANGED
|
@@ -6,11 +6,25 @@ exports.validateMovieTicket = void 0;
|
|
|
6
6
|
*/
|
|
7
7
|
const createDebug = require("debug");
|
|
8
8
|
const factory = require("../../../../factory");
|
|
9
|
-
const debug = createDebug('
|
|
9
|
+
const debug = createDebug('chevre-domain:service:validateMovieTicket');
|
|
10
10
|
/**
|
|
11
|
-
*
|
|
11
|
+
* 興行オファー承認に対して決済承認条件が整っているかどうか検証する
|
|
12
|
+
* 決済方法区分ごとに検証
|
|
12
13
|
*/
|
|
13
|
-
|
|
14
|
+
// tslint:disable-next-line:max-func-body-length
|
|
15
|
+
function validateMovieTicket(
|
|
16
|
+
/**
|
|
17
|
+
* 決済方法区分
|
|
18
|
+
*/
|
|
19
|
+
paymentMethodType, transaction,
|
|
20
|
+
/**
|
|
21
|
+
* 決済承認アクション
|
|
22
|
+
*/
|
|
23
|
+
authorizeActions,
|
|
24
|
+
/**
|
|
25
|
+
* 受け入れられた興行オファー
|
|
26
|
+
*/
|
|
27
|
+
eventReservationAcceptedOffers) {
|
|
14
28
|
const authorizeMovieTicketActions = authorizeActions.filter((a) => {
|
|
15
29
|
var _a, _b;
|
|
16
30
|
const resultAsInvoice = (Array.isArray(a.result))
|
|
@@ -22,11 +36,14 @@ function validateMovieTicket(paymentMethodType, transaction, authorizeActions) {
|
|
|
22
36
|
&& ((_b = resultAsInvoice === null || resultAsInvoice === void 0 ? void 0 : resultAsInvoice.paymentMethodAsObject) === null || _b === void 0 ? void 0 : _b.typeOf) === paymentMethodType;
|
|
23
37
|
// && a.result?.paymentMethod === paymentMethodType
|
|
24
38
|
});
|
|
25
|
-
const seatReservationAuthorizeActions = authorizeActions.filter(
|
|
39
|
+
// const seatReservationAuthorizeActions = (<IAuthorizeSeatReservationOffer[]>authorizeActions).filter(
|
|
40
|
+
// (a) => a.object.typeOf === factory.action.authorize.offer.eventService.ObjectType.SeatReservation
|
|
41
|
+
// );
|
|
26
42
|
// 予約によって必要とされるMovieTicket
|
|
27
43
|
const requiredMovieTickets = authorizeSeatReservationActions2requiredMovieTickets({
|
|
28
44
|
paymentMethodType,
|
|
29
|
-
seatReservationAuthorizeActions
|
|
45
|
+
// seatReservationAuthorizeActions
|
|
46
|
+
acceptedOffers: eventReservationAcceptedOffers
|
|
30
47
|
});
|
|
31
48
|
debug(requiredMovieTickets.length, 'movie tickets required', 'transaction:', transaction.id);
|
|
32
49
|
const authorizedMovieTickets = [];
|
|
@@ -105,76 +122,71 @@ function validateAppliesToMovieTicketIdentifiers(params) {
|
|
|
105
122
|
}
|
|
106
123
|
});
|
|
107
124
|
}
|
|
108
|
-
|
|
125
|
+
/**
|
|
126
|
+
* 予約オファーリストから必要なmovieTicketsを生成する
|
|
127
|
+
*/
|
|
109
128
|
function authorizeSeatReservationActions2requiredMovieTickets(params) {
|
|
110
129
|
const paymentMethodType = params.paymentMethodType;
|
|
111
|
-
const seatReservationAuthorizeActions = params.seatReservationAuthorizeActions;
|
|
130
|
+
// const seatReservationAuthorizeActions = params.seatReservationAuthorizeActions;
|
|
112
131
|
// ムビチケオファーを受け付けた座席予約を検索する
|
|
113
132
|
const requiredMovieTickets = [];
|
|
114
133
|
// tslint:disable-next-line:max-func-body-length
|
|
115
|
-
seatReservationAuthorizeActions.forEach((action) => {
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
offeredTicketedSeat = acceptedTicketedSeatByItemOffered;
|
|
134
|
+
// seatReservationAuthorizeActions.forEach((action) => {
|
|
135
|
+
// const acceptedOffers = action.result?.acceptedOffers;
|
|
136
|
+
// });
|
|
137
|
+
if (Array.isArray(params.acceptedOffers)) {
|
|
138
|
+
params.acceptedOffers.forEach((offer) => {
|
|
139
|
+
var _a, _b, _c, _d;
|
|
140
|
+
let offeredTicketedSeat;
|
|
141
|
+
const acceptedTicketedSeatByItemOffered = (_b = (_a = offer.itemOffered) === null || _a === void 0 ? void 0 : _a.reservedTicket) === null || _b === void 0 ? void 0 : _b.ticketedSeat;
|
|
142
|
+
if (typeof (acceptedTicketedSeatByItemOffered === null || acceptedTicketedSeatByItemOffered === void 0 ? void 0 : acceptedTicketedSeatByItemOffered.typeOf) === 'string') {
|
|
143
|
+
offeredTicketedSeat = acceptedTicketedSeatByItemOffered;
|
|
144
|
+
}
|
|
145
|
+
if (typeof (offeredTicketedSeat === null || offeredTicketedSeat === void 0 ? void 0 : offeredTicketedSeat.typeOf) === 'string') {
|
|
146
|
+
const ticketedSeat4MovieTicket = offeredTicketedSeat;
|
|
147
|
+
const eventOfferedThroughIdentifier = (_c = offer.offeredThrough) === null || _c === void 0 ? void 0 : _c.identifier;
|
|
148
|
+
if (typeof eventOfferedThroughIdentifier !== 'string') {
|
|
149
|
+
throw new factory.errors.NotFound('offer.offeredThrough.identifier', `offer.offeredThrough.identifier undefined [serialNumber:${offer.serialNumber}]`);
|
|
132
150
|
}
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
151
|
+
// シンプルに単価仕様のappliesToMovieTicketを参照してrequiredMovieTicketsを作成する(2022-07-28~)
|
|
152
|
+
const unitPriceSpec = (_d = offer.priceSpecification) === null || _d === void 0 ? void 0 : _d.priceComponent.find((component) => {
|
|
153
|
+
return component.typeOf === factory.priceSpecificationType.UnitPriceSpecification
|
|
154
|
+
&& (!Array.isArray(component.appliesToAddOn));
|
|
155
|
+
});
|
|
156
|
+
if (unitPriceSpec === undefined) {
|
|
157
|
+
throw new factory.errors.NotFound('UnitPriceSpecification of acceptedOffer');
|
|
158
|
+
}
|
|
159
|
+
if (offer.itemOffered.reservationFor.typeOf !== factory.eventType.ScreeningEvent) {
|
|
160
|
+
throw new factory.errors.NotImplemented(`offer.itemOffered.reservationFor.typeOf not imelemented [${offer.itemOffered.reservationFor.typeOf}]`);
|
|
161
|
+
}
|
|
162
|
+
const reservationFor4movieTicket = {
|
|
163
|
+
typeOf: offer.itemOffered.reservationFor.typeOf,
|
|
164
|
+
id: offer.itemOffered.reservationFor.id
|
|
165
|
+
// offers: { offeredThrough: { identifier: eventOfferedThroughIdentifier } }
|
|
166
|
+
};
|
|
167
|
+
// 指定された決済方法の適用決済カードリスト
|
|
168
|
+
let appliesToMovieTickets4paymentMethod = [];
|
|
169
|
+
const appliesToMovieTickets4reservation = unitPriceSpec.appliesToMovieTicket;
|
|
170
|
+
if (Array.isArray(appliesToMovieTickets4reservation)) {
|
|
171
|
+
appliesToMovieTickets4paymentMethod = appliesToMovieTickets4reservation.filter((a) => {
|
|
172
|
+
return a.serviceOutput.typeOf === paymentMethodType;
|
|
141
173
|
});
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
// } else if (typeof appliesToMovieTickets4reservation?.identifier === 'string') {
|
|
154
|
-
// // Arrayでない場合を廃止(2022-08-01~)
|
|
155
|
-
// throw new factory.errors.NotImplemented('appliesToMovieTickets.typeOf as string not implemented');
|
|
156
|
-
}
|
|
157
|
-
if (Array.isArray(appliesToMovieTickets4paymentMethod) && appliesToMovieTickets4paymentMethod.length > 0) {
|
|
158
|
-
appliesToMovieTickets4paymentMethod.forEach((appliesToMovieTicket) => {
|
|
159
|
-
requiredMovieTickets.push({
|
|
160
|
-
// project: action.project,
|
|
161
|
-
typeOf: paymentMethodType,
|
|
162
|
-
identifier: String(appliesToMovieTicket.identifier),
|
|
163
|
-
serviceType: appliesToMovieTicket.serviceType,
|
|
164
|
-
serviceOutput: {
|
|
165
|
-
reservationFor: {
|
|
166
|
-
typeOf: event.typeOf,
|
|
167
|
-
id: event.id,
|
|
168
|
-
offers: { offeredThrough: { identifier: eventOfferedThroughIdentifier } }
|
|
169
|
-
},
|
|
170
|
-
reservedTicket: { ticketedSeat: ticketedSeat4MovieTicket }
|
|
171
|
-
}
|
|
172
|
-
});
|
|
174
|
+
}
|
|
175
|
+
if (Array.isArray(appliesToMovieTickets4paymentMethod) && appliesToMovieTickets4paymentMethod.length > 0) {
|
|
176
|
+
appliesToMovieTickets4paymentMethod.forEach((appliesToMovieTicket) => {
|
|
177
|
+
requiredMovieTickets.push({
|
|
178
|
+
typeOf: paymentMethodType,
|
|
179
|
+
identifier: String(appliesToMovieTicket.identifier),
|
|
180
|
+
serviceType: appliesToMovieTicket.serviceType,
|
|
181
|
+
serviceOutput: {
|
|
182
|
+
reservationFor: reservationFor4movieTicket,
|
|
183
|
+
reservedTicket: { ticketedSeat: ticketedSeat4MovieTicket }
|
|
184
|
+
}
|
|
173
185
|
});
|
|
174
|
-
}
|
|
186
|
+
});
|
|
175
187
|
}
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
}
|
|
188
|
+
}
|
|
189
|
+
});
|
|
190
|
+
}
|
|
179
191
|
return requiredMovieTickets;
|
|
180
192
|
}
|
|
@@ -8,15 +8,14 @@ export type IUnitPriceSpecification = factory.priceSpecification.IPriceSpecifica
|
|
|
8
8
|
/**
|
|
9
9
|
* 取引が確定可能な状態かどうかをチェックする
|
|
10
10
|
*/
|
|
11
|
-
export declare function validateTransaction(transaction: factory.transaction.placeOrder.ITransaction, authorizeActions: factory.action.authorize.IAction<factory.action.authorize.IAttributes<any, any>>[]): void;
|
|
11
|
+
export declare function validateTransaction(transaction: factory.transaction.placeOrder.ITransaction, authorizeActions: factory.action.authorize.IAction<factory.action.authorize.IAttributes<any, any>>[], eventReservationAcceptedOffers: factory.order.IAcceptedOffer<factory.order.IReservation>[]): void;
|
|
12
12
|
export type IOrderURLGenerator = (order: factory.order.IOrder) => string;
|
|
13
13
|
export declare function validateNumItems(params: {
|
|
14
|
-
order: factory.transaction.placeOrder.IOrderAsResult
|
|
15
|
-
acceptedOffers: factory.order.IAcceptedOffer<factory.order.IItemOffered>[];
|
|
16
|
-
};
|
|
14
|
+
order: factory.transaction.placeOrder.IOrderAsResult;
|
|
17
15
|
result: {
|
|
18
16
|
order: PlaceOrderFactory.IResultOrderParams;
|
|
19
17
|
};
|
|
18
|
+
acceptedOffers: factory.order.IAcceptedOffer<factory.order.IItemOffered>[];
|
|
20
19
|
}): void;
|
|
21
20
|
export declare function validateOrderedItem(params: {
|
|
22
21
|
order: factory.transaction.placeOrder.IOrderAsResult;
|
|
@@ -12,18 +12,17 @@ const validateMovieTicket_1 = require("./validation/validateMovieTicket");
|
|
|
12
12
|
/**
|
|
13
13
|
* 取引が確定可能な状態かどうかをチェックする
|
|
14
14
|
*/
|
|
15
|
-
function validateTransaction(transaction, authorizeActions) {
|
|
15
|
+
function validateTransaction(transaction, authorizeActions, eventReservationAcceptedOffers) {
|
|
16
16
|
validateProfile(transaction);
|
|
17
17
|
validatePrice(transaction, authorizeActions);
|
|
18
18
|
// 利用可能な通貨単位に対して取引検証
|
|
19
19
|
validateMonetaryAmount(authorizeActions);
|
|
20
20
|
// 利用可能なMovieTicketIF決済方法タイプに対して動的にコーディング
|
|
21
|
-
|
|
22
|
-
const movieTicketPaymentMethodTypes = findMovieTicketPaymentMethodTypesFromTransaction(authorizeActions);
|
|
21
|
+
const movieTicketPaymentMethodTypes = findMovieTicketPaymentMethodTypesFromTransaction(authorizeActions, eventReservationAcceptedOffers);
|
|
23
22
|
if (Array.isArray(movieTicketPaymentMethodTypes) && movieTicketPaymentMethodTypes.length > 0) {
|
|
24
23
|
movieTicketPaymentMethodTypes.forEach((paymentMethodType) => {
|
|
25
24
|
try {
|
|
26
|
-
(0, validateMovieTicket_1.validateMovieTicket)(paymentMethodType, transaction, authorizeActions);
|
|
25
|
+
(0, validateMovieTicket_1.validateMovieTicket)(paymentMethodType, { id: transaction.id }, authorizeActions, eventReservationAcceptedOffers);
|
|
27
26
|
}
|
|
28
27
|
catch (error) {
|
|
29
28
|
// 検証結果をlog(2022-06-04~)
|
|
@@ -37,7 +36,7 @@ function validateTransaction(transaction, authorizeActions) {
|
|
|
37
36
|
validatePaymentUrl(transaction, authorizeActions);
|
|
38
37
|
}
|
|
39
38
|
exports.validateTransaction = validateTransaction;
|
|
40
|
-
function findMovieTicketPaymentMethodTypesFromTransaction(authorizeActions) {
|
|
39
|
+
function findMovieTicketPaymentMethodTypesFromTransaction(authorizeActions, eventReservationAcceptedOffers) {
|
|
41
40
|
const authorizeMovieTicketPaymentActions = authorizeActions.filter((a) => {
|
|
42
41
|
var _a;
|
|
43
42
|
const resultAsInvoice = (Array.isArray(a.result))
|
|
@@ -46,23 +45,23 @@ function findMovieTicketPaymentMethodTypesFromTransaction(authorizeActions) {
|
|
|
46
45
|
return (resultAsInvoice === null || resultAsInvoice === void 0 ? void 0 : resultAsInvoice.typeOf) === factory.action.authorize.paymentMethod.any.ResultType.Payment
|
|
47
46
|
&& (resultAsInvoice === null || resultAsInvoice === void 0 ? void 0 : resultAsInvoice.issuedThrough.typeOf) === factory.service.paymentService.PaymentServiceType.MovieTicket;
|
|
48
47
|
});
|
|
49
|
-
const seatReservationAuthorizeActions = authorizeActions.filter(
|
|
50
|
-
//
|
|
48
|
+
// const seatReservationAuthorizeActions = (<IAuthorizeSeatReservationOffer[]>authorizeActions).filter(
|
|
49
|
+
// (a) => a.object.typeOf === factory.action.authorize.offer.eventService.ObjectType.SeatReservation
|
|
50
|
+
// );
|
|
51
|
+
// MovieTicketオファーを受け付けた予約から抽出
|
|
51
52
|
const requiredMovieTicketPaymentMethodTypes = [];
|
|
52
|
-
seatReservationAuthorizeActions.forEach((action) => {
|
|
53
|
+
// seatReservationAuthorizeActions.forEach((action) => {
|
|
54
|
+
// const acceptedOffers = action.result?.acceptedOffers;
|
|
55
|
+
// });
|
|
56
|
+
eventReservationAcceptedOffers.forEach((offer) => {
|
|
53
57
|
var _a;
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
if (component.typeOf === factory.priceSpecificationType.MovieTicketTypeChargeSpecification
|
|
62
|
-
&& typeof ((_b = (_a = component.appliesToMovieTicket) === null || _a === void 0 ? void 0 : _a.serviceOutput) === null || _b === void 0 ? void 0 : _b.typeOf) === 'string') {
|
|
63
|
-
requiredMovieTicketPaymentMethodTypes.push(component.appliesToMovieTicket.serviceOutput.typeOf);
|
|
64
|
-
}
|
|
65
|
-
});
|
|
58
|
+
(_a = offer.priceSpecification) === null || _a === void 0 ? void 0 : _a.priceComponent.forEach((component) => {
|
|
59
|
+
var _a, _b;
|
|
60
|
+
// MovieTicketTypeChargeSpecificationがあれば検証リストに追加
|
|
61
|
+
if (component.typeOf === factory.priceSpecificationType.MovieTicketTypeChargeSpecification
|
|
62
|
+
&& typeof ((_b = (_a = component.appliesToMovieTicket) === null || _a === void 0 ? void 0 : _a.serviceOutput) === null || _b === void 0 ? void 0 : _b.typeOf) === 'string') {
|
|
63
|
+
requiredMovieTicketPaymentMethodTypes.push(component.appliesToMovieTicket.serviceOutput.typeOf);
|
|
64
|
+
}
|
|
66
65
|
});
|
|
67
66
|
});
|
|
68
67
|
const paymentMethodTypes = [
|
|
@@ -219,24 +218,24 @@ function validateMonetaryAmount(authorizeActions) {
|
|
|
219
218
|
}
|
|
220
219
|
function validateNumItems(params) {
|
|
221
220
|
var _a, _b;
|
|
222
|
-
if (!Array.isArray(params.
|
|
221
|
+
if (!Array.isArray(params.acceptedOffers)) {
|
|
223
222
|
throw new factory.errors.Argument('order.acceptedOffers', 'must be array');
|
|
224
223
|
}
|
|
225
224
|
// 注文アイテム数制限確認
|
|
226
225
|
const numItemsMaxValue = (_a = params.result.order.numItems) === null || _a === void 0 ? void 0 : _a.maxValue;
|
|
227
226
|
const numItemsMinValue = (_b = params.result.order.numItems) === null || _b === void 0 ? void 0 : _b.minValue;
|
|
228
227
|
if (typeof numItemsMaxValue === 'number') {
|
|
229
|
-
if (params.
|
|
228
|
+
if (params.acceptedOffers.length > numItemsMaxValue) {
|
|
230
229
|
throw new factory.errors.Argument('Transaction', (0, util_1.format)('Number of order items must be less than or equal to %s', numItemsMaxValue));
|
|
231
230
|
}
|
|
232
231
|
}
|
|
233
232
|
if (typeof numItemsMinValue === 'number') {
|
|
234
|
-
if (params.
|
|
233
|
+
if (params.acceptedOffers.length < numItemsMinValue) {
|
|
235
234
|
throw new factory.errors.Argument('Transaction', (0, util_1.format)('Number of order items must be more than equal to %s', numItemsMinValue));
|
|
236
235
|
}
|
|
237
236
|
}
|
|
238
237
|
// itemOffered.typeOf数検証(2024-01-31~)
|
|
239
|
-
const itemOfferedTypeOfs = [...new Set(params.
|
|
238
|
+
const itemOfferedTypeOfs = [...new Set(params.acceptedOffers.map((offer) => offer.itemOffered.typeOf))];
|
|
240
239
|
if (itemOfferedTypeOfs.length > 1) {
|
|
241
240
|
throw new factory.errors.Argument('Transaction', `different itemOffered.typeOfs contained. [${itemOfferedTypeOfs.join(',')}]`);
|
|
242
241
|
}
|
package/package.json
CHANGED