@chevre/domain
Version:
Chevre Domain Library for Node.js
119 lines (118 loc) • 6.21 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.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 });
}
});
}
;