@chevre/domain
Version:
Chevre Domain Library for Node.js
96 lines (95 loc) • 5.44 kB
JavaScript
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.searchOfferAppliesToMovieTicket = searchOfferAppliesToMovieTicket;
const factory = require("../../../factory");
function getUnacceptedPaymentMethodByEvent(params) {
var _a;
let unacceptedPaymentMethod = [];
const unacceptedPaymentMethodByEvent = (_a = params.event.offers) === null || _a === void 0 ? void 0 : _a.unacceptedPaymentMethod;
// 施設コンテンツを参照する必要はない(2022-10-31~)
if (Array.isArray(unacceptedPaymentMethodByEvent)) {
unacceptedPaymentMethod = unacceptedPaymentMethodByEvent;
}
return unacceptedPaymentMethod;
}
/**
* オファーで利用可能な適用決済カード条件を検索する
* プロダクトのひとつめのカタログのみ検索対象なので注意
* また、サブカタログによるカタログが設定されている場合、カタログのひとつめのサブカタログのみが検索対象
*/
function searchOfferAppliesToMovieTicket(params) {
return (repos) => __awaiter(this, void 0, void 0, function* () {
var _a, _b, _c, _d;
// optimize(2024-07-18~)
const event = yield repos.event.projectEventFieldsById({ id: params.event.id }, ['project', 'startDate', 'typeOf', 'superEvent.id', 'offers.itemOffered.id', 'offers.unacceptedPaymentMethod']);
// let soundFormatTypes: string[] = [];
let videoFormatTypes = [];
if (event.typeOf === factory.eventType.ScreeningEvent) {
const superEvents = yield repos.eventSeries.projectEventSeriesFields({
limit: 1,
page: 1,
id: { $eq: event.superEvent.id }
// typeOf: factory.eventType.ScreeningEventSeries
}, ['soundFormat', 'videoFormat']);
const superEvent = superEvents.shift();
if (superEvent === undefined) {
throw new factory.errors.NotFound(factory.eventType.ScreeningEventSeries);
}
// soundFormatTypes = (Array.isArray(superEvent.soundFormat)) ? superEvent.soundFormat.map((f) => f.typeOf) : [];
videoFormatTypes = (Array.isArray(superEvent.videoFormat)) ? superEvent.videoFormat.map((f) => f.typeOf) : [];
}
const unacceptedPaymentMethod = getUnacceptedPaymentMethodByEvent({ event });
// 上映方式がなければMovieTicket除外
const excludeAppliesToMovieTicket = videoFormatTypes.length === 0;
// 興行設定があれば興行のカタログを参照する
const eventOffers = event.offers;
let catalogId;
if (typeof ((_a = eventOffers.itemOffered) === null || _a === void 0 ? void 0 : _a.id) === 'string') {
const eventService = (yield repos.product.projectFields({
limit: 1,
page: 1,
id: { $eq: eventOffers.itemOffered.id }
}, ['hasOfferCatalog']
// []
)).shift();
if (eventService === undefined) {
throw new factory.errors.NotFound(factory.product.ProductType.EventService);
}
// const firstCatalogIdOfProduct = eventService.hasOfferCatalog?.id; // migrate to itemListElement(2024-09-30~)
const firstCatalogIdOfProduct = (_c = (_b = eventService.hasOfferCatalog) === null || _b === void 0 ? void 0 : _b.itemListElement.at(0)) === null || _c === void 0 ? void 0 : _c.id;
if (typeof firstCatalogIdOfProduct === 'string') {
catalogId = firstCatalogIdOfProduct;
}
}
if (typeof catalogId !== 'string') {
throw new factory.errors.NotFound('itemOffered.hasOfferCatalog');
}
// サブカタログIDを決定
let subOfferCatalogId = catalogId;
let isOfferCatalogItem = false;
const offerCatalogFirstElement = yield repos.offerCatalog.findFirstItemListElementById({ id: catalogId });
if (offerCatalogFirstElement.typeOf === 'OfferCatalog') {
subOfferCatalogId = offerCatalogFirstElement.id;
isOfferCatalogItem = true;
}
return repos.offer.searchAvaialbleAppliesToMovieTicketByOfferCatalogId({
subOfferCatalog: { id: subOfferCatalogId, isOfferCatalogItem },
availableAtOrFrom: { id: (_d = params.store) === null || _d === void 0 ? void 0 : _d.id },
unacceptedPaymentMethod: unacceptedPaymentMethod,
excludeAppliesToMovieTicket: excludeAppliesToMovieTicket,
onlyValid: params.onlyValid === true,
limit: params.limit,
page: params.page,
useIncludeInDataCatalog: params.options.useIncludeInDataCatalog
});
});
}
;