@chevre/domain 20.7.0-alpha.7 → 20.7.0-alpha.8
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/service/offer/eventServiceByCOA/validateAcceptedOffers.d.ts +2 -0
- package/lib/chevre/service/offer/eventServiceByCOA/validateAcceptedOffers.js +73 -18
- package/lib/chevre/service/offer/eventServiceByCOA.d.ts +5 -2
- package/lib/chevre/service/offer/eventServiceByCOA.js +12 -4
- package/package.json +1 -1
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import * as factory from '../../../factory';
|
|
1
2
|
import { MongoRepository as OfferRepo } from '../../../repo/offer';
|
|
2
3
|
import { IAcceptedOffer4COA } from './factory';
|
|
3
4
|
/**
|
|
@@ -13,6 +14,7 @@ declare function validateAcceptedOffers(params: {
|
|
|
13
14
|
project: {
|
|
14
15
|
id: string;
|
|
15
16
|
};
|
|
17
|
+
availablePaymentMethodTypes: factory.categoryCode.ICategoryCode[];
|
|
16
18
|
}): (repos: {
|
|
17
19
|
offer: OfferRepo;
|
|
18
20
|
}) => Promise<{
|
|
@@ -12,6 +12,44 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
12
12
|
exports.validateAcceptedOffers = void 0;
|
|
13
13
|
const factory = require("../../../factory");
|
|
14
14
|
const MENBERSHIP_COUPON_PAYMENT_METHOD_TYPE = 'MembershipCoupon'; // ひとまず固定
|
|
15
|
+
function createAppliesToMovieTicket(params) {
|
|
16
|
+
const isMvtkOrMG = typeof params.ticketInfo.mvtkNum === 'string' && params.ticketInfo.mvtkNum.length > 0;
|
|
17
|
+
let movieTicketTypeChargePriceSpec;
|
|
18
|
+
let appliesToMovieTicket;
|
|
19
|
+
if (isMvtkOrMG) {
|
|
20
|
+
// kbnMgtkから動的にavailablePaymentMethodを設定
|
|
21
|
+
let kbnMgtk = params.ticketInfo.kbnMgtk;
|
|
22
|
+
if (typeof kbnMgtk !== 'string') {
|
|
23
|
+
kbnMgtk = '';
|
|
24
|
+
}
|
|
25
|
+
const availablePaymentMethodType = params.availablePaymentMethodTypes.find((categoryCode) => { var _a, _b; return ((_b = (_a = categoryCode.additionalProperty) === null || _a === void 0 ? void 0 : _a.find((property) => property.name === 'kbnMgtk')) === null || _b === void 0 ? void 0 : _b.value) === kbnMgtk; });
|
|
26
|
+
if (availablePaymentMethodType === undefined) {
|
|
27
|
+
throw new factory.errors.Argument('offer', `available payment method type not found for kbnMgtk: ${kbnMgtk}`);
|
|
28
|
+
}
|
|
29
|
+
const availablePaymentMethod = availablePaymentMethodType.codeValue;
|
|
30
|
+
movieTicketTypeChargePriceSpec = {
|
|
31
|
+
project: { typeOf: factory.organizationType.Project, id: params.project.id },
|
|
32
|
+
typeOf: factory.priceSpecificationType.MovieTicketTypeChargeSpecification,
|
|
33
|
+
name: { ja: params.ticketInfo.ticketName, en: params.ticketInfo.ticketNameEng },
|
|
34
|
+
price: Number(params.ticketInfo.addPrice),
|
|
35
|
+
priceCurrency: factory.priceCurrency.JPY,
|
|
36
|
+
valueAddedTaxIncluded: true,
|
|
37
|
+
appliesToMovieTicket: {
|
|
38
|
+
typeOf: factory.service.paymentService.PaymentServiceType.MovieTicket,
|
|
39
|
+
serviceType: params.ticketInfo.mvtkKbnKensyu,
|
|
40
|
+
serviceOutput: { typeOf: availablePaymentMethod }
|
|
41
|
+
},
|
|
42
|
+
appliesToVideoFormat: params.ticketInfo.kbnEisyahousiki
|
|
43
|
+
};
|
|
44
|
+
appliesToMovieTicket = {
|
|
45
|
+
typeOf: factory.service.paymentService.PaymentServiceType.MovieTicket,
|
|
46
|
+
identifier: params.ticketInfo.mvtkNum,
|
|
47
|
+
serviceType: params.ticketInfo.mvtkKbnKensyu,
|
|
48
|
+
serviceOutput: { typeOf: availablePaymentMethod }
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
return { movieTicketTypeChargePriceSpec, appliesToMovieTicket };
|
|
52
|
+
}
|
|
15
53
|
/**
|
|
16
54
|
* 受け入れらたオファーの内容を検証
|
|
17
55
|
*/
|
|
@@ -29,7 +67,7 @@ function validateAcceptedOffers(params) {
|
|
|
29
67
|
project: { id: { $eq: params.project.id } }
|
|
30
68
|
});
|
|
31
69
|
}
|
|
32
|
-
//
|
|
70
|
+
// tslint:disable-next-line:max-func-body-length
|
|
33
71
|
const acceptedOffers = params.object.acceptedOffer.map((acceptedOffer) => {
|
|
34
72
|
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
35
73
|
const availableUnitPriceOffer = availableUnitPriceOffers.find((unitPriceOffer) => unitPriceOffer.id === acceptedOffer.id);
|
|
@@ -40,6 +78,18 @@ function validateAcceptedOffers(params) {
|
|
|
40
78
|
if (priceSpecification === undefined) {
|
|
41
79
|
throw new factory.errors.NotFound('priceSpecification');
|
|
42
80
|
}
|
|
81
|
+
const unitPriceSpecByRequest = priceSpecification.priceComponent.find((component) => component.typeOf === factory.priceSpecificationType.UnitPriceSpecification);
|
|
82
|
+
if (unitPriceSpecByRequest === undefined) {
|
|
83
|
+
throw new factory.errors.ArgumentNull('offer.priceSpecification.priceComponent');
|
|
84
|
+
}
|
|
85
|
+
// appliesToMovieTicket.serviceOutput.typeOfを自動補完(2023-03-13~)
|
|
86
|
+
const { appliesToMovieTicket, movieTicketTypeChargePriceSpec } = createAppliesToMovieTicket({
|
|
87
|
+
project: { id: params.project.id },
|
|
88
|
+
ticketInfo,
|
|
89
|
+
availablePaymentMethodTypes: params.availablePaymentMethodTypes
|
|
90
|
+
});
|
|
91
|
+
let surfrockChargePriceSpec;
|
|
92
|
+
let appliesToMovieTicket4surfrock;
|
|
43
93
|
// appliesToSurfrockの指定があれば強制的にMovieTicket決済
|
|
44
94
|
let eligibleMonetaryAmount;
|
|
45
95
|
const surfrockIdentifier = (_b = (_a = acceptedOffer.priceSpecification) === null || _a === void 0 ? void 0 : _a.appliesToSurfrock) === null || _b === void 0 ? void 0 : _b.identifier;
|
|
@@ -49,7 +99,7 @@ function validateAcceptedOffers(params) {
|
|
|
49
99
|
if (typeof serviceType !== 'string') {
|
|
50
100
|
throw new factory.errors.NotFound('ticketCode of unitPriceOffer');
|
|
51
101
|
}
|
|
52
|
-
|
|
102
|
+
surfrockChargePriceSpec = {
|
|
53
103
|
appliesToMovieTicket: {
|
|
54
104
|
typeOf: factory.service.paymentService.PaymentServiceType.MovieTicket,
|
|
55
105
|
serviceOutput: { typeOf: MENBERSHIP_COUPON_PAYMENT_METHOD_TYPE },
|
|
@@ -62,22 +112,12 @@ function validateAcceptedOffers(params) {
|
|
|
62
112
|
typeOf: factory.priceSpecificationType.MovieTicketTypeChargeSpecification,
|
|
63
113
|
valueAddedTaxIncluded: true
|
|
64
114
|
};
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
component.appliesToMovieTicket.push({
|
|
72
|
-
typeOf: factory.service.paymentService.PaymentServiceType.MovieTicket,
|
|
73
|
-
identifier: surfrockIdentifier,
|
|
74
|
-
serviceOutput: { typeOf: MENBERSHIP_COUPON_PAYMENT_METHOD_TYPE },
|
|
75
|
-
serviceType
|
|
76
|
-
});
|
|
77
|
-
}
|
|
78
|
-
return component;
|
|
79
|
-
});
|
|
80
|
-
priceSpecification.priceComponent.push(surfrockChargePriceSpec);
|
|
115
|
+
appliesToMovieTicket4surfrock = {
|
|
116
|
+
typeOf: factory.service.paymentService.PaymentServiceType.MovieTicket,
|
|
117
|
+
identifier: surfrockIdentifier,
|
|
118
|
+
serviceOutput: { typeOf: MENBERSHIP_COUPON_PAYMENT_METHOD_TYPE },
|
|
119
|
+
serviceType
|
|
120
|
+
};
|
|
81
121
|
}
|
|
82
122
|
else {
|
|
83
123
|
// appliesToSurfrockの指定がなければ単価オファーの適用通貨条件を強制適用
|
|
@@ -85,6 +125,21 @@ function validateAcceptedOffers(params) {
|
|
|
85
125
|
eligibleMonetaryAmount = availableUnitPriceOffer.eligibleMonetaryAmount;
|
|
86
126
|
}
|
|
87
127
|
}
|
|
128
|
+
const unitPriceSpec = Object.assign({ typeOf: factory.priceSpecificationType.UnitPriceSpecification, name: unitPriceSpecByRequest.name, price: unitPriceSpecByRequest.price, priceCurrency: factory.priceCurrency.JPY, referenceQuantity: unitPriceSpecByRequest.referenceQuantity, valueAddedTaxIncluded: true }, (appliesToMovieTicket !== undefined || appliesToMovieTicket4surfrock !== undefined)
|
|
129
|
+
? {
|
|
130
|
+
appliesToMovieTicket: [
|
|
131
|
+
...(appliesToMovieTicket !== undefined) ? [appliesToMovieTicket] : [],
|
|
132
|
+
...(appliesToMovieTicket4surfrock !== undefined) ? [appliesToMovieTicket4surfrock] : []
|
|
133
|
+
]
|
|
134
|
+
}
|
|
135
|
+
: undefined);
|
|
136
|
+
// priceComponentを再生成
|
|
137
|
+
const priceComponent = [
|
|
138
|
+
unitPriceSpec,
|
|
139
|
+
...(movieTicketTypeChargePriceSpec !== undefined) ? [movieTicketTypeChargePriceSpec] : [],
|
|
140
|
+
...(surfrockChargePriceSpec !== undefined) ? [surfrockChargePriceSpec] : []
|
|
141
|
+
];
|
|
142
|
+
priceSpecification.priceComponent = priceComponent;
|
|
88
143
|
return Object.assign(Object.assign({ additionalProperty,
|
|
89
144
|
itemOffered,
|
|
90
145
|
name,
|
|
@@ -1,16 +1,19 @@
|
|
|
1
1
|
import { MongoRepository as ActionRepo } from '../../repo/action';
|
|
2
|
+
import { MongoRepository as CategoryCodeRepo } from '../../repo/categoryCode';
|
|
2
3
|
import { MongoRepository as EventRepo } from '../../repo/event';
|
|
3
4
|
import { MongoRepository as OfferRepo } from '../../repo/offer';
|
|
4
5
|
import { MongoRepository as TransactionRepo } from '../../repo/transaction';
|
|
5
6
|
import { IAcceptedOffer4COA } from './eventServiceByCOA/factory';
|
|
6
7
|
import * as factory from '../../factory';
|
|
7
8
|
export import WebAPIIdentifier = factory.service.webAPI.Identifier;
|
|
8
|
-
|
|
9
|
+
interface IAuthorizeRepos {
|
|
9
10
|
action: ActionRepo;
|
|
11
|
+
categoryCode: CategoryCodeRepo;
|
|
10
12
|
event: EventRepo;
|
|
11
13
|
offer: OfferRepo;
|
|
12
14
|
transaction: TransactionRepo;
|
|
13
|
-
}
|
|
15
|
+
}
|
|
16
|
+
export declare type IAuthorizeOperation<T> = (repos: IAuthorizeRepos) => Promise<T>;
|
|
14
17
|
export declare type IAuthorizeOfferAction = factory.action.authorize.offer.seatReservation.IAction<WebAPIIdentifier.COA>;
|
|
15
18
|
/**
|
|
16
19
|
* COA興行オファー承認
|
|
@@ -29,16 +29,20 @@ function authorize(params) {
|
|
|
29
29
|
throw new factory.errors.Forbidden('Transaction not yours');
|
|
30
30
|
}
|
|
31
31
|
// イベント取得属性最適化(2023-01-23~)
|
|
32
|
-
// const screeningEvent = await repos.event.findById<factory.eventType.ScreeningEvent>({ id: params.object.event.id });
|
|
33
32
|
const screeningEvent = yield repos.event.findMinimizedIndividualEventById({
|
|
34
33
|
id: params.object.event.id
|
|
35
34
|
});
|
|
35
|
+
const availablePaymentMethodTypes = yield repos.categoryCode.search({
|
|
36
|
+
project: { id: { $eq: transaction.project.id } },
|
|
37
|
+
inCodeSet: { identifier: { $eq: factory.categoryCode.CategorySetIdentifier.PaymentMethodType } }
|
|
38
|
+
});
|
|
36
39
|
// COA仮予約後にリクエストが来る前提
|
|
37
40
|
// validate acceptedOffer(2023-03-09~)
|
|
38
41
|
// const acceptedOffer = params.object.acceptedOffer;
|
|
39
42
|
const { acceptedOffers } = yield (0, validateAcceptedOffers_1.validateAcceptedOffers)({
|
|
40
43
|
object: params.object,
|
|
41
|
-
project: { id: transaction.project.id }
|
|
44
|
+
project: { id: transaction.project.id },
|
|
45
|
+
availablePaymentMethodTypes
|
|
42
46
|
})(repos);
|
|
43
47
|
const updTmpReserveSeatArgs = params.result.requestBody;
|
|
44
48
|
const updTmpReserveSeatResult = params.result.responseBody;
|
|
@@ -145,16 +149,20 @@ function changeOffers(params) {
|
|
|
145
149
|
}
|
|
146
150
|
validate4changeOffer({ action: authorizeAction, object: params.object });
|
|
147
151
|
// イベント取得属性最適化(2023-01-23~)
|
|
148
|
-
// const screeningEvent = await repos.event.findById<factory.eventType.ScreeningEvent>({ id: params.object.event.id });
|
|
149
152
|
const screeningEvent = yield repos.event.findMinimizedIndividualEventById({
|
|
150
153
|
id: params.object.event.id
|
|
151
154
|
});
|
|
155
|
+
const availablePaymentMethodTypes = yield repos.categoryCode.search({
|
|
156
|
+
project: { id: { $eq: transaction.project.id } },
|
|
157
|
+
inCodeSet: { identifier: { $eq: factory.categoryCode.CategorySetIdentifier.PaymentMethodType } }
|
|
158
|
+
});
|
|
152
159
|
// COA仮予約後にリクエストが来る前提
|
|
153
160
|
// validate acceptedOffer(2023-03-09~)
|
|
154
161
|
// const acceptedOffer = params.object.acceptedOffer;
|
|
155
162
|
const { acceptedOffers } = yield (0, validateAcceptedOffers_1.validateAcceptedOffers)({
|
|
156
163
|
object: params.object,
|
|
157
|
-
project: { id: transaction.project.id }
|
|
164
|
+
project: { id: transaction.project.id },
|
|
165
|
+
availablePaymentMethodTypes
|
|
158
166
|
})(repos);
|
|
159
167
|
// 供給情報と価格を変更してからDB更新
|
|
160
168
|
authorizeAction.object.acceptedOffer = acceptedOffers;
|
package/package.json
CHANGED