UNPKG

@chevre/domain

Version:

Chevre Domain Library for Node.js

609 lines (608 loc) 30.4 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.aggregateAuthorizeEventServiceOfferAction = aggregateAuthorizeEventServiceOfferAction; exports.aggregateAuthorizeOrderAction = aggregateAuthorizeOrderAction; exports.aggregateAuthorizePaymentAction = aggregateAuthorizePaymentAction; exports.aggregateCancelReservationAction = aggregateCancelReservationAction; exports.aggregateCheckMovieTicketAction = aggregateCheckMovieTicketAction; exports.aggregateEvent = aggregateEvent; exports.aggregateOrder = aggregateOrder; exports.aggregateOrderAction = aggregateOrderAction; exports.aggregatePayMovieTicketAction = aggregatePayMovieTicketAction; exports.aggregatePayTransaction = aggregatePayTransaction; exports.aggregatePlaceOrder = aggregatePlaceOrder; exports.aggregateReserveAction = aggregateReserveAction; exports.aggregateReserveTransaction = aggregateReserveTransaction; exports.aggregateTask = aggregateTask; exports.aggregateUseAction = aggregateUseAction; const createDebug = require("debug"); const moment = require("moment-timezone"); const factory = require("../../factory"); const debug = createDebug('chevre-domain:service:aggregation:system'); function aggregateEvent(params) { return (repos) => __awaiter(this, void 0, void 0, function* () { var _a; const { aggregateDate } = params; if (!(aggregateDate instanceof Date)) { throw new factory.errors.Argument('aggregateDate', 'must be Date'); } const aggregateDuration = moment.duration(1, params.aggregateDurationUnit) .toISOString(); let i = -1; while (i < params.aggregationCount) { i += 1; const startFrom = moment(aggregateDate) .utc() // .tz('Asia/Tokyo') .add(-i, params.aggregateDurationUnit) .startOf(params.aggregateDurationUnit) .toDate(); const startThrough = moment(aggregateDate) .utc() // .tz('Asia/Tokyo') .add(-i, params.aggregateDurationUnit) .endOf(params.aggregateDurationUnit) .toDate(); const aggregateResult = yield repos.event.aggregateEvent({ project: { id: { $ne: params.excludedProjectId } }, startFrom, startThrough, typeOf: factory.eventType.ScreeningEvent }); debug('aggregateEvent:result', aggregateResult, (_a = aggregateResult.statuses[0]) === null || _a === void 0 ? void 0 : _a.aggregation.percentilesRemainingCapacityRate, startFrom); yield repos.agregation.saveAggregation(Object.assign({ typeOf: factory.aggregation.AggregationType.AggregateEvent, project: { id: '*', typeOf: factory.organizationType.Project }, aggregateDuration, aggregateStart: startFrom, aggregateDate }, aggregateResult)); } return { aggregationCount: i, aggregateDuration }; }); } /** * 注文集計 */ function aggregateOrder(params) { return (repos) => __awaiter(this, void 0, void 0, function* () { const { aggregateDate } = params; if (!(aggregateDate instanceof Date)) { throw new factory.errors.Argument('aggregateDate', 'must be Date'); } const aggregateDuration = moment.duration(1, params.aggregateDurationUnit) .toISOString(); let i = -1; while (i < params.aggregationCount) { i += 1; const startFrom = moment(aggregateDate) .utc() // .tz('Asia/Tokyo') .add(-i, params.aggregateDurationUnit) .startOf(params.aggregateDurationUnit) .toDate(); const startThrough = moment(aggregateDate) .utc() // .tz('Asia/Tokyo') .add(-i, params.aggregateDurationUnit) .endOf(params.aggregateDurationUnit) .toDate(); const aggregateResult = yield repos.order.aggregateOrder({ project: { id: { $ne: params.excludedProjectId } }, orderDate: { $gte: startFrom, $lte: startThrough } }); debug('aggregateOrder:result', aggregateResult, startFrom); yield repos.agregation.saveAggregation(Object.assign({ typeOf: factory.aggregation.AggregationType.AggregateOrder, project: { id: '*', typeOf: factory.organizationType.Project }, aggregateDuration, aggregateStart: startFrom, aggregateDate }, aggregateResult)); } return { aggregationCount: i, aggregateDuration }; }); } /** * 注文取引集計 */ function aggregatePlaceOrder(params) { return (repos) => __awaiter(this, void 0, void 0, function* () { var _a, _b; const { aggregateDate } = params; if (!(aggregateDate instanceof Date)) { throw new factory.errors.Argument('aggregateDate', 'must be Date'); } const aggregateDuration = moment.duration(1, params.aggregateDurationUnit) .toISOString(); let i = -1; while (i < params.aggregationCount) { i += 1; const startFrom = moment(aggregateDate) .utc() // .tz('Asia/Tokyo') .add(-i, params.aggregateDurationUnit) .startOf(params.aggregateDurationUnit) .toDate(); const startThrough = moment(aggregateDate) .utc() // .tz('Asia/Tokyo') .add(-i, params.aggregateDurationUnit) .endOf(params.aggregateDurationUnit) .toDate(); const aggregateResult = yield repos.transaction.aggregatePlaceOrder({ project: { id: { $ne: params.excludedProjectId } }, startFrom, startThrough, typeOf: factory.transactionType.PlaceOrder }); debug('aggregatePlaceOrder:result', aggregateResult, (_a = aggregateResult.statuses[0]) === null || _a === void 0 ? void 0 : _a.aggregation, startFrom); const aggregateResultsByClientId = []; if (Array.isArray(params.clientIds)) { for (const clientId of params.clientIds) { const aggregateResultByClientId = yield repos.transaction.aggregatePlaceOrder({ project: { id: { $ne: params.excludedProjectId } }, startFrom, startThrough, typeOf: factory.transactionType.PlaceOrder, clientId }); debug('aggregateResultByClientId', aggregateResultByClientId, (_b = aggregateResultByClientId.statuses[0]) === null || _b === void 0 ? void 0 : _b.aggregation, clientId, startFrom); aggregateResultsByClientId.push({ clientId, aggregation: aggregateResultByClientId }); } } yield repos.agregation.saveAggregation(Object.assign({ typeOf: factory.aggregation.AggregationType.AggregatePlaceOrder, project: { id: '*', typeOf: factory.organizationType.Project }, aggregateDuration, aggregateStart: startFrom, aggregateDate, aggregationByClient: aggregateResultsByClientId }, aggregateResult)); } return { aggregationCount: i, aggregateDuration }; }); } /** * 興行オファー承認アクション集計 */ function aggregateAuthorizeEventServiceOfferAction(params) { return (repos) => __awaiter(this, void 0, void 0, function* () { var _a; const { aggregateDate } = params; if (!(aggregateDate instanceof Date)) { throw new factory.errors.Argument('aggregateDate', 'must be Date'); } const aggregateDuration = moment.duration(1, params.aggregateDurationUnit) .toISOString(); let i = -1; while (i < params.aggregationCount) { i += 1; const startFrom = moment(aggregateDate) .utc() // .tz('Asia/Tokyo') .add(-i, params.aggregateDurationUnit) .startOf(params.aggregateDurationUnit) .toDate(); const startThrough = moment(aggregateDate) .utc() // .tz('Asia/Tokyo') .add(-i, params.aggregateDurationUnit) .endOf(params.aggregateDurationUnit) .toDate(); const aggregateResult = yield repos.action.aggregateAuthorizeEventServiceOfferAction({ project: { id: { $ne: params.excludedProjectId } }, startFrom, startThrough, typeOf: factory.actionType.AuthorizeAction }); debug('aggregateAuthorizeEventServiceOfferAction:result', aggregateResult, (_a = aggregateResult.statuses[0]) === null || _a === void 0 ? void 0 : _a.aggregation.percentilesDuration, startFrom); yield repos.agregation.saveAggregation(Object.assign({ typeOf: factory.aggregation.AggregationType.AggregateAuthorizeEventServiceOfferAction, project: { id: '*', typeOf: factory.organizationType.Project }, aggregateDuration, aggregateStart: startFrom, aggregateDate }, aggregateResult)); } return { aggregationCount: i, aggregateDuration }; }); } /** * 決済承認アクション集計 */ function aggregateAuthorizePaymentAction(params) { return (repos) => __awaiter(this, void 0, void 0, function* () { var _a; const { aggregateDate } = params; if (!(aggregateDate instanceof Date)) { throw new factory.errors.Argument('aggregateDate', 'must be Date'); } const aggregateDuration = moment.duration(1, params.aggregateDurationUnit) .toISOString(); let i = -1; while (i < params.aggregationCount) { i += 1; const startFrom = moment(aggregateDate) .utc() // .tz('Asia/Tokyo') .add(-i, params.aggregateDurationUnit) .startOf(params.aggregateDurationUnit) .toDate(); const startThrough = moment(aggregateDate) .utc() // .tz('Asia/Tokyo') .add(-i, params.aggregateDurationUnit) .endOf(params.aggregateDurationUnit) .toDate(); const aggregateResult = yield repos.action.aggregateAuthorizePaymentAction({ project: { id: { $ne: params.excludedProjectId } }, startFrom, startThrough, typeOf: factory.actionType.AuthorizeAction }); debug('aggregateAuthorizePaymentAction:result', aggregateResult, (_a = aggregateResult.statuses[0]) === null || _a === void 0 ? void 0 : _a.aggregation.percentilesDuration, startFrom); yield repos.agregation.saveAggregation(Object.assign({ typeOf: factory.aggregation.AggregationType.AggregateAuthorizePaymentAction, project: { id: '*', typeOf: factory.organizationType.Project }, aggregateDuration, aggregateStart: startFrom, aggregateDate }, aggregateResult)); } return { aggregationCount: i, aggregateDuration }; }); } function aggregateAuthorizeOrderAction(params) { return (repos) => __awaiter(this, void 0, void 0, function* () { var _a; const { aggregateDate } = params; if (!(aggregateDate instanceof Date)) { throw new factory.errors.Argument('aggregateDate', 'must be Date'); } const aggregateDuration = moment.duration(1, params.aggregateDurationUnit) .toISOString(); let i = -1; while (i < params.aggregationCount) { i += 1; const startFrom = moment(aggregateDate) .utc() // .tz('Asia/Tokyo') .add(-i, params.aggregateDurationUnit) .startOf(params.aggregateDurationUnit) .toDate(); const startThrough = moment(aggregateDate) .utc() // .tz('Asia/Tokyo') .add(-i, params.aggregateDurationUnit) .endOf(params.aggregateDurationUnit) .toDate(); const aggregateResult = yield repos.action.aggregateAuthorizeOrderAction({ project: { id: { $ne: params.excludedProjectId } }, startFrom, startThrough, typeOf: factory.actionType.AuthorizeAction }); debug('aggregateAuthorizeOrderAction:result', aggregateResult, (_a = aggregateResult.statuses[0]) === null || _a === void 0 ? void 0 : _a.aggregation.percentilesDuration, startFrom); yield repos.agregation.saveAggregation(Object.assign({ typeOf: factory.aggregation.AggregationType.AggregateAuthorizeOrderAction, project: { id: '*', typeOf: factory.organizationType.Project }, aggregateDuration, aggregateStart: startFrom, aggregateDate }, aggregateResult)); } return { aggregationCount: i, aggregateDuration }; }); } /** * 使用アクション集計 */ function aggregateUseAction(params) { return (repos) => __awaiter(this, void 0, void 0, function* () { var _a; const { aggregateDate } = params; if (!(aggregateDate instanceof Date)) { throw new factory.errors.Argument('aggregateDate', 'must be Date'); } const aggregateDuration = moment.duration(1, params.aggregateDurationUnit) .toISOString(); let i = -1; while (i < params.aggregationCount) { i += 1; const startFrom = moment(aggregateDate) .utc() // .tz('Asia/Tokyo') .add(-i, params.aggregateDurationUnit) .startOf(params.aggregateDurationUnit) .toDate(); const startThrough = moment(aggregateDate) .utc() // .tz('Asia/Tokyo') .add(-i, params.aggregateDurationUnit) .endOf(params.aggregateDurationUnit) .toDate(); const aggregateResult = yield repos.action.aggregateByTypeOf({ project: { id: { $ne: params.excludedProjectId } }, startFrom, startThrough, typeOf: factory.actionType.UseAction }); debug('aggregateUseAction:result', aggregateResult, (_a = aggregateResult.statuses[0]) === null || _a === void 0 ? void 0 : _a.aggregation.percentilesDuration, startFrom); yield repos.agregation.saveAggregation(Object.assign({ typeOf: factory.aggregation.AggregationType.AggregateUseAction, project: { id: '*', typeOf: factory.organizationType.Project }, aggregateDuration, aggregateStart: startFrom, aggregateDate }, aggregateResult)); } return { aggregationCount: i, aggregateDuration }; }); } /** * 予約アクション集計 */ function aggregateReserveAction(params) { return (repos) => __awaiter(this, void 0, void 0, function* () { var _a; const { aggregateDate } = params; if (!(aggregateDate instanceof Date)) { throw new factory.errors.Argument('aggregateDate', 'must be Date'); } const aggregateDuration = moment.duration(1, params.aggregateDurationUnit) .toISOString(); let i = -1; while (i < params.aggregationCount) { i += 1; const startFrom = moment(aggregateDate) .utc() // .tz('Asia/Tokyo') .add(-i, params.aggregateDurationUnit) .startOf(params.aggregateDurationUnit) .toDate(); const startThrough = moment(aggregateDate) .utc() // .tz('Asia/Tokyo') .add(-i, params.aggregateDurationUnit) .endOf(params.aggregateDurationUnit) .toDate(); const aggregateResult = yield repos.action.aggregateByTypeOf({ project: { id: { $ne: params.excludedProjectId } }, startFrom, startThrough, typeOf: factory.actionType.ReserveAction }); debug('aggregateReserveAction:result', aggregateResult, (_a = aggregateResult.statuses[0]) === null || _a === void 0 ? void 0 : _a.aggregation.percentilesDuration, startFrom); yield repos.agregation.saveAggregation(Object.assign({ typeOf: factory.aggregation.AggregationType.AggregateReserveAction, project: { id: '*', typeOf: factory.organizationType.Project }, aggregateDuration, aggregateStart: startFrom, aggregateDate }, aggregateResult)); } return { aggregationCount: i, aggregateDuration }; }); } /** * 注文アクション集計 */ function aggregateOrderAction(params) { return (repos) => __awaiter(this, void 0, void 0, function* () { var _a; const { aggregateDate } = params; if (!(aggregateDate instanceof Date)) { throw new factory.errors.Argument('aggregateDate', 'must be Date'); } const aggregateDuration = moment.duration(1, params.aggregateDurationUnit) .toISOString(); let i = -1; while (i < params.aggregationCount) { i += 1; const startFrom = moment(aggregateDate) .utc() // .tz('Asia/Tokyo') .add(-i, params.aggregateDurationUnit) .startOf(params.aggregateDurationUnit) .toDate(); const startThrough = moment(aggregateDate) .utc() // .tz('Asia/Tokyo') .add(-i, params.aggregateDurationUnit) .endOf(params.aggregateDurationUnit) .toDate(); const aggregateResult = yield repos.action.aggregateByTypeOf({ project: { id: { $ne: params.excludedProjectId } }, startFrom, startThrough, typeOf: factory.actionType.OrderAction }); debug('aggregateOrderAction:result', aggregateResult, (_a = aggregateResult.statuses[0]) === null || _a === void 0 ? void 0 : _a.aggregation.percentilesDuration, startFrom); yield repos.agregation.saveAggregation(Object.assign({ typeOf: factory.aggregation.AggregationType.AggregateOrderAction, project: { id: '*', typeOf: factory.organizationType.Project }, aggregateDuration, aggregateStart: startFrom, aggregateDate }, aggregateResult)); } return { aggregationCount: i, aggregateDuration }; }); } /** * 予約取消アクション集計 */ function aggregateCancelReservationAction(params) { return (repos) => __awaiter(this, void 0, void 0, function* () { var _a; const { aggregateDate } = params; if (!(aggregateDate instanceof Date)) { throw new factory.errors.Argument('aggregateDate', 'must be Date'); } const aggregateDuration = moment.duration(1, params.aggregateDurationUnit) .toISOString(); let i = -1; while (i < params.aggregationCount) { i += 1; const startFrom = moment(aggregateDate) .utc() // .tz('Asia/Tokyo') .add(-i, params.aggregateDurationUnit) .startOf(params.aggregateDurationUnit) .toDate(); const startThrough = moment(aggregateDate) .utc() // .tz('Asia/Tokyo') .add(-i, params.aggregateDurationUnit) .endOf(params.aggregateDurationUnit) .toDate(); const aggregateResult = yield repos.action.aggregateCancelReservationAction({ project: { id: { $ne: params.excludedProjectId } }, startFrom, startThrough }); debug('aggregateCancelReservationAction:result', aggregateResult, (_a = aggregateResult.statuses[0]) === null || _a === void 0 ? void 0 : _a.aggregation.percentilesDuration, startFrom); yield repos.agregation.saveAggregation(Object.assign({ typeOf: factory.aggregation.AggregationType.AggregateCancelReservationAction, project: { id: '*', typeOf: factory.organizationType.Project }, aggregateDuration, aggregateStart: startFrom, aggregateDate }, aggregateResult)); } return { aggregationCount: i, aggregateDuration }; }); } function aggregateCheckMovieTicketAction(params) { return (repos) => __awaiter(this, void 0, void 0, function* () { var _a; const { aggregateDate } = params; if (!(aggregateDate instanceof Date)) { throw new factory.errors.Argument('aggregateDate', 'must be Date'); } const aggregateDuration = moment.duration(1, params.aggregateDurationUnit) .toISOString(); let i = -1; while (i < params.aggregationCount) { i += 1; const startFrom = moment(aggregateDate) .utc() // .tz('Asia/Tokyo') .add(-i, params.aggregateDurationUnit) .startOf(params.aggregateDurationUnit) .toDate(); const startThrough = moment(aggregateDate) .utc() // .tz('Asia/Tokyo') .add(-i, params.aggregateDurationUnit) .endOf(params.aggregateDurationUnit) .toDate(); const aggregateResult = yield repos.action.aggregateCheckMovieTicketAction({ project: { id: { $ne: params.excludedProjectId } }, startFrom, startThrough }); debug('aggregateCheckMovieTicketAction:result', aggregateResult, (_a = aggregateResult.statuses[0]) === null || _a === void 0 ? void 0 : _a.aggregation.percentilesDuration, startFrom); yield repos.agregation.saveAggregation(Object.assign({ typeOf: factory.aggregation.AggregationType.AggregateCheckMovieTicketAction, project: { id: '*', typeOf: factory.organizationType.Project }, aggregateDuration, aggregateStart: startFrom, aggregateDate }, aggregateResult)); } return { aggregationCount: i, aggregateDuration }; }); } function aggregatePayMovieTicketAction(params) { return (repos) => __awaiter(this, void 0, void 0, function* () { var _a; const { aggregateDate } = params; if (!(aggregateDate instanceof Date)) { throw new factory.errors.Argument('aggregateDate', 'must be Date'); } const aggregateDuration = moment.duration(1, params.aggregateDurationUnit) .toISOString(); let i = -1; while (i < params.aggregationCount) { i += 1; const startFrom = moment(aggregateDate) .utc() // .tz('Asia/Tokyo') .add(-i, params.aggregateDurationUnit) .startOf(params.aggregateDurationUnit) .toDate(); const startThrough = moment(aggregateDate) .utc() // .tz('Asia/Tokyo') .add(-i, params.aggregateDurationUnit) .endOf(params.aggregateDurationUnit) .toDate(); const aggregateResult = yield repos.action.aggregatePayMovieTicketAction({ project: { id: { $ne: params.excludedProjectId } }, startFrom, startThrough }); debug('aggregatePayMovieTicketAction:result', aggregateResult, (_a = aggregateResult.statuses[0]) === null || _a === void 0 ? void 0 : _a.aggregation.percentilesDuration, startFrom); yield repos.agregation.saveAggregation(Object.assign({ typeOf: factory.aggregation.AggregationType.AggregatePayMovieTicketAction, project: { id: '*', typeOf: factory.organizationType.Project }, aggregateDuration, aggregateStart: startFrom, aggregateDate }, aggregateResult)); } return { aggregationCount: i, aggregateDuration }; }); } function aggregatePayTransaction(params) { return (repos) => __awaiter(this, void 0, void 0, function* () { var _a; const { aggregateDate } = params; if (!(aggregateDate instanceof Date)) { throw new factory.errors.Argument('aggregateDate', 'must be Date'); } const aggregateDuration = moment.duration(1, params.aggregateDurationUnit) .toISOString(); let i = -1; while (i < params.aggregationCount) { i += 1; const startFrom = moment(aggregateDate) .utc() // .tz('Asia/Tokyo') .add(-i, params.aggregateDurationUnit) .startOf(params.aggregateDurationUnit) .toDate(); const startThrough = moment(aggregateDate) .utc() // .tz('Asia/Tokyo') .add(-i, params.aggregateDurationUnit) .endOf(params.aggregateDurationUnit) .toDate(); const aggregateResult = yield repos.assetTransaction.aggregateAssetTransaction({ project: { id: { $ne: params.excludedProjectId } }, startFrom, startThrough, typeOf: factory.assetTransactionType.Pay }); debug('aggregatePayTransaction:result', aggregateResult, (_a = aggregateResult.statuses[0]) === null || _a === void 0 ? void 0 : _a.aggregation, startFrom); yield repos.agregation.saveAggregation(Object.assign({ typeOf: factory.aggregation.AggregationType.AggregatePay, project: { id: '*', typeOf: factory.organizationType.Project }, aggregateDuration, aggregateStart: startFrom, aggregateDate }, aggregateResult)); } return { aggregationCount: i, aggregateDuration }; }); } /** * 予約集計 */ function aggregateReserveTransaction(params) { return (repos) => __awaiter(this, void 0, void 0, function* () { var _a; const { aggregateDate } = params; if (!(aggregateDate instanceof Date)) { throw new factory.errors.Argument('aggregateDate', 'must be Date'); } const aggregateDuration = moment.duration(1, params.aggregateDurationUnit) .toISOString(); let i = -1; while (i < params.aggregationCount) { i += 1; const startFrom = moment(aggregateDate) .utc() // .tz('Asia/Tokyo') .add(-i, params.aggregateDurationUnit) .startOf(params.aggregateDurationUnit) .toDate(); const startThrough = moment(aggregateDate) .utc() // .tz('Asia/Tokyo') .add(-i, params.aggregateDurationUnit) .endOf(params.aggregateDurationUnit) .toDate(); const aggregateResult = yield repos.assetTransaction.aggregateAssetTransaction({ project: { id: { $ne: params.excludedProjectId } }, startFrom, startThrough, typeOf: factory.assetTransactionType.Reserve }); debug('aggregateReserveTransaction:result', aggregateResult, (_a = aggregateResult.statuses[0]) === null || _a === void 0 ? void 0 : _a.aggregation, startFrom); yield repos.agregation.saveAggregation(Object.assign({ typeOf: factory.aggregation.AggregationType.AggregateReserve, project: { id: '*', typeOf: factory.organizationType.Project }, aggregateDuration, aggregateStart: startFrom, aggregateDate }, aggregateResult)); } return { aggregationCount: i, aggregateDuration }; }); } function aggregateTask(params) { return (repos) => __awaiter(this, void 0, void 0, function* () { var _a; const { aggregateDate } = params; if (!(aggregateDate instanceof Date)) { throw new factory.errors.Argument('aggregateDate', 'must be Date'); } const aggregateDuration = moment.duration(1, params.aggregateDurationUnit) .toISOString(); let i = -1; while (i < params.aggregationCount) { i += 1; const runsFrom = moment(aggregateDate) .utc() // .tz('Asia/Tokyo') .add(-i, params.aggregateDurationUnit) .startOf(params.aggregateDurationUnit) .toDate(); const runsThrough = moment(aggregateDate) .utc() // .tz('Asia/Tokyo') .add(-i, params.aggregateDurationUnit) .endOf(params.aggregateDurationUnit) .toDate(); const aggregateResult = yield repos.task.aggregateTask({ project: { id: { $ne: params.excludedProjectId } }, runsFrom, runsThrough }); debug('aggregateTask:result', aggregateResult, (_a = aggregateResult.statuses[0]) === null || _a === void 0 ? void 0 : _a.aggregation, runsFrom, runsThrough); yield repos.agregation.saveAggregation(Object.assign({ typeOf: factory.aggregation.AggregationType.AggregateTask, project: { id: '*', typeOf: factory.organizationType.Project }, aggregateDuration, aggregateStart: runsFrom, aggregateDate }, aggregateResult)); } debug(i, 'aggregations saved'); return { aggregationCount: i, aggregateDuration }; }); }