UNPKG

@chevre/domain

Version:

Chevre Domain Library for Node.js

119 lines (118 loc) 6.21 kB
"use strict"; 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.createEventSeries = createEventSeries; const factory = require("../../../factory"); function createEventSeries(params) { // tslint:disable-next-line:max-func-body-length return (repos) => __awaiter(this, void 0, void 0, function* () { var _a, _b; const actionAttributes = params; const action = yield repos.action.start(actionAttributes); let eventIds = []; let eventType; try { if (actionAttributes.object.length > 0) { if (((_a = actionAttributes.instrument) === null || _a === void 0 ? void 0 : _a.createScreeningEventSeriesIfNotExistByWorkPerformed) === true) { const createScreeningEventSeriesOnAllLocation = ((_b = actionAttributes.instrument) === null || _b === void 0 ? void 0 : _b.createScreeningEventSeriesOnAllLocation) === true; let creatingEventParams = actionAttributes.object.map((p) => { if (p.typeOf !== factory.eventType.ScreeningEventSeries) { throw new factory.errors.Argument('typeOf', `must be ${factory.eventType.ScreeningEventSeries}`); } return { attributes: p }; }); // 全施設対応(2023-07-21~) if (createScreeningEventSeriesOnAllLocation) { if (creatingEventParams.length !== 1) { throw new factory.errors.NotImplemented('creatingEventAttributes.length must be 1'); } const firstCreatingEventParams = creatingEventParams[0]; const movieTheaters = yield repos.movieTheater.projectFields({ project: { id: { $eq: actionAttributes.project.id } } }, ['id', 'branchCode', 'kanaName', 'name', 'parentOrganization'] // [] ); creatingEventParams = movieTheaters.map((movieTheater) => { const location = { branchCode: movieTheater.branchCode, id: movieTheater.id, // 廃止(2024-03-05~) // kanaName: movieTheater.kanaName, name: movieTheater.name, typeOf: factory.placeType.MovieTheater }; const organizer = { id: movieTheater.parentOrganization.id }; return { attributes: Object.assign(Object.assign({}, firstCreatingEventParams.attributes), { location, // organizerがfirstCreatingEventParamsにそろってしまうbug対応(2023-08-03~) organizer }) }; }); } const bulkWriteResult = yield repos.eventSeries.createIfNotExistByWorkPerformed(creatingEventParams); let upsertedIds; if (bulkWriteResult !== undefined) { // BulkWriteResult -> upsertedIds: { '0': '7iri6p4m54k0r3g' } upsertedIds = Object.values(bulkWriteResult.upsertedIds) .map(String); // upsertedIds = bulkWriteResult.getUpsertedIds() // .map((doc) => doc._id.toString()); } eventIds = (Array.isArray(upsertedIds)) ? upsertedIds : []; eventType = factory.eventType.ScreeningEventSeries; } else { // no op throw new factory.errors.NotImplemented('only createScreeningEventSeriesIfNotExistByWorkPerformed implemented'); } } } catch (error) { try { yield repos.action.giveUp({ typeOf: action.typeOf, id: action.id, error }); } catch (__) { // 失敗したら仕方ない } throw error; } yield repos.action.completeWithVoid({ typeOf: action.typeOf, id: action.id, result: (Array.isArray(eventIds)) ? eventIds.map((eventId) => { return { id: eventId, typeOf: eventType }; }) : undefined }); if (Array.isArray(eventIds) && eventIds.length > 0 && typeof eventType === 'string') { const onEventChangedTask = { project: actionAttributes.project, name: factory.taskName.OnEventChanged, status: factory.taskStatus.Ready, runsAt: new Date(), remainingNumberOfTries: 3, numberOfTried: 0, executionResults: [], data: { id: eventIds, project: { id: actionAttributes.project.id }, typeOf: eventType, isNew: true, useInform: true } }; yield repos.task.saveMany([onEventChangedTask], { emitImmediately: true }); } }); }