@chevre/domain 23.1.0-alpha.8 → 23.1.0
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/{eventOffer/adminEventOffers.ts → acceptedPaymentMethodOffer/adminAcceptedPaymentMethodOffers.ts} +12 -11
- package/example/src/chevre/actions/checkAcceptPayActions.ts +60 -0
- package/example/src/chevre/assetTransaction/checkPayTransactionsTicketToken.ts +67 -0
- package/example/src/chevre/assetTransaction/processReserve.ts +7 -3
- package/example/src/chevre/authorizeEventServiceOffer.ts +6 -5
- package/example/src/chevre/eventSeries/migrateEventSeriesUnacceptedPaymentMethod.ts +93 -0
- package/example/src/chevre/importEventsFromCOA.ts +5 -5
- package/example/src/chevre/member/migrateMemberIdentifier.ts +20 -15
- package/example/src/chevre/pendingReservation/findEventSeatOffersBySection.ts +46 -0
- package/example/src/chevre/place/checkSectionCount.ts +27 -0
- package/example/src/chevre/place/findSectionsByRoom.ts +50 -0
- package/example/src/chevre/project/unsetProjectSettings.ts +73 -0
- package/example/src/chevre/reIndex.ts +1 -2
- package/example/src/chevre/roles/{addAdminSellerEventIfNotExists.ts → addAdminSellerEventOfferIfNotExists.ts} +1 -1
- package/example/src/chevre/stockHolder/findSeatsBySection.ts +59 -0
- package/example/src/chevre/stockHolder/searchSeats.ts +2 -2
- package/lib/chevre/repo/acceptedPaymentMethod.d.ts +41 -0
- package/lib/chevre/repo/acceptedPaymentMethod.js +180 -0
- package/lib/chevre/repo/authorization.d.ts +3 -2
- package/lib/chevre/repo/authorization.js +13 -5
- package/lib/chevre/repo/event.d.ts +1 -35
- package/lib/chevre/repo/event.js +2 -102
- package/lib/chevre/repo/eventOffer.js +3 -3
- package/lib/chevre/repo/mongoose/schemas/acceptedPaymentMethod.d.ts +10 -0
- package/lib/chevre/repo/mongoose/schemas/acceptedPaymentMethod.js +97 -0
- package/lib/chevre/repo/mongoose/schemas/eventOffer.js +48 -35
- package/lib/chevre/repo/mongoose/schemas/member.js +10 -0
- package/lib/chevre/repo/note.js +4 -2
- package/lib/chevre/repo/pendingReservation.js +28 -71
- package/lib/chevre/repo/place/seat.d.ts +24 -0
- package/lib/chevre/repo/place/seat.js +103 -21
- package/lib/chevre/repo/place/section.d.ts +20 -0
- package/lib/chevre/repo/place/section.js +47 -0
- package/lib/chevre/repo/ticket.d.ts +7 -1
- package/lib/chevre/repo/ticket.js +14 -1
- package/lib/chevre/repository.d.ts +5 -0
- package/lib/chevre/repository.js +15 -2
- package/lib/chevre/service/assetTransaction/pay/factory.d.ts +1 -1
- package/lib/chevre/service/assetTransaction/pay/factory.js +8 -3
- package/lib/chevre/service/assetTransaction/pay/validateAcceptedPaymentMethodIfNeeded.d.ts +16 -0
- package/lib/chevre/service/assetTransaction/pay/validateAcceptedPaymentMethodIfNeeded.js +94 -0
- package/lib/chevre/service/assetTransaction/pay.d.ts +6 -1
- package/lib/chevre/service/assetTransaction/pay.js +6 -1
- package/lib/chevre/service/assetTransaction/reserve/start.d.ts +4 -0
- package/lib/chevre/service/assetTransaction/reserve/start.js +4 -1
- package/lib/chevre/service/assetTransaction/reserve/validateStartRequest/fixExtendedEventOffer.d.ts +2 -2
- package/lib/chevre/service/assetTransaction/reserve/validateStartRequest/fixExtendedEventOffer.js +8 -8
- package/lib/chevre/service/assetTransaction/reserve/validateStartRequest/validateIssuedOfferIfExists.d.ts +7 -2
- package/lib/chevre/service/assetTransaction/reserve/validateStartRequest/validateIssuedOfferIfExists.js +32 -32
- package/lib/chevre/service/assetTransaction/reserve/validateStartRequest/validateMemberTierIfExists.d.ts +1 -1
- package/lib/chevre/service/assetTransaction/reserve/validateStartRequest/validateMemberTierIfExists.js +10 -54
- package/lib/chevre/service/assetTransaction/reserve/validateStartRequest/verifyTicketTokenAsNeeded.d.ts +23 -0
- package/lib/chevre/service/assetTransaction/reserve/validateStartRequest/verifyTicketTokenAsNeeded.js +62 -0
- package/lib/chevre/service/assetTransaction/reserve/validateStartRequest.d.ts +34 -1
- package/lib/chevre/service/assetTransaction/reserve/validateStartRequest.js +21 -9
- package/lib/chevre/service/offer/event/authorize/factory.d.ts +0 -4
- package/lib/chevre/service/offer/event/authorize/factory.js +2 -5
- package/lib/chevre/service/offer/event/authorize/processStartReserve4chevre/requestedProgramMembershipUsed2permit.js +1 -1
- package/lib/chevre/service/offer/event/authorize/processStartReserve4chevre.d.ts +1 -0
- package/lib/chevre/service/offer/event/authorize/processStartReserve4chevre.js +2 -7
- package/lib/chevre/service/offer/event/authorize.d.ts +1 -0
- package/lib/chevre/service/offer/event/authorize.js +7 -7
- package/lib/chevre/service/offer/event/issueEventOfferTicket.d.ts +48 -0
- package/lib/chevre/service/offer/event/issueEventOfferTicket.js +123 -0
- package/lib/chevre/service/offer/event.d.ts +2 -1
- package/lib/chevre/service/offer/event.js +3 -1
- package/lib/chevre/service/offer.d.ts +31 -1
- package/lib/chevre/service/offer.js +104 -34
- package/lib/chevre/service/payment/any/authorize/fixTransactionNumber.d.ts +9 -0
- package/lib/chevre/service/payment/any/authorize/fixTransactionNumber.js +22 -11
- package/lib/chevre/service/payment/any/authorize/handlePrePublishedPaymentMethodIdOnAuthorizing.d.ts +19 -2
- package/lib/chevre/service/payment/any/authorize/handlePrePublishedPaymentMethodIdOnAuthorizing.js +87 -9
- package/lib/chevre/service/payment/any/factory.d.ts +20 -3
- package/lib/chevre/service/payment/any/factory.js +26 -6
- package/lib/chevre/service/payment/any/publishPaymentUrl/fixTransactionNumberOnPublishPaymentUrl.d.ts +4 -0
- package/lib/chevre/service/payment/any/publishPaymentUrl/fixTransactionNumberOnPublishPaymentUrl.js +15 -11
- package/lib/chevre/service/payment/any/verifyTicketTokenAsNeeded.d.ts +6 -3
- package/lib/chevre/service/payment/any/verifyTicketTokenAsNeeded.js +8 -22
- package/lib/chevre/service/payment/any.d.ts +5 -1
- package/lib/chevre/service/payment/any.js +22 -13
- package/lib/chevre/service/payment/factory.js +0 -5
- package/lib/chevre/service/payment/movieTicket/authorize.js +0 -5
- package/lib/chevre/service/task/authorizePayment.js +2 -0
- package/lib/chevre/service/task/publishPaymentUrl.js +4 -0
- package/lib/chevre/service/transaction/placeOrder/confirm/publishCode.js +1 -1
- package/lib/chevre/service/transaction/placeOrder/confirm/validation/factory.d.ts +9 -0
- package/lib/chevre/service/transaction/placeOrder/confirm/validation/factory.js +2 -0
- package/lib/chevre/service/transaction/placeOrder/confirm/validation/validateInvoiceReferencesOrder.d.ts +8 -0
- package/lib/chevre/service/transaction/placeOrder/confirm/validation/validateInvoiceReferencesOrder.js +45 -0
- package/lib/chevre/service/transaction/placeOrder/confirm/validation/validatePrice.d.ts +3 -0
- package/lib/chevre/service/transaction/placeOrder/confirm/validation/validatePrice.js +38 -0
- package/lib/chevre/service/transaction/placeOrder/confirm/validation.d.ts +2 -8
- package/lib/chevre/service/transaction/placeOrder/confirm/validation.js +5 -35
- package/package.json +3 -3
- package/example/src/chevre/checkReplaceActions.ts +0 -65
- package/example/src/chevre/upsertManyEventsByAdditionalProperty.ts +0 -193
- package/lib/chevre/service/code.d.ts +0 -8
- package/lib/chevre/service/code.js +0 -7
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.verifyTicketTokenAsNeeded = verifyTicketTokenAsNeeded;
|
|
13
|
+
const factory = require("../../../../factory");
|
|
14
|
+
// tslint:disable-next-line:max-func-body-length
|
|
15
|
+
function verifyTicketTokenAsNeeded(params) {
|
|
16
|
+
// tslint:disable-next-line:cyclomatic-complexity
|
|
17
|
+
return (repos) => __awaiter(this, void 0, void 0, function* () {
|
|
18
|
+
var _a, _b, _c;
|
|
19
|
+
const { instrument, event } = params;
|
|
20
|
+
let acceptedEventOffer;
|
|
21
|
+
// 興行オファーチケットが指定された場合、オファーへ変換する
|
|
22
|
+
const ticketToken = (_a = instrument.find((eachInstrument) => eachInstrument.typeOf === 'Ticket')) === null || _a === void 0 ? void 0 : _a.ticketToken;
|
|
23
|
+
if (typeof ticketToken === 'string' && ticketToken !== '') {
|
|
24
|
+
const placeOrderIdByInstrument = (_b = instrument.find((eachInstrument) => eachInstrument.typeOf === factory.transactionType.PlaceOrder)) === null || _b === void 0 ? void 0 : _b.id;
|
|
25
|
+
if (typeof placeOrderIdByInstrument !== 'string' || placeOrderIdByInstrument === '') {
|
|
26
|
+
throw new factory.errors.NotFound('instrument as placeOrder');
|
|
27
|
+
}
|
|
28
|
+
const ticket = (yield repos.ticket.findTickets({
|
|
29
|
+
limit: 1,
|
|
30
|
+
page: 1,
|
|
31
|
+
project: { id: { $eq: event.project.id } },
|
|
32
|
+
ticketToken: { $eq: ticketToken }
|
|
33
|
+
}, ['ticketToken'])).shift();
|
|
34
|
+
if (ticket === undefined) {
|
|
35
|
+
throw new factory.errors.NotFound('Ticket');
|
|
36
|
+
}
|
|
37
|
+
// 承認を参照
|
|
38
|
+
const validAuthorization = yield repos.authorization.findValidOneByCode({
|
|
39
|
+
project: { id: event.project.id },
|
|
40
|
+
code: ticket.ticketToken
|
|
41
|
+
});
|
|
42
|
+
const authorizedObject = validAuthorization.object;
|
|
43
|
+
// audience検証
|
|
44
|
+
if (((_c = validAuthorization.audience) === null || _c === void 0 ? void 0 : _c.typeOf) !== factory.transactionType.PlaceOrder
|
|
45
|
+
|| validAuthorization.audience.id !== placeOrderIdByInstrument) {
|
|
46
|
+
throw new factory.errors.Argument('ticketToken', 'audience not matched with placeOrder');
|
|
47
|
+
}
|
|
48
|
+
if (authorizedObject.typeOf === factory.offerType.Offer) {
|
|
49
|
+
// イベントIDを検証
|
|
50
|
+
const eventIdMustBe = authorizedObject.itemOffered.serviceOutput.reservationFor.id;
|
|
51
|
+
if (eventIdMustBe !== event.id) {
|
|
52
|
+
throw new factory.errors.Argument('ticketToken', 'event.id not matched');
|
|
53
|
+
}
|
|
54
|
+
acceptedEventOffer = authorizedObject;
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
throw new factory.errors.Argument('ticketToken', 'must be Offer');
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return { acceptedEventOffer };
|
|
61
|
+
});
|
|
62
|
+
}
|
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
import * as factory from '../../../factory';
|
|
2
2
|
import { IMinimizedIndividualEvent } from '../../../factory/event';
|
|
3
|
+
import type { AuthorizationRepo } from '../../../repo/authorization';
|
|
3
4
|
import type { EventOfferRepo } from '../../../repo/eventOffer';
|
|
4
5
|
import type { IssuerRepo } from '../../../repo/issuer';
|
|
5
6
|
import type { MemberRepo } from '../../../repo/member';
|
|
6
7
|
import type { MemberProgramRepo } from '../../../repo/memberProgram';
|
|
7
8
|
import type { ProductOfferRepo } from '../../../repo/productOffer';
|
|
9
|
+
import type { TicketRepo } from '../../../repo/ticket';
|
|
8
10
|
declare function validateStartRequest(params: {
|
|
9
11
|
object: factory.assetTransaction.reserve.IObjectWithoutDetail;
|
|
12
|
+
instrument: factory.assetTransaction.reserve.IInstrument[];
|
|
10
13
|
event: Pick<IMinimizedIndividualEvent, 'offers' | 'id' | 'project' | 'identifier'>;
|
|
11
14
|
/**
|
|
12
15
|
* アプリケーションごとのオファーを検証するかどうか
|
|
@@ -21,10 +24,40 @@ declare function validateStartRequest(params: {
|
|
|
21
24
|
id?: string;
|
|
22
25
|
};
|
|
23
26
|
}): (repos: {
|
|
27
|
+
authorization: AuthorizationRepo;
|
|
24
28
|
eventOffer: EventOfferRepo;
|
|
25
29
|
issuer: IssuerRepo;
|
|
26
30
|
member: MemberRepo;
|
|
27
31
|
memberProgram: MemberProgramRepo;
|
|
28
32
|
productOffer: ProductOfferRepo;
|
|
33
|
+
ticket: TicketRepo;
|
|
29
34
|
}) => Promise<void>;
|
|
30
|
-
|
|
35
|
+
/**
|
|
36
|
+
* アプリケーションに対して有効なイベントオファーが存在するかどうかを検証する
|
|
37
|
+
*/
|
|
38
|
+
declare function validEventOfferByApplicationExists(params: {
|
|
39
|
+
event: Pick<IMinimizedIndividualEvent, 'offers' | 'id' | 'project' | 'identifier'>;
|
|
40
|
+
now: Date;
|
|
41
|
+
availableAt: {
|
|
42
|
+
/**
|
|
43
|
+
* 販売アプリケーションID
|
|
44
|
+
*/
|
|
45
|
+
id: string;
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* オファー承認時のticketTokenから生成されたイベントオファー
|
|
49
|
+
*/
|
|
50
|
+
acceptedEventOffer?: factory.authorization.IOfferAsObject;
|
|
51
|
+
/**
|
|
52
|
+
* オファー承認時の予約数
|
|
53
|
+
* 0であれば特に何も検証されない
|
|
54
|
+
*/
|
|
55
|
+
numAcceptedOffers: number;
|
|
56
|
+
}): (repos: {
|
|
57
|
+
eventOffer: EventOfferRepo;
|
|
58
|
+
issuer: IssuerRepo;
|
|
59
|
+
member: MemberRepo;
|
|
60
|
+
memberProgram: MemberProgramRepo;
|
|
61
|
+
productOffer: ProductOfferRepo;
|
|
62
|
+
}) => Promise<void>;
|
|
63
|
+
export { validateStartRequest, validEventOfferByApplicationExists };
|
|
@@ -10,11 +10,13 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
12
|
exports.validateStartRequest = validateStartRequest;
|
|
13
|
+
exports.validEventOfferByApplicationExists = validEventOfferByApplicationExists;
|
|
13
14
|
const moment = require("moment");
|
|
14
15
|
const factory = require("../../../factory");
|
|
15
16
|
const fixExtendedEventOffer_1 = require("./validateStartRequest/fixExtendedEventOffer");
|
|
16
17
|
const validateIssuedOfferIfExists_1 = require("./validateStartRequest/validateIssuedOfferIfExists");
|
|
17
18
|
const validateMemberTierIfExists_1 = require("./validateStartRequest/validateMemberTierIfExists");
|
|
19
|
+
const verifyTicketTokenAsNeeded_1 = require("./validateStartRequest/verifyTicketTokenAsNeeded");
|
|
18
20
|
function validateStartRequest(params) {
|
|
19
21
|
return (repos) => __awaiter(this, void 0, void 0, function* () {
|
|
20
22
|
var _a;
|
|
@@ -24,11 +26,20 @@ function validateStartRequest(params) {
|
|
|
24
26
|
if (typeof ((_a = params.store) === null || _a === void 0 ? void 0 : _a.id) !== 'string') {
|
|
25
27
|
throw new factory.errors.NotFound('store.id');
|
|
26
28
|
}
|
|
27
|
-
|
|
29
|
+
// ticketTokenから、acceptedEventOfferを生成(2025-11-18~)
|
|
30
|
+
const { acceptedEventOffer } = yield (0, verifyTicketTokenAsNeeded_1.verifyTicketTokenAsNeeded)({
|
|
28
31
|
event,
|
|
29
32
|
now,
|
|
30
33
|
availableAt: { id: params.store.id },
|
|
31
|
-
object: params.object
|
|
34
|
+
object: params.object,
|
|
35
|
+
instrument: params.instrument
|
|
36
|
+
})(repos);
|
|
37
|
+
yield validEventOfferByApplicationExists({
|
|
38
|
+
event,
|
|
39
|
+
now,
|
|
40
|
+
availableAt: { id: params.store.id },
|
|
41
|
+
acceptedEventOffer,
|
|
42
|
+
numAcceptedOffers: (Array.isArray(params.object.acceptedOffer)) ? params.object.acceptedOffer.length : 0
|
|
32
43
|
})(repos);
|
|
33
44
|
}
|
|
34
45
|
if (params.validateEvent === true) {
|
|
@@ -37,11 +48,11 @@ function validateStartRequest(params) {
|
|
|
37
48
|
});
|
|
38
49
|
}
|
|
39
50
|
/**
|
|
40
|
-
*
|
|
51
|
+
* アプリケーションに対して有効なイベントオファーが存在するかどうかを検証する
|
|
41
52
|
*/
|
|
42
|
-
function
|
|
53
|
+
function validEventOfferByApplicationExists(params) {
|
|
43
54
|
return (repos) => __awaiter(this, void 0, void 0, function* () {
|
|
44
|
-
const { event, availableAt } = params;
|
|
55
|
+
const { event, availableAt, acceptedEventOffer, numAcceptedOffers } = params;
|
|
45
56
|
const acceptedDate = moment(params.now);
|
|
46
57
|
const eventOffers = event.offers;
|
|
47
58
|
// アプリケーションごとの設定を参照する(2022-11-19~)
|
|
@@ -75,8 +86,9 @@ function validateApplicationOffer(params) {
|
|
|
75
86
|
yield (0, validateIssuedOfferIfExists_1.validateIssuedOfferIfExists)({
|
|
76
87
|
event,
|
|
77
88
|
now: params.now,
|
|
78
|
-
|
|
79
|
-
|
|
89
|
+
eventOffer: existingEventOffer,
|
|
90
|
+
acceptedEventOffer,
|
|
91
|
+
numAcceptedOffers
|
|
80
92
|
})(repos);
|
|
81
93
|
}
|
|
82
94
|
else {
|
|
@@ -85,8 +97,8 @@ function validateApplicationOffer(params) {
|
|
|
85
97
|
yield (0, validateMemberTierIfExists_1.validateMemberTierIfExists)({
|
|
86
98
|
event,
|
|
87
99
|
now: params.now,
|
|
88
|
-
|
|
89
|
-
|
|
100
|
+
makesOfferOnApplication,
|
|
101
|
+
acceptedEventOffer
|
|
90
102
|
})(repos);
|
|
91
103
|
}
|
|
92
104
|
});
|
|
@@ -7,10 +7,6 @@ declare function createReserveTransactionStartParams(params: {
|
|
|
7
7
|
acceptedOffers: factory.assetTransaction.reserve.IAcceptedTicketOfferWithoutDetail[];
|
|
8
8
|
event: {
|
|
9
9
|
id: string;
|
|
10
|
-
offers?: {
|
|
11
|
-
validForMemberTier?: factory.assetTransaction.reserve.ITokenizedMemberProgramTier;
|
|
12
|
-
identifier?: string;
|
|
13
|
-
};
|
|
14
10
|
};
|
|
15
11
|
broker?: factory.reservation.IBroker<factory.reservationType>;
|
|
16
12
|
transaction: Pick<factory.transaction.ITransaction<factory.transactionType.PlaceOrder>, 'expires' | 'seller'>;
|
|
@@ -8,7 +8,7 @@ exports.responseBody2acceptedOffers4result = responseBody2acceptedOffers4result;
|
|
|
8
8
|
const moment = require("moment");
|
|
9
9
|
const factory = require("../../../../factory");
|
|
10
10
|
function createReserveTransactionStartParams(params) {
|
|
11
|
-
var _a
|
|
11
|
+
var _a;
|
|
12
12
|
const { transaction, transactionNumber } = params;
|
|
13
13
|
const { seller } = transaction;
|
|
14
14
|
const acceptedTicketOffersWithoutDetail = (Array.isArray(params.acceptedOffers))
|
|
@@ -48,11 +48,8 @@ function createReserveTransactionStartParams(params) {
|
|
|
48
48
|
// }
|
|
49
49
|
// ]
|
|
50
50
|
};
|
|
51
|
-
const validForMemberTier = (_b = params.event.offers) === null || _b === void 0 ? void 0 : _b.validForMemberTier;
|
|
52
|
-
const eventOfferIdentifier = (_c = params.event.offers) === null || _c === void 0 ? void 0 : _c.identifier;
|
|
53
51
|
const object = Object.assign({ acceptedOffer: acceptedTicketOffersWithoutDetail, reservationFor: {
|
|
54
|
-
id: params.event.id
|
|
55
|
-
offers: Object.assign(Object.assign({}, (typeof (validForMemberTier === null || validForMemberTier === void 0 ? void 0 : validForMemberTier.token) === 'string') ? { validForMemberTier } : undefined), (typeof eventOfferIdentifier === 'string') ? { identifier: eventOfferIdentifier } : undefined)
|
|
52
|
+
id: params.event.id
|
|
56
53
|
} }, (params.broker !== undefined) ? { broker: params.broker } : undefined);
|
|
57
54
|
return {
|
|
58
55
|
project: { typeOf: factory.organizationType.Project, id: params.project.id },
|
|
@@ -27,7 +27,7 @@ function requestedProgramMembershipUsed2permit(params) {
|
|
|
27
27
|
else if ((programMembershipUsed === null || programMembershipUsed === void 0 ? void 0 : programMembershipUsed.typeOf) === 'Ticket') {
|
|
28
28
|
const { ticketToken } = programMembershipUsed;
|
|
29
29
|
if (typeof ticketToken === 'string') {
|
|
30
|
-
const ticket = (yield repos.ticket.
|
|
30
|
+
const ticket = (yield repos.ticket.findTickets({
|
|
31
31
|
limit: 1,
|
|
32
32
|
page: 1,
|
|
33
33
|
project: { id: { $eq: params.project.id } },
|
|
@@ -20,19 +20,13 @@ function processStartReserve4chevre(params, options) {
|
|
|
20
20
|
// jwt: JWTCredentials;
|
|
21
21
|
// }
|
|
22
22
|
) => __awaiter(this, void 0, void 0, function* () {
|
|
23
|
-
var _a, _b, _c;
|
|
24
23
|
const { event, transaction, transactionNumber } = params;
|
|
25
24
|
let acceptedOffers4result = [];
|
|
26
25
|
// 予約取引開始
|
|
27
26
|
const startParams = (0, factory_1.createReserveTransactionStartParams)(Object.assign({ project: transaction.project,
|
|
28
27
|
// object: <IObjectWithDetail>action.object,
|
|
29
28
|
acceptedOffers: params.acceptedOffers, event: {
|
|
30
|
-
id: event.id
|
|
31
|
-
offers: Object.assign(Object.assign({}, (typeof ((_b = (_a = event.offers) === null || _a === void 0 ? void 0 : _a.validForMemberTier) === null || _b === void 0 ? void 0 : _b.token) === 'string')
|
|
32
|
-
? { validForMemberTier: event.offers.validForMemberTier }
|
|
33
|
-
: undefined), (typeof ((_c = event.offers) === null || _c === void 0 ? void 0 : _c.identifier) === 'string')
|
|
34
|
-
? { identifier: event.offers.identifier }
|
|
35
|
-
: undefined)
|
|
29
|
+
id: event.id
|
|
36
30
|
}, transaction,
|
|
37
31
|
transactionNumber }, (params.broker !== undefined) ? { broker: params.broker } : undefined));
|
|
38
32
|
const startParamObject = yield validateObjectWithoutDetail(startParams, { id: params.transaction.id })(repos);
|
|
@@ -40,6 +34,7 @@ function processStartReserve4chevre(params, options) {
|
|
|
40
34
|
// discontinue preSearchedEvent(2024-07-17~)
|
|
41
35
|
// preSearchedEvent: event,
|
|
42
36
|
preSearchedTicketOffers: params.ticketOffers, preSearchedUnitPriceOffers: params.unitPriceOffers, availableAtOrFrom: { id: params.availableAtOrFrom.id }, validateEvent: params.validateEvent, validateEventOfferPeriod: params.validateEventOfferPeriod, validateAppliesToMovieTicket: true, instrument: [
|
|
37
|
+
...params.instrument, // support Ticket(2025-11-18~)
|
|
43
38
|
{ orderNumber: params.orderNumber, typeOf: factory.order.OrderType.Order },
|
|
44
39
|
{ id: transaction.id, typeOf: transaction.typeOf }
|
|
45
40
|
] }), options)(repos, settings);
|
|
@@ -53,7 +53,7 @@ function authorize(params, options) {
|
|
|
53
53
|
const action = yield repos.action.start(actionAttributes);
|
|
54
54
|
try {
|
|
55
55
|
const processStartReserveResult = yield (0, processStartReserve4chevre_1.processStartReserve4chevre)(Object.assign({ acceptedOffers, event,
|
|
56
|
-
transactionNumber, transaction, availableAtOrFrom: { id: params.store.id }, ticketOffers, unitPriceOffers, validateEvent: params.validateEvent === true, validateEventOfferPeriod: params.validateEventOfferPeriod === true, orderNumber }, (typeof ((_a = params.object.broker) === null || _a === void 0 ? void 0 : _a.typeOf) === 'string') ? { broker: params.object.broker } : undefined), options)(repos, settings);
|
|
56
|
+
transactionNumber, transaction, availableAtOrFrom: { id: params.store.id }, ticketOffers, unitPriceOffers, validateEvent: params.validateEvent === true, validateEventOfferPeriod: params.validateEventOfferPeriod === true, orderNumber, instrument: params.instrument }, (typeof ((_a = params.object.broker) === null || _a === void 0 ? void 0 : _a.typeOf) === 'string') ? { broker: params.object.broker } : undefined), options)(repos, settings);
|
|
57
57
|
acceptedOffers4result = processStartReserveResult.acceptedOffers4result;
|
|
58
58
|
// add orderInTransaction(2024-01-15~)
|
|
59
59
|
if (!noOfferSpecified) {
|
|
@@ -82,7 +82,7 @@ function authorize(params, options) {
|
|
|
82
82
|
}
|
|
83
83
|
function validateCreateRequest(params) {
|
|
84
84
|
return (repos) => __awaiter(this, void 0, void 0, function* () {
|
|
85
|
-
var _a, _b
|
|
85
|
+
var _a, _b;
|
|
86
86
|
const transaction = yield repos.transaction.projectFieldsInProgressById({
|
|
87
87
|
typeOf: factory.transactionType.PlaceOrder,
|
|
88
88
|
id: params.transaction.id
|
|
@@ -98,13 +98,13 @@ function validateCreateRequest(params) {
|
|
|
98
98
|
if (typeof ((_b = params.object.reservationFor) === null || _b === void 0 ? void 0 : _b.id) !== 'string' || params.object.reservationFor.id.length === 0) {
|
|
99
99
|
throw new factory.errors.ArgumentNull('object.reservationFor.id');
|
|
100
100
|
}
|
|
101
|
-
// support validForMemberTier(2025-05-14~)
|
|
102
|
-
const validForMemberTier = (_c = params.object.reservationFor.offers) === null || _c === void 0 ? void 0 : _c.validForMemberTier;
|
|
103
|
-
const eventOfferIdentifier = (_d = params.object.reservationFor.offers) === null || _d === void 0 ? void 0 : _d.identifier;
|
|
104
101
|
const event = {
|
|
105
102
|
id: params.object.reservationFor.id,
|
|
106
|
-
typeOf: factory.eventType.ScreeningEvent
|
|
107
|
-
offers:
|
|
103
|
+
typeOf: factory.eventType.ScreeningEvent // ひとまずfix(2024-07-17~)
|
|
104
|
+
// offers: {
|
|
105
|
+
// ...(typeof validForMemberTier?.token === 'string') ? { validForMemberTier } : undefined,
|
|
106
|
+
// ...(typeof eventOfferIdentifier === 'string') ? { identifier: eventOfferIdentifier } : undefined
|
|
107
|
+
// }
|
|
108
108
|
};
|
|
109
109
|
return { transaction, event };
|
|
110
110
|
});
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import * as factory from '../../../factory';
|
|
2
|
+
import type { ActionRepo } from '../../../repo/action';
|
|
3
|
+
import type { AuthorizationRepo } from '../../../repo/authorization';
|
|
4
|
+
import type { EventRepo } from '../../../repo/event';
|
|
5
|
+
import type { EventOfferRepo } from '../../../repo/eventOffer';
|
|
6
|
+
import type { IssuerRepo } from '../../../repo/issuer';
|
|
7
|
+
import type { MemberRepo } from '../../../repo/member';
|
|
8
|
+
import type { MemberProgramRepo } from '../../../repo/memberProgram';
|
|
9
|
+
import type { ProductOfferRepo } from '../../../repo/productOffer';
|
|
10
|
+
import type { TicketRepo } from '../../../repo/ticket';
|
|
11
|
+
import type { TransactionRepo } from '../../../repo/transaction';
|
|
12
|
+
declare function issueEventOfferTicket(params: {
|
|
13
|
+
now: Date;
|
|
14
|
+
audience: Pick<factory.action.authorize.offer.eventService.IPurpose, 'id'>;
|
|
15
|
+
/**
|
|
16
|
+
* イベントID
|
|
17
|
+
*/
|
|
18
|
+
eventId: string;
|
|
19
|
+
/**
|
|
20
|
+
* 拡張イベントオファーID
|
|
21
|
+
*/
|
|
22
|
+
eventOfferId?: string;
|
|
23
|
+
ticketedOffer?: Pick<factory.authorization.IOfferAsObject, 'token' | 'validForMemberTier'>;
|
|
24
|
+
author: Pick<factory.authorization.IAuthor, 'id' | 'typeOf'>;
|
|
25
|
+
project: {
|
|
26
|
+
id: string;
|
|
27
|
+
};
|
|
28
|
+
instrument: {
|
|
29
|
+
/**
|
|
30
|
+
* アプリケーションID
|
|
31
|
+
*/
|
|
32
|
+
id: string;
|
|
33
|
+
};
|
|
34
|
+
}): (repos: {
|
|
35
|
+
action: ActionRepo;
|
|
36
|
+
authorization: AuthorizationRepo;
|
|
37
|
+
event: EventRepo;
|
|
38
|
+
eventOffer: EventOfferRepo;
|
|
39
|
+
issuer: IssuerRepo;
|
|
40
|
+
member: MemberRepo;
|
|
41
|
+
memberProgram: MemberProgramRepo;
|
|
42
|
+
productOffer: ProductOfferRepo;
|
|
43
|
+
ticket: TicketRepo;
|
|
44
|
+
transaction: TransactionRepo;
|
|
45
|
+
}) => Promise<{
|
|
46
|
+
ticketToken: string;
|
|
47
|
+
}>;
|
|
48
|
+
export { issueEventOfferTicket };
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.issueEventOfferTicket = issueEventOfferTicket;
|
|
13
|
+
const moment = require("moment");
|
|
14
|
+
const factory = require("../../../factory");
|
|
15
|
+
const validateStartRequest_1 = require("../../assetTransaction/reserve/validateStartRequest");
|
|
16
|
+
function createOfferTicket(params) {
|
|
17
|
+
return (repos) => __awaiter(this, void 0, void 0, function* () {
|
|
18
|
+
var _a;
|
|
19
|
+
const { audience, expiresInSeconds, issuedBy, object, validFrom, author, project, instrument } = params;
|
|
20
|
+
const actionAttributes = {
|
|
21
|
+
project: { id: project.id, typeOf: factory.organizationType.Project },
|
|
22
|
+
typeOf: factory.actionType.AuthorizeAction,
|
|
23
|
+
agent: author,
|
|
24
|
+
recipient: author,
|
|
25
|
+
object: [object],
|
|
26
|
+
instrument: {
|
|
27
|
+
typeOf: factory.creativeWorkType.WebApplication,
|
|
28
|
+
id: instrument.id
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
const action = yield repos.action.start(actionAttributes);
|
|
32
|
+
let authorizations;
|
|
33
|
+
try {
|
|
34
|
+
authorizations = yield repos.authorization.issueAuthorization([{
|
|
35
|
+
project: { id: project.id, typeOf: factory.organizationType.Project },
|
|
36
|
+
object,
|
|
37
|
+
validFrom,
|
|
38
|
+
expiresInSeconds,
|
|
39
|
+
author,
|
|
40
|
+
issuedBy,
|
|
41
|
+
audience
|
|
42
|
+
}]);
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
try {
|
|
46
|
+
yield repos.action.giveUp({ typeOf: action.typeOf, id: action.id, error });
|
|
47
|
+
}
|
|
48
|
+
catch (__) {
|
|
49
|
+
// 失敗したら仕方ない
|
|
50
|
+
}
|
|
51
|
+
throw error;
|
|
52
|
+
}
|
|
53
|
+
const result = authorizations.map(({ code, typeOf }) => ({ code, typeOf }));
|
|
54
|
+
yield repos.action.completeWithVoid({ typeOf: action.typeOf, id: action.id, result: result });
|
|
55
|
+
const ticketToken = (_a = authorizations.shift()) === null || _a === void 0 ? void 0 : _a.code;
|
|
56
|
+
if (typeof ticketToken !== 'string') {
|
|
57
|
+
// 基本的にありえないフロー
|
|
58
|
+
throw new factory.errors.Internal('code not published by an unexpected reason');
|
|
59
|
+
}
|
|
60
|
+
// チケット作成
|
|
61
|
+
yield repos.ticket.issueByTicketToken({
|
|
62
|
+
project: { id: project.id },
|
|
63
|
+
ticketToken,
|
|
64
|
+
issuedBy
|
|
65
|
+
});
|
|
66
|
+
return { ticketToken };
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
function issueEventOfferTicket(params) {
|
|
70
|
+
return (repos) => __awaiter(this, void 0, void 0, function* () {
|
|
71
|
+
var _a, _b;
|
|
72
|
+
const { now, audience, eventId, eventOfferId, ticketedOffer, author, project, instrument } = params;
|
|
73
|
+
// 取引は存在するか
|
|
74
|
+
const transaction = yield repos.transaction.projectFieldsInProgressById({ typeOf: factory.transactionType.PlaceOrder, id: audience.id }, ['expires', 'typeOf', 'seller']);
|
|
75
|
+
// イベントは存在するか
|
|
76
|
+
const event = yield repos.event.projectEventFieldsById({ id: eventId }, ['project', 'offers', 'identifier']);
|
|
77
|
+
// 取引番号発行
|
|
78
|
+
// const { transactionNumber } = await transactionNumberRepo.publishByTimestamp({ startDate: now });
|
|
79
|
+
const { seller } = transaction;
|
|
80
|
+
// 承認作成
|
|
81
|
+
const issuedBy = Object.assign({ id: seller.id, typeOf: seller.typeOf }, (typeof seller.name.ja === 'string') ? { name: seller.name.ja } : undefined);
|
|
82
|
+
const validForMemberTierToken = (_a = ticketedOffer === null || ticketedOffer === void 0 ? void 0 : ticketedOffer.validForMemberTier) === null || _a === void 0 ? void 0 : _a.token;
|
|
83
|
+
const validForMemberProgramIdentifier = (_b = ticketedOffer === null || ticketedOffer === void 0 ? void 0 : ticketedOffer.validForMemberTier) === null || _b === void 0 ? void 0 : _b.isTierOf.identifier;
|
|
84
|
+
const authorizationObject = Object.assign(Object.assign(Object.assign({ typeOf: factory.offerType.Offer, itemOffered: {
|
|
85
|
+
typeOf: factory.product.ProductType.EventService,
|
|
86
|
+
serviceOutput: {
|
|
87
|
+
typeOf: factory.reservationType.ReservationPackage,
|
|
88
|
+
reservationFor: { id: eventId }
|
|
89
|
+
}
|
|
90
|
+
} }, (typeof eventOfferId === 'string' && eventOfferId !== '') ? { id: eventOfferId } : undefined), (typeof (ticketedOffer === null || ticketedOffer === void 0 ? void 0 : ticketedOffer.token) === 'string' && ticketedOffer.token !== '')
|
|
91
|
+
? { token: ticketedOffer.token }
|
|
92
|
+
: undefined), (typeof validForMemberTierToken === 'string' && validForMemberTierToken !== ''
|
|
93
|
+
&& typeof validForMemberProgramIdentifier === 'string' && validForMemberProgramIdentifier !== '')
|
|
94
|
+
? {
|
|
95
|
+
validForMemberTier: {
|
|
96
|
+
token: validForMemberTierToken,
|
|
97
|
+
isTierOf: { identifier: validForMemberProgramIdentifier }
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
: undefined);
|
|
101
|
+
// validations(eventId,eventOfferIdentifier,offerToken...)
|
|
102
|
+
yield (0, validateStartRequest_1.validEventOfferByApplicationExists)({
|
|
103
|
+
event,
|
|
104
|
+
now,
|
|
105
|
+
availableAt: { id: instrument.id },
|
|
106
|
+
acceptedEventOffer: authorizationObject,
|
|
107
|
+
numAcceptedOffers: 0 // オファーチケット発行時は予約数を検証しないので0でok
|
|
108
|
+
})(repos);
|
|
109
|
+
const expiresInSeconds = moment(transaction.expires)
|
|
110
|
+
.diff(now, 'seconds');
|
|
111
|
+
const { ticketToken } = yield createOfferTicket({
|
|
112
|
+
object: authorizationObject,
|
|
113
|
+
validFrom: now,
|
|
114
|
+
expiresInSeconds,
|
|
115
|
+
issuedBy,
|
|
116
|
+
audience: { id: transaction.id, typeOf: transaction.typeOf },
|
|
117
|
+
author,
|
|
118
|
+
project,
|
|
119
|
+
instrument
|
|
120
|
+
})(repos);
|
|
121
|
+
return { ticketToken };
|
|
122
|
+
});
|
|
123
|
+
}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { authorize } from './event/authorize';
|
|
2
2
|
import { importCategoryCodesFromCOA, importFromCOA } from './event/importFromCOA';
|
|
3
|
+
import { issueEventOfferTicket } from './event/issueEventOfferTicket';
|
|
3
4
|
import { searchEventTicketOffers } from './event/searchEventTicketOffers';
|
|
4
5
|
import { searchOfferAppliesToMovieTicket } from './event/searchOfferAppliesToMovieTicket';
|
|
5
6
|
import { searchOfferCatalogItemAvailability } from './event/searchOfferCatalogItemAvailability';
|
|
6
7
|
import { searchOfferCatalogItems } from './event/searchOfferCatalogItems';
|
|
7
8
|
import { voidTransaction } from './event/voidTransaction';
|
|
8
|
-
export { authorize, importCategoryCodesFromCOA, importFromCOA, voidTransaction, searchEventTicketOffers, searchOfferAppliesToMovieTicket, searchOfferCatalogItemAvailability, searchOfferCatalogItems };
|
|
9
|
+
export { authorize, importCategoryCodesFromCOA, importFromCOA, issueEventOfferTicket, voidTransaction, searchEventTicketOffers, searchOfferAppliesToMovieTicket, searchOfferCatalogItemAvailability, searchOfferCatalogItems };
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.searchOfferCatalogItems = exports.searchOfferCatalogItemAvailability = exports.searchOfferAppliesToMovieTicket = exports.searchEventTicketOffers = exports.voidTransaction = exports.importFromCOA = exports.importCategoryCodesFromCOA = exports.authorize = void 0;
|
|
3
|
+
exports.searchOfferCatalogItems = exports.searchOfferCatalogItemAvailability = exports.searchOfferAppliesToMovieTicket = exports.searchEventTicketOffers = exports.voidTransaction = exports.issueEventOfferTicket = exports.importFromCOA = exports.importCategoryCodesFromCOA = exports.authorize = void 0;
|
|
4
4
|
const authorize_1 = require("./event/authorize");
|
|
5
5
|
Object.defineProperty(exports, "authorize", { enumerable: true, get: function () { return authorize_1.authorize; } });
|
|
6
6
|
const importFromCOA_1 = require("./event/importFromCOA");
|
|
7
7
|
Object.defineProperty(exports, "importCategoryCodesFromCOA", { enumerable: true, get: function () { return importFromCOA_1.importCategoryCodesFromCOA; } });
|
|
8
8
|
Object.defineProperty(exports, "importFromCOA", { enumerable: true, get: function () { return importFromCOA_1.importFromCOA; } });
|
|
9
|
+
const issueEventOfferTicket_1 = require("./event/issueEventOfferTicket");
|
|
10
|
+
Object.defineProperty(exports, "issueEventOfferTicket", { enumerable: true, get: function () { return issueEventOfferTicket_1.issueEventOfferTicket; } });
|
|
9
11
|
const searchEventTicketOffers_1 = require("./event/searchEventTicketOffers");
|
|
10
12
|
Object.defineProperty(exports, "searchEventTicketOffers", { enumerable: true, get: function () { return searchEventTicketOffers_1.searchEventTicketOffers; } });
|
|
11
13
|
const searchOfferAppliesToMovieTicket_1 = require("./event/searchOfferAppliesToMovieTicket");
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { EventRepo } from '../repo/event';
|
|
2
2
|
import type { SeatRepo } from '../repo/place/seat';
|
|
3
|
+
import type { SectionRepo } from '../repo/place/section';
|
|
3
4
|
import type { StockHolderRepo } from '../repo/stockHolder';
|
|
4
5
|
import * as factory from '../factory';
|
|
5
6
|
import * as EventOfferService from './offer/event';
|
|
@@ -25,6 +26,11 @@ type ISeatAsEventOffer = Pick<factory.place.seat.IPlaceWithOffer, 'branchCode' |
|
|
|
25
26
|
};
|
|
26
27
|
offers?: Pick<factory.place.seat.IOffer, 'availability'>[];
|
|
27
28
|
};
|
|
29
|
+
type ISeatOfferBySection = Pick<factory.place.seat.IOffer, 'availability'> & {
|
|
30
|
+
itemOffered: {
|
|
31
|
+
branchCode: string;
|
|
32
|
+
};
|
|
33
|
+
};
|
|
28
34
|
/**
|
|
29
35
|
* イベントに対する座席オファーを検索する
|
|
30
36
|
*/
|
|
@@ -43,9 +49,33 @@ export declare function searchEventSeatOffersWithPaging(params: {
|
|
|
43
49
|
id: string;
|
|
44
50
|
};
|
|
45
51
|
$projection?: factory.place.seat.IProjection;
|
|
46
|
-
options: {
|
|
52
|
+
options: {
|
|
53
|
+
/**
|
|
54
|
+
* 自動的にひとつめのセクションに絞るかどうか
|
|
55
|
+
*/
|
|
56
|
+
useDefaultSection: boolean;
|
|
57
|
+
};
|
|
47
58
|
}): (repos: {
|
|
48
59
|
event: EventRepo;
|
|
49
60
|
stockHolder: StockHolderRepo;
|
|
50
61
|
seat: SeatRepo;
|
|
62
|
+
section: SectionRepo;
|
|
51
63
|
}) => Promise<ISeatAsEventOffer[]>;
|
|
64
|
+
/**
|
|
65
|
+
* セクション指定でイベントに対する座席オファーを検索する
|
|
66
|
+
*/
|
|
67
|
+
export declare function findEventSeatOffersBySection(params: {
|
|
68
|
+
limit: number;
|
|
69
|
+
page: number;
|
|
70
|
+
projectId: string;
|
|
71
|
+
sellerId: string;
|
|
72
|
+
eventId: string;
|
|
73
|
+
/**
|
|
74
|
+
* セクションコード
|
|
75
|
+
*/
|
|
76
|
+
sectionCode: string;
|
|
77
|
+
}): (repos: {
|
|
78
|
+
event: EventRepo;
|
|
79
|
+
stockHolder: StockHolderRepo;
|
|
80
|
+
seat: SeatRepo;
|
|
81
|
+
}) => Promise<ISeatOfferBySection[]>;
|