@chevre/domain 21.2.0-alpha.94 → 21.2.0-alpha.96
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/chevre/repo/assetTransaction.d.ts +1 -1
- package/lib/chevre/repo/assetTransaction.js +6 -5
- package/lib/chevre/repo/mongoose/schemas/reservation.d.ts +3 -3
- package/lib/chevre/repo/reservation.d.ts +4 -0
- package/lib/chevre/repo/reservation.js +5 -3
- package/lib/chevre/service/assetTransaction/reserve/factory.d.ts +7 -2
- package/lib/chevre/service/assetTransaction/reserve/factory.js +48 -12
- package/lib/chevre/service/assetTransaction/reserve.d.ts +1 -0
- package/lib/chevre/service/assetTransaction/reserve.js +18 -11
- package/lib/chevre/service/offer/event/authorize.d.ts +1 -0
- package/lib/chevre/service/offer/event/authorize.js +3 -2
- package/lib/chevre/service/reserve/cancelReservation.d.ts +1 -1
- package/lib/chevre/service/reserve/cancelReservation.js +138 -98
- package/lib/chevre/service/reserve/confirmReservation.js +6 -2
- package/lib/chevre/service/reserve/factory.d.ts +1 -1
- package/lib/chevre/service/reserve/potentialActions/onReservationCanceled.d.ts +17 -2
- package/lib/chevre/service/reserve/potentialActions/onReservationCanceled.js +23 -21
- package/lib/chevre/service/task/cancelPendingReservation.js +5 -1
- package/package.json +2 -2
|
@@ -67,7 +67,7 @@ export declare class MongoRepository {
|
|
|
67
67
|
addReservations(params: {
|
|
68
68
|
typeOf: factory.assetTransactionType.Reserve;
|
|
69
69
|
id: string;
|
|
70
|
-
object: Pick<factory.assetTransaction.reserve.IObject, 'acceptedOffer' | 'reservationFor' | 'subReservation'>;
|
|
70
|
+
object: Pick<factory.assetTransaction.reserve.IObject, 'acceptedOffer' | 'issuedThrough' | 'reservationFor' | 'subReservation'>;
|
|
71
71
|
}): Promise<factory.assetTransaction.ITransaction<factory.assetTransactionType.Reserve>>;
|
|
72
72
|
/**
|
|
73
73
|
* 取引を確定する
|
|
@@ -309,22 +309,23 @@ class MongoRepository {
|
|
|
309
309
|
});
|
|
310
310
|
}
|
|
311
311
|
addReservations(params) {
|
|
312
|
+
var _a;
|
|
312
313
|
return __awaiter(this, void 0, void 0, function* () {
|
|
313
314
|
const doc = yield this.transactionModel.findOneAndUpdate({
|
|
314
315
|
_id: { $eq: params.id },
|
|
315
316
|
typeOf: { $eq: params.typeOf },
|
|
316
317
|
status: { $eq: factory.transactionStatusType.InProgress }
|
|
317
|
-
}, {
|
|
318
|
-
'object.acceptedOffer': params.object.acceptedOffer,
|
|
318
|
+
}, Object.assign({ 'object.acceptedOffer': params.object.acceptedOffer,
|
|
319
319
|
// 念のため残す(2021/10/14)が、そのうち削除
|
|
320
320
|
// 冗長なので削除(2021/10/19~)
|
|
321
321
|
// 'object.event': params.object.reservationFor,
|
|
322
|
-
'object.reservationFor': params.object.reservationFor,
|
|
322
|
+
'object.reservationFor': params.object.reservationFor,
|
|
323
323
|
// 念のため残す(2021/10/14)が、そのうち削除
|
|
324
324
|
// 冗長なので削除(2021/10/19~)
|
|
325
325
|
// 'object.reservations': params.object.subReservation,
|
|
326
|
-
'object.subReservation': params.object.subReservation
|
|
327
|
-
|
|
326
|
+
'object.subReservation': params.object.subReservation }, (typeof ((_a = params.object.issuedThrough) === null || _a === void 0 ? void 0 : _a.typeOf) === 'string')
|
|
327
|
+
? { 'object.issuedThrough': params.object.issuedThrough }
|
|
328
|
+
: undefined), { new: true })
|
|
328
329
|
.exec();
|
|
329
330
|
if (doc === null) {
|
|
330
331
|
throw new factory.errors.NotFound(this.transactionModel.modelName);
|
|
@@ -61,12 +61,12 @@ declare const schema: Schema<any, import("mongoose").Model<any, any, any, any, a
|
|
|
61
61
|
project?: any;
|
|
62
62
|
additionalProperty?: any;
|
|
63
63
|
reservationFor?: any;
|
|
64
|
+
issuedThrough?: any;
|
|
64
65
|
subReservation?: any;
|
|
65
66
|
broker?: any;
|
|
66
67
|
underName?: any;
|
|
67
68
|
price?: any;
|
|
68
69
|
priceCurrency?: string | undefined;
|
|
69
|
-
issuedThrough?: any;
|
|
70
70
|
reservedTicket?: any;
|
|
71
71
|
additionalTicketText?: string | undefined;
|
|
72
72
|
bookingTime?: Date | undefined;
|
|
@@ -89,12 +89,12 @@ declare const schema: Schema<any, import("mongoose").Model<any, any, any, any, a
|
|
|
89
89
|
project?: any;
|
|
90
90
|
additionalProperty?: any;
|
|
91
91
|
reservationFor?: any;
|
|
92
|
+
issuedThrough?: any;
|
|
92
93
|
subReservation?: any;
|
|
93
94
|
broker?: any;
|
|
94
95
|
underName?: any;
|
|
95
96
|
price?: any;
|
|
96
97
|
priceCurrency?: string | undefined;
|
|
97
|
-
issuedThrough?: any;
|
|
98
98
|
reservedTicket?: any;
|
|
99
99
|
additionalTicketText?: string | undefined;
|
|
100
100
|
bookingTime?: Date | undefined;
|
|
@@ -117,12 +117,12 @@ declare const schema: Schema<any, import("mongoose").Model<any, any, any, any, a
|
|
|
117
117
|
project?: any;
|
|
118
118
|
additionalProperty?: any;
|
|
119
119
|
reservationFor?: any;
|
|
120
|
+
issuedThrough?: any;
|
|
120
121
|
subReservation?: any;
|
|
121
122
|
broker?: any;
|
|
122
123
|
underName?: any;
|
|
123
124
|
price?: any;
|
|
124
125
|
priceCurrency?: string | undefined;
|
|
125
|
-
issuedThrough?: any;
|
|
126
126
|
reservedTicket?: any;
|
|
127
127
|
additionalTicketText?: string | undefined;
|
|
128
128
|
bookingTime?: Date | undefined;
|
|
@@ -35,11 +35,15 @@ export declare class MongoRepository {
|
|
|
35
35
|
reservationNumber: string;
|
|
36
36
|
previousReservationStatus: factory.reservationStatusType;
|
|
37
37
|
underName?: factory.reservation.IUnderName<factory.reservationType.EventReservation>;
|
|
38
|
+
broker?: factory.reservation.IBroker<factory.reservationType>;
|
|
39
|
+
issuedThrough?: factory.assetTransaction.reserve.IIssuedThrough;
|
|
38
40
|
}): Promise<void>;
|
|
39
41
|
confirmByIdIfNotExist(params: {
|
|
40
42
|
reservation: factory.assetTransaction.reserve.IObjectSubReservation;
|
|
41
43
|
reservationFor: factory.assetTransaction.reserve.IReservationFor;
|
|
42
44
|
underName?: factory.reservation.IUnderName<factory.reservationType.EventReservation>;
|
|
45
|
+
broker?: factory.reservation.IBroker<factory.reservationType>;
|
|
46
|
+
issuedThrough?: factory.assetTransaction.reserve.IIssuedThrough;
|
|
43
47
|
}): Promise<void>;
|
|
44
48
|
/**
|
|
45
49
|
* 予約取消
|
|
@@ -913,22 +913,24 @@ class MongoRepository {
|
|
|
913
913
|
});
|
|
914
914
|
}
|
|
915
915
|
confirmByReservationNumber(params) {
|
|
916
|
+
var _a, _b;
|
|
916
917
|
return __awaiter(this, void 0, void 0, function* () {
|
|
917
918
|
const conditions = {
|
|
918
919
|
reservationNumber: { $eq: String(params.reservationNumber) },
|
|
919
920
|
reservationStatus: { $eq: params.previousReservationStatus }
|
|
920
921
|
};
|
|
921
|
-
const update = Object.assign({
|
|
922
|
+
const update = Object.assign(Object.assign(Object.assign({
|
|
922
923
|
// previousReservationStatusを保管(2023-01-19~)
|
|
923
|
-
previousReservationStatus: params.previousReservationStatus, reservationStatus: factory.reservationStatusType.ReservationConfirmed, modifiedTime: new Date() }, (params.underName !== undefined) ? { underName: params.underName } : undefined);
|
|
924
|
+
previousReservationStatus: params.previousReservationStatus, reservationStatus: factory.reservationStatusType.ReservationConfirmed, modifiedTime: new Date() }, (params.underName !== undefined) ? { underName: params.underName } : undefined), (typeof ((_a = params.broker) === null || _a === void 0 ? void 0 : _a.typeOf) === 'string') ? { broker: params.broker } : undefined), (typeof ((_b = params.issuedThrough) === null || _b === void 0 ? void 0 : _b.typeOf) === 'string') ? { issuedThrough: params.issuedThrough } : undefined);
|
|
924
925
|
yield this.reservationModel.updateMany(conditions, update)
|
|
925
926
|
.exec();
|
|
926
927
|
});
|
|
927
928
|
}
|
|
928
929
|
confirmByIdIfNotExist(params) {
|
|
930
|
+
var _a, _b;
|
|
929
931
|
return __awaiter(this, void 0, void 0, function* () {
|
|
930
932
|
const confirmedReservation = yield this.reservationModel.findOneAndUpdate({ _id: { $eq: params.reservation.id } }, {
|
|
931
|
-
$setOnInsert: Object.assign(Object.assign(Object.assign({}, params.reservation), { _id: params.reservation.id, reservationFor: params.reservationFor, reservationStatus: factory.reservationStatusType.ReservationConfirmed, modifiedTime: new Date() }), (params.underName !== undefined) ? { underName: params.underName } : undefined)
|
|
933
|
+
$setOnInsert: Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, params.reservation), { _id: params.reservation.id, reservationFor: params.reservationFor, reservationStatus: factory.reservationStatusType.ReservationConfirmed, modifiedTime: new Date() }), (params.underName !== undefined) ? { underName: params.underName } : undefined), (typeof ((_a = params.broker) === null || _a === void 0 ? void 0 : _a.typeOf) === 'string') ? { broker: params.broker } : undefined), (typeof ((_b = params.issuedThrough) === null || _b === void 0 ? void 0 : _b.typeOf) === 'string') ? { issuedThrough: params.issuedThrough } : undefined)
|
|
932
934
|
}, { upsert: true, new: true })
|
|
933
935
|
.select({ _id: 1 })
|
|
934
936
|
.exec();
|
|
@@ -47,6 +47,11 @@ export declare function createAdditionalTicketText(params: {
|
|
|
47
47
|
}): string | undefined;
|
|
48
48
|
export type IUnitPriceSpecification = factory.priceSpecification.IPriceSpecification<factory.priceSpecificationType.UnitPriceSpecification>;
|
|
49
49
|
export declare function createReservationFor(params: factory.event.screeningEvent.IEvent | factory.event.event.IEvent): factory.assetTransaction.reserve.IReservationFor;
|
|
50
|
+
export declare function createIssuedThrough(params: {
|
|
51
|
+
reservationFor: factory.event.screeningEvent.IEvent | factory.event.event.IEvent;
|
|
52
|
+
}): {
|
|
53
|
+
issuedThrough: factory.reservation.busReservation.IIssuedThrough | factory.reservation.eventReservation.IIssuedThrough;
|
|
54
|
+
};
|
|
50
55
|
export declare function createReservation(params: {
|
|
51
56
|
project: {
|
|
52
57
|
id: string;
|
|
@@ -78,6 +83,6 @@ export declare function createPotentialActions(params: factory.assetTransaction.
|
|
|
78
83
|
reservationPackage?: factory.action.reserve.IReservationPackageAsObject;
|
|
79
84
|
underName?: factory.reservation.IUnderName<factory.reservationType.EventReservation>;
|
|
80
85
|
};
|
|
81
|
-
export declare function
|
|
86
|
+
export declare function createCancelPendingReservationAction(params: {
|
|
82
87
|
transaction: factory.assetTransaction.ITransaction<factory.assetTransactionType.Reserve>;
|
|
83
|
-
}): factory.action.cancel.reservation.IAttributes
|
|
88
|
+
}): factory.action.cancel.reservation.IAttributes | undefined;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.createCancelPendingReservationAction = exports.createPotentialActions = exports.createReservation = exports.createIssuedThrough = exports.createReservationFor = exports.createAdditionalTicketText = exports.createAdditionalProperty = exports.validateAppliesToMovieTicket = exports.createReservedTicket = exports.createPointAward = exports.createStartParams = void 0;
|
|
4
4
|
/**
|
|
5
5
|
* 予約取引ファクトリー
|
|
6
6
|
*/
|
|
@@ -356,6 +356,42 @@ function optimizeReservationSuperEvent(params) {
|
|
|
356
356
|
? { headline: superEvent.headline }
|
|
357
357
|
: undefined);
|
|
358
358
|
}
|
|
359
|
+
function createIssuedThrough(params) {
|
|
360
|
+
var _a;
|
|
361
|
+
const eventOffers = params.reservationFor.offers;
|
|
362
|
+
// offersは必ず存在するはず
|
|
363
|
+
if (eventOffers === undefined) {
|
|
364
|
+
throw new factory.errors.NotFound('reservationFor.offers');
|
|
365
|
+
}
|
|
366
|
+
const serviceTypeOfIssuedThrough = (typeof ((_a = eventOffers.itemOffered.serviceType) === null || _a === void 0 ? void 0 : _a.codeValue) === 'string')
|
|
367
|
+
? {
|
|
368
|
+
codeValue: eventOffers.itemOffered.serviceType.codeValue,
|
|
369
|
+
inCodeSet: {
|
|
370
|
+
typeOf: 'CategoryCodeSet',
|
|
371
|
+
identifier: factory.categoryCode.CategorySetIdentifier.ServiceType
|
|
372
|
+
},
|
|
373
|
+
typeOf: 'CategoryCode'
|
|
374
|
+
}
|
|
375
|
+
: undefined;
|
|
376
|
+
const availableChannel = eventOffers.itemOffered.availableChannel;
|
|
377
|
+
if (params.reservationFor.typeOf === factory.eventType.ScreeningEvent) {
|
|
378
|
+
const issuedThrough = Object.assign({ typeOf: factory.product.ProductType.EventService,
|
|
379
|
+
// 興行IDを追加(2022-09-08~)
|
|
380
|
+
id: eventOffers.itemOffered.id, availableChannel }, (typeof (serviceTypeOfIssuedThrough === null || serviceTypeOfIssuedThrough === void 0 ? void 0 : serviceTypeOfIssuedThrough.typeOf) === 'string') ? { serviceType: serviceTypeOfIssuedThrough } : undefined);
|
|
381
|
+
return {
|
|
382
|
+
issuedThrough
|
|
383
|
+
};
|
|
384
|
+
}
|
|
385
|
+
else {
|
|
386
|
+
const issuedThrough = Object.assign({ typeOf: factory.product.ProductType.Transportation,
|
|
387
|
+
// 興行IDを追加(2022-09-08~)
|
|
388
|
+
id: eventOffers.itemOffered.id, availableChannel }, (typeof (serviceTypeOfIssuedThrough === null || serviceTypeOfIssuedThrough === void 0 ? void 0 : serviceTypeOfIssuedThrough.typeOf) === 'string') ? { serviceType: serviceTypeOfIssuedThrough } : undefined);
|
|
389
|
+
return {
|
|
390
|
+
issuedThrough
|
|
391
|
+
};
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
exports.createIssuedThrough = createIssuedThrough;
|
|
359
395
|
// tslint:disable-next-line:cyclomatic-complexity max-func-body-length
|
|
360
396
|
function createReservation(params) {
|
|
361
397
|
var _a, _b, _c, _d, _e;
|
|
@@ -561,10 +597,10 @@ function createMoneyTransferActions(params) {
|
|
|
561
597
|
}
|
|
562
598
|
return moneyTransfer;
|
|
563
599
|
}
|
|
564
|
-
function
|
|
600
|
+
function createCancelPendingReservationAction(params) {
|
|
565
601
|
const transaction = params.transaction;
|
|
566
602
|
const pendingReservations = (Array.isArray(transaction.object.subReservation)) ? transaction.object.subReservation : [];
|
|
567
|
-
let cancelActionAttributes
|
|
603
|
+
let cancelActionAttributes;
|
|
568
604
|
if (pendingReservations.length > 0) {
|
|
569
605
|
const reservationFor = transaction.object.reservationFor;
|
|
570
606
|
if (reservationFor === undefined) {
|
|
@@ -579,15 +615,15 @@ function createPendingReservationAction(params) {
|
|
|
579
615
|
? params.transaction.object.reservationStatus
|
|
580
616
|
: factory.reservationStatusType.ReservationPending
|
|
581
617
|
};
|
|
582
|
-
cancelActionAttributes =
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
618
|
+
cancelActionAttributes = {
|
|
619
|
+
project: transaction.project,
|
|
620
|
+
typeOf: factory.actionType.CancelAction,
|
|
621
|
+
purpose: { typeOf: transaction.typeOf, id: transaction.id },
|
|
622
|
+
agent: transaction.project,
|
|
623
|
+
object: reservationPackage,
|
|
624
|
+
potentialActions: {}
|
|
625
|
+
};
|
|
590
626
|
}
|
|
591
627
|
return cancelActionAttributes;
|
|
592
628
|
}
|
|
593
|
-
exports.
|
|
629
|
+
exports.createCancelPendingReservationAction = createCancelPendingReservationAction;
|
|
@@ -98,6 +98,7 @@ type IStartParams = factory.assetTransaction.reserve.IStartParamsWithoutDetail &
|
|
|
98
98
|
export declare function start(params: IStartParams & {
|
|
99
99
|
disablePendingReservations: boolean;
|
|
100
100
|
useHoldStockByTransactionNumber: boolean;
|
|
101
|
+
stockHoldUntilDaysAfterEventEnd: number;
|
|
101
102
|
}): IStartOperation<{
|
|
102
103
|
transaction: factory.assetTransaction.ITransaction<factory.assetTransactionType.Reserve>;
|
|
103
104
|
objectSubReservations: IObjectSubReservation[];
|
|
@@ -73,7 +73,8 @@ function start(params) {
|
|
|
73
73
|
preSearchedTicketOffers: params.preSearchedTicketOffers,
|
|
74
74
|
preSearchedUnitPriceOffers: params.preSearchedUnitPriceOffers,
|
|
75
75
|
availableAtOrFrom: { id: (_e = params.availableAtOrFrom) === null || _e === void 0 ? void 0 : _e.id },
|
|
76
|
-
validateAppliesToMovieTicket: params.validateAppliesToMovieTicket
|
|
76
|
+
validateAppliesToMovieTicket: params.validateAppliesToMovieTicket,
|
|
77
|
+
stockHoldUntilDaysAfterEventEnd: params.stockHoldUntilDaysAfterEventEnd
|
|
77
78
|
})(repos);
|
|
78
79
|
transaction = addReservationsResult.transaction;
|
|
79
80
|
objectSubReservations = addReservationsResult.objectSubReservations;
|
|
@@ -135,6 +136,7 @@ function addReservations(params) {
|
|
|
135
136
|
})(repos);
|
|
136
137
|
// 予約イベント最適化
|
|
137
138
|
const reservationFor = (0, factory_1.createReservationFor)(event);
|
|
139
|
+
const { issuedThrough } = (0, factory_1.createIssuedThrough)({ reservationFor: event });
|
|
138
140
|
// const minimizedObjectSubReservations: factory.assetTransaction.reserve.IMinimizedObjectSubReservation[] =
|
|
139
141
|
// objectSubReservations.map((r) => {
|
|
140
142
|
// return {
|
|
@@ -158,6 +160,8 @@ function addReservations(params) {
|
|
|
158
160
|
id: transaction.id,
|
|
159
161
|
object: {
|
|
160
162
|
acceptedOffer: acceptedOffers4transactionObject,
|
|
163
|
+
// issuedThroughを追加(2023-06-05~)
|
|
164
|
+
issuedThrough,
|
|
161
165
|
reservationFor,
|
|
162
166
|
// subReservationにreservationForを保管しない(2021-10-19~)
|
|
163
167
|
subReservation: objectSubReservations
|
|
@@ -182,7 +186,8 @@ function addReservations(params) {
|
|
|
182
186
|
id: transaction.id,
|
|
183
187
|
transactionNumber: transaction.transactionNumber,
|
|
184
188
|
object: { useHoldStockByTransactionNumber: transaction.object.useHoldStockByTransactionNumber === true }
|
|
185
|
-
}
|
|
189
|
+
},
|
|
190
|
+
stockHoldUntilDaysAfterEventEnd: params.stockHoldUntilDaysAfterEventEnd
|
|
186
191
|
})(repos);
|
|
187
192
|
if (transaction.object.disablePendingReservations !== true) {
|
|
188
193
|
// 予約作成(insertManyで実装)
|
|
@@ -658,7 +663,9 @@ function processLockSeats(params) {
|
|
|
658
663
|
}
|
|
659
664
|
});
|
|
660
665
|
const expires = moment(params.event.endDate)
|
|
661
|
-
|
|
666
|
+
// 設定化(2023-06-05~)
|
|
667
|
+
// .add(1, 'month')
|
|
668
|
+
.add(params.stockHoldUntilDaysAfterEventEnd, 'days')
|
|
662
669
|
.toDate();
|
|
663
670
|
// holder:取引番号に対応(2023-06-05~)
|
|
664
671
|
let holder = params.transaction.id;
|
|
@@ -782,8 +789,8 @@ function cancel(params) {
|
|
|
782
789
|
});
|
|
783
790
|
// 本来非同期でタスクが実行されるが、同期的に仮予約取消が実行されていないと、サービス利用側が困る可能性があるので、
|
|
784
791
|
// 同期的にもcancelPendingReservationを実行しておく
|
|
785
|
-
const cancelActionAttributes = (0, factory_1.
|
|
786
|
-
if (cancelActionAttributes
|
|
792
|
+
const cancelActionAttributes = (0, factory_1.createCancelPendingReservationAction)({ transaction });
|
|
793
|
+
if (cancelActionAttributes !== undefined) {
|
|
787
794
|
yield (0, cancelReservation_1.cancelPendingReservation)(cancelActionAttributes)(repos);
|
|
788
795
|
}
|
|
789
796
|
});
|
|
@@ -828,8 +835,8 @@ function exportTasksById(params) {
|
|
|
828
835
|
case factory.transactionStatusType.Canceled:
|
|
829
836
|
// sync対応(2023-01-13~)
|
|
830
837
|
if (!settings_1.USE_ASSET_TRANSACTION_SYNC_PROCESSING) {
|
|
831
|
-
const cancelActionAttributes4canceled = (0, factory_1.
|
|
832
|
-
if (cancelActionAttributes4canceled
|
|
838
|
+
const cancelActionAttributes4canceled = (0, factory_1.createCancelPendingReservationAction)({ transaction });
|
|
839
|
+
if (cancelActionAttributes4canceled !== undefined) {
|
|
833
840
|
const cancelPendingReservationTask = {
|
|
834
841
|
project: transaction.project,
|
|
835
842
|
name: factory.taskName.CancelPendingReservation,
|
|
@@ -839,7 +846,7 @@ function exportTasksById(params) {
|
|
|
839
846
|
numberOfTried: 0,
|
|
840
847
|
executionResults: [],
|
|
841
848
|
data: {
|
|
842
|
-
actionAttributes: cancelActionAttributes4canceled
|
|
849
|
+
actionAttributes: [cancelActionAttributes4canceled]
|
|
843
850
|
}
|
|
844
851
|
};
|
|
845
852
|
taskAttributes.push(cancelPendingReservationTask);
|
|
@@ -847,8 +854,8 @@ function exportTasksById(params) {
|
|
|
847
854
|
}
|
|
848
855
|
break;
|
|
849
856
|
case factory.transactionStatusType.Expired:
|
|
850
|
-
const cancelActionAttributes = (0, factory_1.
|
|
851
|
-
if (cancelActionAttributes
|
|
857
|
+
const cancelActionAttributes = (0, factory_1.createCancelPendingReservationAction)({ transaction });
|
|
858
|
+
if (cancelActionAttributes !== undefined) {
|
|
852
859
|
const cancelPendingReservationTask = {
|
|
853
860
|
project: transaction.project,
|
|
854
861
|
name: factory.taskName.CancelPendingReservation,
|
|
@@ -858,7 +865,7 @@ function exportTasksById(params) {
|
|
|
858
865
|
numberOfTried: 0,
|
|
859
866
|
executionResults: [],
|
|
860
867
|
data: {
|
|
861
|
-
actionAttributes: cancelActionAttributes
|
|
868
|
+
actionAttributes: [cancelActionAttributes]
|
|
862
869
|
}
|
|
863
870
|
};
|
|
864
871
|
taskAttributes.push(cancelPendingReservationTask);
|
|
@@ -68,7 +68,8 @@ function authorize(params) {
|
|
|
68
68
|
validateEvent: params.validateEvent === true,
|
|
69
69
|
validateEventOfferPeriod: params.validateEventOfferPeriod === true,
|
|
70
70
|
disablePendingReservations: params.disablePendingReservations,
|
|
71
|
-
useHoldStockByTransactionNumber: params.useHoldStockByTransactionNumber
|
|
71
|
+
useHoldStockByTransactionNumber: params.useHoldStockByTransactionNumber,
|
|
72
|
+
stockHoldUntilDaysAfterEventEnd: params.stockHoldUntilDaysAfterEventEnd
|
|
72
73
|
})(repos);
|
|
73
74
|
// requestBody = processStartReserveResult.requestBody;
|
|
74
75
|
// responseBody = processStartReserveResult.responseBody;
|
|
@@ -164,7 +165,7 @@ function processStartReserve4chevre(params) {
|
|
|
164
165
|
// requestBody = startParams;
|
|
165
166
|
const startParamObject = yield validateObjectWithoutDetail(startParams)(repos);
|
|
166
167
|
// 予約取引開始
|
|
167
|
-
const startReserveTransactionResult = yield ReserveTransactionService.start(Object.assign(Object.assign({}, startParams), { object: startParamObject, preSearchedEvent: event, preSearchedTicketOffers: params.ticketOffers, preSearchedUnitPriceOffers: params.unitPriceOffers, availableAtOrFrom: { id: params.availableAtOrFrom.id }, validateEvent: params.validateEvent, validateEventOfferPeriod: params.validateEventOfferPeriod, validateAppliesToMovieTicket: true, disablePendingReservations: params.disablePendingReservations, useHoldStockByTransactionNumber: params.useHoldStockByTransactionNumber }))(repos);
|
|
168
|
+
const startReserveTransactionResult = yield ReserveTransactionService.start(Object.assign(Object.assign({}, startParams), { object: startParamObject, preSearchedEvent: event, preSearchedTicketOffers: params.ticketOffers, preSearchedUnitPriceOffers: params.unitPriceOffers, availableAtOrFrom: { id: params.availableAtOrFrom.id }, validateEvent: params.validateEvent, validateEventOfferPeriod: params.validateEventOfferPeriod, validateAppliesToMovieTicket: true, disablePendingReservations: params.disablePendingReservations, useHoldStockByTransactionNumber: params.useHoldStockByTransactionNumber, stockHoldUntilDaysAfterEventEnd: params.stockHoldUntilDaysAfterEventEnd }))(repos);
|
|
168
169
|
responseBody = startReserveTransactionResult.transaction;
|
|
169
170
|
// 予約取引からオファー情報を生成する
|
|
170
171
|
acceptedOffers4result = (0, factory_1.responseBody2acceptedOffers4result)({
|
|
@@ -8,7 +8,7 @@ import { MongoRepository as TaskRepo } from '../../repo/task';
|
|
|
8
8
|
/**
|
|
9
9
|
* 進行中の予約をキャンセルする
|
|
10
10
|
*/
|
|
11
|
-
declare function cancelPendingReservation(
|
|
11
|
+
declare function cancelPendingReservation(actionAttributes: factory.action.cancel.reservation.IAttributes): (repos: {
|
|
12
12
|
action: ActionRepo;
|
|
13
13
|
assetTransaction: AssetTransactionRepo;
|
|
14
14
|
stockHolder: StockHolderRepo;
|
|
@@ -19,65 +19,112 @@ const onReservationCanceled_1 = require("./potentialActions/onReservationCancele
|
|
|
19
19
|
/**
|
|
20
20
|
* 進行中の予約をキャンセルする
|
|
21
21
|
*/
|
|
22
|
-
|
|
23
|
-
function cancelPendingReservation(actionAttributesList) {
|
|
24
|
-
// tslint:disable-next-line:max-func-body-length
|
|
22
|
+
function cancelPendingReservation(actionAttributes) {
|
|
25
23
|
return (repos) => __awaiter(this, void 0, void 0, function* () {
|
|
24
|
+
var _a;
|
|
26
25
|
const now = new Date();
|
|
27
26
|
let canceledReservations = [];
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
27
|
+
const { reserveTransaction } = yield cancelPengindIfNotYet(actionAttributes, now)(repos);
|
|
28
|
+
if (actionAttributes.object.typeOf === factory.reservationType.ReservationPackage) {
|
|
29
|
+
if (reserveTransaction.object.disablePendingReservations === true) {
|
|
30
|
+
// Pendingが存在しない場合は検索しても無駄(2023-06-05~)
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
canceledReservations = yield repos.reservation.search({
|
|
34
|
+
reservationNumber: { $eq: actionAttributes.object.reservationNumber },
|
|
35
|
+
typeOf: factory.reservationType.EventReservation
|
|
36
|
+
});
|
|
37
|
+
canceledReservations = canceledReservations.map((r) => {
|
|
38
|
+
// _idは不要であり、存在すると予期せぬ影響を及ぼす可能性がある
|
|
39
|
+
delete r._id;
|
|
40
|
+
return r;
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
yield (0, onReservationCanceled_1.onReservationCanceled)(canceledReservations, false, {
|
|
45
|
+
project: { id: reserveTransaction.project.id },
|
|
46
|
+
id: String((_a = reserveTransaction.object.reservationFor) === null || _a === void 0 ? void 0 : _a.id)
|
|
47
|
+
})({ task: repos.task });
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
exports.cancelPendingReservation = cancelPendingReservation;
|
|
51
|
+
function cancelPengindIfNotYet(params, now) {
|
|
52
|
+
// tslint:disable-next-line:max-func-body-length
|
|
53
|
+
return (repos) => __awaiter(this, void 0, void 0, function* () {
|
|
54
|
+
const actionAttributes = params;
|
|
55
|
+
const reserveTransactionId = actionAttributes.purpose.id;
|
|
56
|
+
// 予約取引を検索
|
|
57
|
+
const reserveTransactions = yield repos.assetTransaction.search({
|
|
58
|
+
limit: 1,
|
|
59
|
+
page: 1,
|
|
60
|
+
typeOf: factory.assetTransactionType.Reserve,
|
|
61
|
+
ids: [reserveTransactionId]
|
|
62
|
+
});
|
|
63
|
+
const reserveTransaction = reserveTransactions.shift();
|
|
64
|
+
if (reserveTransaction === undefined) {
|
|
65
|
+
throw new factory.errors.NotFound(factory.assetTransactionType.Reserve);
|
|
66
|
+
}
|
|
67
|
+
// 冪等性を担保(2023-06-05~)
|
|
68
|
+
const completedActions = yield repos.action.search({
|
|
69
|
+
limit: 1,
|
|
70
|
+
page: 1,
|
|
71
|
+
actionStatus: { $in: [factory.actionStatusType.CompletedActionStatus] },
|
|
72
|
+
typeOf: { $eq: params.typeOf },
|
|
73
|
+
object: {
|
|
74
|
+
typeOf: { $eq: params.object.typeOf },
|
|
75
|
+
reservationNumber: { $eq: params.object.reservationNumber }
|
|
76
|
+
},
|
|
77
|
+
purpose: {
|
|
78
|
+
id: { $in: [params.purpose.id] },
|
|
79
|
+
typeOf: { $in: [params.purpose.typeOf] }
|
|
80
|
+
}
|
|
81
|
+
}, ['_id'], []);
|
|
82
|
+
if (completedActions.length === 0) {
|
|
83
|
+
// アクション開始
|
|
84
|
+
const action = yield repos.action.start(actionAttributes);
|
|
85
|
+
const actionObject = actionAttributes.object;
|
|
86
|
+
let cancelResult;
|
|
87
|
+
try {
|
|
88
|
+
if (reserveTransaction !== undefined) {
|
|
89
|
+
const reservationFor = reserveTransaction.object.reservationFor;
|
|
90
|
+
if (reservationFor === undefined) {
|
|
91
|
+
throw new factory.errors.NotFound('transaction.object.reservationFor');
|
|
92
|
+
}
|
|
93
|
+
// ReservationPackageに対応(2022-12-23~)
|
|
94
|
+
if (actionObject.typeOf === factory.reservationType.ReservationPackage) {
|
|
95
|
+
const subReservation = reserveTransaction.object.subReservation;
|
|
96
|
+
if (Array.isArray(subReservation) && subReservation.length > 0) {
|
|
97
|
+
yield Promise.all(subReservation.map((cancelingSubReservation) => __awaiter(this, void 0, void 0, function* () {
|
|
98
|
+
yield processUnlockSeat({
|
|
99
|
+
reservation: {
|
|
100
|
+
id: cancelingSubReservation.id,
|
|
101
|
+
reservedTicket: cancelingSubReservation.reservedTicket,
|
|
102
|
+
subReservation: cancelingSubReservation.subReservation,
|
|
103
|
+
reservationFor: {
|
|
104
|
+
id: String(reservationFor.id),
|
|
105
|
+
startDate: (reservationFor.typeOf === factory.eventType.ScreeningEvent)
|
|
106
|
+
? reservationFor.startDate
|
|
107
|
+
: reservationFor.departureTime
|
|
108
|
+
}
|
|
109
|
+
},
|
|
110
|
+
// holder:取引番号に対応(2023-06-05~)
|
|
111
|
+
expectedHolder: (reserveTransaction.object.useHoldStockByTransactionNumber === true)
|
|
112
|
+
? reserveTransaction.transactionNumber
|
|
113
|
+
: reserveTransactionId
|
|
114
|
+
})(repos);
|
|
115
|
+
yield processUnlockOfferRateLimit({
|
|
116
|
+
reservation: {
|
|
117
|
+
reservationNumber: reserveTransaction.object.reservationNumber,
|
|
118
|
+
reservedTicket: cancelingSubReservation.reservedTicket
|
|
119
|
+
},
|
|
120
|
+
reservationFor
|
|
121
|
+
})(repos);
|
|
122
|
+
})));
|
|
123
|
+
}
|
|
124
|
+
if (reserveTransaction.object.disablePendingReservations === true) {
|
|
125
|
+
// disablePendingReservationsの場合は処理不要(2023-06-05~)
|
|
49
126
|
}
|
|
50
|
-
|
|
51
|
-
if (actionObject.typeOf === factory.reservationType.ReservationPackage) {
|
|
52
|
-
const subReservation = reserveTransaction.object.subReservation;
|
|
53
|
-
if (Array.isArray(subReservation) && subReservation.length > 0) {
|
|
54
|
-
yield Promise.all(subReservation.map((cancelingSubReservation) => __awaiter(this, void 0, void 0, function* () {
|
|
55
|
-
yield processUnlockSeat({
|
|
56
|
-
reservation: {
|
|
57
|
-
id: cancelingSubReservation.id,
|
|
58
|
-
reservedTicket: cancelingSubReservation.reservedTicket,
|
|
59
|
-
subReservation: cancelingSubReservation.subReservation,
|
|
60
|
-
reservationFor: {
|
|
61
|
-
id: String(reservationFor.id),
|
|
62
|
-
startDate: (reservationFor.typeOf === factory.eventType.ScreeningEvent)
|
|
63
|
-
? reservationFor.startDate
|
|
64
|
-
: reservationFor.departureTime
|
|
65
|
-
}
|
|
66
|
-
},
|
|
67
|
-
// holder:取引番号に対応(2023-06-05~)
|
|
68
|
-
expectedHolder: (reserveTransaction.object.useHoldStockByTransactionNumber === true)
|
|
69
|
-
? reserveTransaction.transactionNumber
|
|
70
|
-
: reserveTransactionId
|
|
71
|
-
})(repos);
|
|
72
|
-
yield processUnlockOfferRateLimit({
|
|
73
|
-
reservation: {
|
|
74
|
-
reservationNumber: reserveTransaction.object.reservationNumber,
|
|
75
|
-
reservedTicket: cancelingSubReservation.reservedTicket
|
|
76
|
-
},
|
|
77
|
-
reservationFor
|
|
78
|
-
})(repos);
|
|
79
|
-
})));
|
|
80
|
-
}
|
|
127
|
+
else {
|
|
81
128
|
// 予約番号単位でキャンセル状態に変更する
|
|
82
129
|
cancelResult = yield repos.reservation.cancelByReservationNumber({
|
|
83
130
|
reservationNumber: actionObject.reservationNumber,
|
|
@@ -85,54 +132,41 @@ function cancelPendingReservation(actionAttributesList) {
|
|
|
85
132
|
modifiedTime: now
|
|
86
133
|
});
|
|
87
134
|
}
|
|
88
|
-
else {
|
|
89
|
-
// 廃止(2022-12-27~)
|
|
90
|
-
throw new factory.errors.NotImplemented(`object.typeOf '${actionObject.typeOf}' not implemented`);
|
|
91
|
-
}
|
|
92
135
|
}
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
try {
|
|
97
|
-
const actionError = Object.assign(Object.assign({}, error), { message: error.message, name: error.name });
|
|
98
|
-
yield repos.action.giveUp({ typeOf: action.typeOf, id: action.id, error: actionError });
|
|
99
|
-
}
|
|
100
|
-
catch (__) {
|
|
101
|
-
// 失敗したら仕方ない
|
|
136
|
+
else {
|
|
137
|
+
// 廃止(2022-12-27~)
|
|
138
|
+
throw new factory.errors.NotImplemented(`object.typeOf '${actionObject.typeOf}' not implemented`);
|
|
102
139
|
}
|
|
103
|
-
throw error;
|
|
104
140
|
}
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
matchedCount: cancelResult.matchedCount,
|
|
112
|
-
modifiedCount: cancelResult.modifiedCount
|
|
113
|
-
}
|
|
114
|
-
} : undefined
|
|
115
|
-
// canceledReservationId: canceledReservation?.id
|
|
116
|
-
);
|
|
117
|
-
yield repos.action.complete({ typeOf: action.typeOf, id: action.id, result: actionResult });
|
|
118
|
-
if (actionObject.typeOf === factory.reservationType.ReservationPackage) {
|
|
119
|
-
// 最新のconfirmedReservationsを検索
|
|
120
|
-
canceledReservations = yield repos.reservation.search({
|
|
121
|
-
reservationNumber: { $eq: actionObject.reservationNumber },
|
|
122
|
-
typeOf: factory.reservationType.EventReservation
|
|
123
|
-
});
|
|
124
|
-
canceledReservations = canceledReservations.map((r) => {
|
|
125
|
-
// _idは不要であり、存在すると予期せぬ影響を及ぼす可能性がある
|
|
126
|
-
delete r._id;
|
|
127
|
-
return r;
|
|
128
|
-
});
|
|
141
|
+
}
|
|
142
|
+
catch (error) {
|
|
143
|
+
// actionにエラー結果を追加
|
|
144
|
+
try {
|
|
145
|
+
const actionError = Object.assign(Object.assign({}, error), { message: error.message, name: error.name });
|
|
146
|
+
yield repos.action.giveUp({ typeOf: action.typeOf, id: action.id, error: actionError });
|
|
129
147
|
}
|
|
130
|
-
|
|
131
|
-
|
|
148
|
+
catch (__) {
|
|
149
|
+
// 失敗したら仕方ない
|
|
150
|
+
}
|
|
151
|
+
throw error;
|
|
152
|
+
}
|
|
153
|
+
// アクション完了
|
|
154
|
+
const actionResult = Object.assign({}, (cancelResult !== undefined) ? {
|
|
155
|
+
cancelResult: {
|
|
156
|
+
// n: cancelResult.n,
|
|
157
|
+
// nModified: cancelResult.nModified,
|
|
158
|
+
// ok: cancelResult.ok,
|
|
159
|
+
matchedCount: cancelResult.matchedCount,
|
|
160
|
+
modifiedCount: cancelResult.modifiedCount
|
|
161
|
+
}
|
|
162
|
+
} : undefined
|
|
163
|
+
// canceledReservationId: canceledReservation?.id
|
|
164
|
+
);
|
|
165
|
+
yield repos.action.complete({ typeOf: action.typeOf, id: action.id, result: actionResult });
|
|
132
166
|
}
|
|
167
|
+
return { reserveTransaction };
|
|
133
168
|
});
|
|
134
169
|
}
|
|
135
|
-
exports.cancelPendingReservation = cancelPendingReservation;
|
|
136
170
|
/**
|
|
137
171
|
* 予約をキャンセルする
|
|
138
172
|
*/
|
|
@@ -145,6 +179,7 @@ function cancelReservation(actionAttributesList) {
|
|
|
145
179
|
yield Promise.all(actionAttributesList.map((actionAttributes) => __awaiter(this, void 0, void 0, function* () {
|
|
146
180
|
const action = yield repos.action.start(actionAttributes);
|
|
147
181
|
let cancelResult;
|
|
182
|
+
let canceledReservationForId;
|
|
148
183
|
try {
|
|
149
184
|
if (actionAttributes.object.typeOf === factory.reservationType.ReservationPackage) {
|
|
150
185
|
// 予約取引を検索
|
|
@@ -156,12 +191,13 @@ function cancelReservation(actionAttributesList) {
|
|
|
156
191
|
});
|
|
157
192
|
const reserveTransaction = reserveTransactions.shift();
|
|
158
193
|
if (reserveTransaction === undefined) {
|
|
159
|
-
throw new factory.errors.NotFound(
|
|
194
|
+
throw new factory.errors.NotFound(factory.assetTransactionType.Reserve);
|
|
160
195
|
}
|
|
161
196
|
const reservationFor = reserveTransaction.object.reservationFor;
|
|
162
197
|
if (reservationFor === undefined) {
|
|
163
198
|
throw new factory.errors.NotFound('transaction.object.reservationFor');
|
|
164
199
|
}
|
|
200
|
+
canceledReservationForId = String(reservationFor.id);
|
|
165
201
|
const subReservation = reserveTransaction.object.subReservation;
|
|
166
202
|
if (Array.isArray(subReservation) && subReservation.length > 0) {
|
|
167
203
|
yield Promise.all(subReservation.map((cancelingSubReservation) => __awaiter(this, void 0, void 0, function* () {
|
|
@@ -210,6 +246,7 @@ function cancelReservation(actionAttributesList) {
|
|
|
210
246
|
object: { reservations: { id: { $in: [reservation.id] } } }
|
|
211
247
|
});
|
|
212
248
|
const reserveTransaction = reserveTransactions.shift();
|
|
249
|
+
canceledReservationForId = reservation.reservationFor.id;
|
|
213
250
|
// holder:取引番号に対応(2023-06-05~)
|
|
214
251
|
const expectedHolder = ((reserveTransaction === null || reserveTransaction === void 0 ? void 0 : reserveTransaction.object.useHoldStockByTransactionNumber) === true)
|
|
215
252
|
? reserveTransaction.transactionNumber
|
|
@@ -288,7 +325,10 @@ function cancelReservation(actionAttributesList) {
|
|
|
288
325
|
});
|
|
289
326
|
canceledReservations = [canceledReservation];
|
|
290
327
|
}
|
|
291
|
-
yield (0, onReservationCanceled_1.onReservationCanceled)(canceledReservations, true
|
|
328
|
+
yield (0, onReservationCanceled_1.onReservationCanceled)(canceledReservations, true, {
|
|
329
|
+
project: { id: actionAttributes.project.id },
|
|
330
|
+
id: canceledReservationForId
|
|
331
|
+
})({ task: repos.task });
|
|
292
332
|
})));
|
|
293
333
|
}
|
|
294
334
|
});
|
|
@@ -103,7 +103,9 @@ function reserveIfNotYet(params, options) {
|
|
|
103
103
|
yield repos.reservation.confirmByIdIfNotExist({
|
|
104
104
|
reservation: subReservation,
|
|
105
105
|
reservationFor,
|
|
106
|
-
underName
|
|
106
|
+
underName,
|
|
107
|
+
broker: reserveTransaction.object.broker,
|
|
108
|
+
issuedThrough: reserveTransaction.object.issuedThrough
|
|
107
109
|
});
|
|
108
110
|
})));
|
|
109
111
|
}
|
|
@@ -113,7 +115,9 @@ function reserveIfNotYet(params, options) {
|
|
|
113
115
|
yield repos.reservation.confirmByReservationNumber({
|
|
114
116
|
reservationNumber: reservationPackage.reservationNumber,
|
|
115
117
|
previousReservationStatus: reservationPackage.reservationStatus,
|
|
116
|
-
underName
|
|
118
|
+
underName,
|
|
119
|
+
broker: reserveTransaction.object.broker,
|
|
120
|
+
issuedThrough: reserveTransaction.object.issuedThrough
|
|
117
121
|
});
|
|
118
122
|
}
|
|
119
123
|
}
|
|
@@ -25,7 +25,7 @@ export interface IReservationPackage4informConfirmed {
|
|
|
25
25
|
* 予約取消通知
|
|
26
26
|
*/
|
|
27
27
|
export interface IReservation4informCanceled {
|
|
28
|
-
typeOf: factory.reservationType.EventReservation;
|
|
28
|
+
typeOf: factory.reservationType.BusReservation | factory.reservationType.EventReservation;
|
|
29
29
|
project: IProject;
|
|
30
30
|
id: string;
|
|
31
31
|
reservationStatus: factory.reservationStatusType.ReservationCancelled;
|
|
@@ -1,10 +1,25 @@
|
|
|
1
1
|
import * as factory from '../../../factory';
|
|
2
2
|
import { MongoRepository as TaskRepo } from '../../../repo/task';
|
|
3
3
|
type IEventReservation = factory.reservation.IReservation<factory.reservationType.EventReservation>;
|
|
4
|
+
type IBusReservation = factory.reservation.IReservation<factory.reservationType.BusReservation>;
|
|
5
|
+
export declare function onReservationCanceled(
|
|
4
6
|
/**
|
|
5
|
-
*
|
|
7
|
+
* ステータス変更された予約リスト
|
|
6
8
|
*/
|
|
7
|
-
|
|
9
|
+
canceledReservations: IEventReservation[] | IBusReservation[],
|
|
10
|
+
/**
|
|
11
|
+
* 予約通知有無
|
|
12
|
+
*/
|
|
13
|
+
useInformReservation: boolean,
|
|
14
|
+
/**
|
|
15
|
+
* 集計対象イベント
|
|
16
|
+
*/
|
|
17
|
+
reservationFor: {
|
|
18
|
+
project: {
|
|
19
|
+
id: string;
|
|
20
|
+
};
|
|
21
|
+
id: string;
|
|
22
|
+
}): (repos: {
|
|
8
23
|
task: TaskRepo;
|
|
9
24
|
}) => Promise<void>;
|
|
10
25
|
export {};
|
|
@@ -19,27 +19,19 @@ const settings_1 = require("../../../settings");
|
|
|
19
19
|
const offer_1 = require("../../offer");
|
|
20
20
|
const factory_1 = require("../factory");
|
|
21
21
|
const informReservations = settings_1.settings.onReservationStatusChanged.informReservation;
|
|
22
|
+
function onReservationCanceled(
|
|
22
23
|
/**
|
|
23
|
-
*
|
|
24
|
+
* ステータス変更された予約リスト
|
|
24
25
|
*/
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
// // no op
|
|
35
|
-
// }
|
|
36
|
-
// // タスク保管
|
|
37
|
-
// if (taskAttributes.length > 0) {
|
|
38
|
-
// await repos.task.saveMany(taskAttributes, { emitImmediately: true });
|
|
39
|
-
// }
|
|
40
|
-
// };
|
|
41
|
-
// }
|
|
42
|
-
function onReservationCanceled(canceledReservations, useInformReservation) {
|
|
26
|
+
canceledReservations,
|
|
27
|
+
/**
|
|
28
|
+
* 予約通知有無
|
|
29
|
+
*/
|
|
30
|
+
useInformReservation,
|
|
31
|
+
/**
|
|
32
|
+
* 集計対象イベント
|
|
33
|
+
*/
|
|
34
|
+
reservationFor) {
|
|
43
35
|
return (repos) => __awaiter(this, void 0, void 0, function* () {
|
|
44
36
|
if (Array.isArray(canceledReservations) && canceledReservations.length > 0) {
|
|
45
37
|
const now = new Date();
|
|
@@ -93,10 +85,20 @@ function onReservationCanceled(canceledReservations, useInformReservation) {
|
|
|
93
85
|
if (taskAttributes.length > 0) {
|
|
94
86
|
yield repos.task.saveMany(taskAttributes, { emitImmediately: true });
|
|
95
87
|
}
|
|
88
|
+
// const reservationForId = canceledReservations[0].reservationFor.id;
|
|
89
|
+
// if (typeof reservationForId === 'string') {
|
|
90
|
+
// await createAggregateScreeningEventIfNotExist({
|
|
91
|
+
// project,
|
|
92
|
+
// reservationFor: [{ id: reservationForId }],
|
|
93
|
+
// force: false
|
|
94
|
+
// })({ task: repos.task });
|
|
95
|
+
// }
|
|
96
|
+
}
|
|
97
|
+
if (typeof (reservationFor === null || reservationFor === void 0 ? void 0 : reservationFor.id) === 'string') {
|
|
96
98
|
// 冗長な作成を避ける
|
|
97
99
|
yield (0, offer_1.createAggregateScreeningEventIfNotExist)({
|
|
98
|
-
project,
|
|
99
|
-
reservationFor: [{ id:
|
|
100
|
+
project: { id: reservationFor.project.id },
|
|
101
|
+
reservationFor: [{ id: reservationFor.id }],
|
|
100
102
|
force: false
|
|
101
103
|
})({ task: repos.task });
|
|
102
104
|
}
|
|
@@ -32,7 +32,11 @@ function call(data) {
|
|
|
32
32
|
const reservationRepo = new reservation_1.MongoRepository(settings.connection);
|
|
33
33
|
const stockHolderRepo = new stockHolder_1.StockHolderRepository(settings.redisClient);
|
|
34
34
|
const offerRateLimitRepo = new offer_1.RedisRepository(settings.redisClient);
|
|
35
|
-
|
|
35
|
+
// アクション数は予約番号単位で1しかありえないはず(2023-06-05~)
|
|
36
|
+
if (data.actionAttributes.length !== 1) {
|
|
37
|
+
throw new factory.errors.Argument('data.actionAttributes', 'data.actionAttributes.length must be 1');
|
|
38
|
+
}
|
|
39
|
+
yield ReserveService.cancelPendingReservation(data.actionAttributes[0])({
|
|
36
40
|
action: actionRepo,
|
|
37
41
|
assetTransaction: assetTransactionRepo,
|
|
38
42
|
stockHolder: stockHolderRepo,
|
package/package.json
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
}
|
|
10
10
|
],
|
|
11
11
|
"dependencies": {
|
|
12
|
-
"@chevre/factory": "4.313.0-alpha.
|
|
12
|
+
"@chevre/factory": "4.313.0-alpha.25",
|
|
13
13
|
"@cinerino/sdk": "3.157.0-alpha.6",
|
|
14
14
|
"@motionpicture/coa-service": "9.2.0",
|
|
15
15
|
"@motionpicture/gmo-service": "5.2.0",
|
|
@@ -117,5 +117,5 @@
|
|
|
117
117
|
"postversion": "git push origin --tags",
|
|
118
118
|
"prepublishOnly": "npm run clean && npm run build && npm test && npm run doc"
|
|
119
119
|
},
|
|
120
|
-
"version": "21.2.0-alpha.
|
|
120
|
+
"version": "21.2.0-alpha.96"
|
|
121
121
|
}
|